トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第429回]
●オープンコレクタ(4)
トランジスタ版2入力オープンコレクタNAND回路の出力波形に現れた「切れ込み」の原因を追求する過程で、前回は気が付かなかった新たな現象を確認しました。
下は前回お見せした出力波形の画像です。
この波形は下の回路図でAに1MHzのクロックを入力しBには2MHzのクロックを入力したときの波形です。
ひょっとしてと思って、でもまさかねえと思いながら念のためにAには2MHzのクロックを入力しBには1MHzのクロックを入力してみました。
その結果が下の波形です。
「切れ込み」が深くなりました。
どちらの接続でも同じように思えるのですが。
よくわかりません。
接続によって出力の状態に差が出るようです。
どうして差が出るのかはよくわかりませんが、とにかく出力に「切れ込み」が発生する理由としてはトランジスタ出力の遅延が関係していることが考えられます。
理解し易いのはAに2MHz、Bに1MHzを入力した場合です。
問題の波形が発生するタイミングはAの2MHzクロックがHからLになるのとほとんど同時にBの1MHzクロックがLからHに立ち上がったときです。
Bのトランジスタは10nsほどでONになります([第426回]参照)。
あっと。
念には念を入れておいたほうがよいでしょう。
それはプルアップ抵抗が1KΩのときの値でした。
ひょっとするとAのトランジスタの状態によって数値が変わるかもしれません。
今回の条件では直前のAのトランジスタはONのはずですからBのトランジスタのコレクタには1KΩが直接つながっていると考えてもよいとは思いますが。
念のためです。
下の回路図の1KΩを1MΩにしてテストをしてみました。
これならほとんどハイインピーダンス状態です。
まずは出力の立ち上がり波形を見てみました。
上側(CH1)が入力クロック(約2KHz)です。
下側(CH2)が立ち上がり部分の出力波形です。
さすがにプルアップ抵抗が1MΩでは1/2Vcc付近で20μsほど遅延しています。
水平時間軸を拡大しました。
ちょうど20μsの遅延です。
それでは立ち下がりのほうはといいますと。
おお。
立ち下がりはプルアップ抵抗の値にほとんど関係なく10nsていどです。
それはそうだと素直に納得できます。
そこまで確認ができましたから説明に戻ります。
ですからおよそ10ns後にはAのトランジスタのエミッタはBのトランジスタを介してGNDにつながっていると考えられます。
その直前(10ns前)にAの入力クロックはHからLになっています。
するとA入力側のトランジスタはOFFとなって出力はハイインピーダンス(H)になるはずなのですが。
ここで思い出してみてください。
トランジスタのオープンコレクタ回路はON(出力はL)からOFF(出力はH)になるときに遅延するのでした。
今回のテスト回路では出力側につけたプルアップ抵抗は1KΩで、前回のテストではその遅延時間は25nsほどでした。
その間AトランジスタはON状態になっていると考えられるのですがAトランジスタの下にはBトランジスタがあります。
こちらはずっと入力がLなのでBトランジスタはOFFになっています。
A入力がHからLに変化したわずか後(10ns)にB入力がLからHになってそこでBトランジスタがONになります。
このときはAトランジスタの出力は遅延しているためまだON状態だと考えられます。
するとその出力は一旦はLになってそれから遅延しながらHになっていくと考えられます。
下はA入力クロックがHからLに変化するときにAトランジスタの出力がL→Hになっていく様子を確認した画像です。
今まで考えてきたことからすれば出力の立ち下がりは入力パルスの立ち下がりから10ns後だと思えるのですがこの画像では20ns後のように見えます。
それがなぜだかよくわかりませんが、トランジスタが上下に2段重ねになっていることが何か関係しているのかもしれません。
そういえば。
念のために前回お見せした切れ込みが浅い出力波形のほうも水平時間軸を拡大して確認してみたのですが。
こちらのほうは10nsほどの遅れで立ち下がっているように見えます。
その代わりに切れ込みが浅いところがさきほどの波形と異なっています。
なぜでしょうかねえ。
よくわかりません。
そんなことよりも。
そもそもこんな切れ込みがあって大丈夫なのかということなのですが。
ええ。
最初は私も「これじゃあとても使えんぞ」と思いました。
しかしよく考えてみますと。
これはテストのためにバイナリカウンタの出力パルスをクロック入力にしたことがそもそもの原因です。
オープンコレクタでなくてもバイナリカウンタの多段出力をNANDで受ければ出力にヒゲが発生したりするのは当たり前だといえましょう。
実際のCPUロジック回路ではカウンタ出力を受けるような特殊なところ以外ではこんな「危険な」回路にしたりはしません。
大抵はWRとかRDとかあるいは何かのストローブパルスで「安全な」信号のタイミングでゲートをして取り出します。
そういうことからすればそのあたりのことをよく考えて使うようにすれば問題はないのではないかと思います。
トランジスタでCPUをつくろう![第429回]
2024.3.11upload
前へ
次へ
ホームページトップへ戻る