2021.8.29
前へ
次へ
ホームページトップへ戻る

トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


[第391回]



●4MHzでC=56pFが必要になった理由についての考察

前回はPCWR回路に56pFコンデンサを実装することで4MHzでもJMP命令が正しく実行されるようになりました。
PC回路でアドレスのインクリメントやデータを書き込むときに必要になる幅の狭いパルスを作り出すためにRCによる遅延回路を使っています。
しかし試作テストの過程でコンデンサがなくても必要な遅延時間が得られることがわかったため、実際にはコンデンサは実装しないでただ抵抗のみ1KΩを実装するだけにしました。
CPUクロックが2MHzまでならその回路でよかったのですが、4MHzにするとPCWRLがつぶれてしまって出力されません。
その対策としてPC0回路にのみCに56pFのセラミックコンデンサを実装してみたところ4MHzでもJMP命令が正しく実行されるようになりました。
なぜ2MHzまでならCがなくてもよいのに4MHzでは必要になるのか、そこのところはよくわかりません。

ところで2MHz以下でもCはなくてもよいけれどもR=1KΩは必要です。
Rも外して後段と直結してしまうと必要な遅延時間は得られません。
そこで考えられるのはトランジスタのベースに入っているスピードアップコンデンサの存在です。
R=1KΩが無い状態のときにはこのスピードアップコンデンサ(22pF)のおかげでトランジスタ回路が高速でON/OFFします。
R=1KΩがあるときはスピードアップコンデンサの利きが悪くなります(Rに妨げられるためだと考えられますが結果としてそこで遅延が発生します)。
ということなのですが、その利き具合が4MHzのときと2MHz以下のときとで異なってくるかというと、それもどうもおかしな話だなあと思います。

あれこれ考えてはみたのですけれど、結局のところ理由はよくわからないということになりそうです。
ノイズとかリンギングなどの影響で誤動作するようなときに信号回路に56pF程度のコンデンサを入れると誤動作が止まるということを何回か経験しています。
今回もそういうことかもしれません。

原因の解明には至りませんでしたが、この2日ほどあれこれ考察する過程で波形の写真を何枚か撮りました。
結果的には前回の4MHz問題に対してはちょっと的外れになってしまいましたが、せっかくオシロで観測して写真まで撮ったのですから後々の参考になるかもしれないということで、記録として残すことにしました。

前回のロジアナの画像をよく見ると4MHz<2MHz<1MHzの順にPROBE3のパルス幅が大きくなっていることが確認できます。
ここはRC回路とNANDゲートを組み合わせて幅の狭いパルスを出力しているところですから本来は周波数の影響は無いはずです。
ちなみにRC回路の場合T=RCという関係式があってこれをRC回路の時定数というようです。
R=1KΩ、C=56pFの場合時定数Tは1KΩ*56pFの計算を、単位をS(秒)、Ω、F(ファラド)に直して計算して求めます。
計算結果はT=56nsになります。
これはどういう値かというとCにRを介して電圧Eがかかったとき、その開始時刻から56ns後にCの両端電圧が0.632Eになるという値です。
ここには周波数(f)のファクタがありませんから入力周波数が変わってもTの値は変わらないはずです。
それでもそこに周波数が関係しているらしいということになりますと。
ひとつ考えられることがありました。

周波数が関係するかもしれないというのはこういうことです。
たとえば上記のR=1KΩ、C=56pFの場合、時定数T=RC=56nsというのは充電開始時から56ns後にRとCの接点部分の電圧がVccの63.2%になるということなのですが、それを越えて100%Vccになるのは充電開始後どれだけ時間が経過したときかという問題です。
いや100%は無理だとしてもそれに近い値になるのにはある程度の経過時間が必要らしいということは十分に推測できます。
そこでもしCがほぼ満充電される前にRに印加されている電圧が反転してしまったならばどうなるだろうか、ということを考えました。
図で説明します。

図は2組に分かれています。
それぞれの上側はRに入力される波形で下側はRとCとの接点部分の波形です。
上の組の入力はCが十分に充電、放電されるだけの周期があるとします。
それに対して下の組の入力はCが十分に充放電される前に反転しています。
するとコンデンサCは十分に充電される前に放電されることになります。
さらに十分に放電する前に再び充電されることになります。
余りわかりやすい図ではありませんが下の組ではおそらくRとCの結合部はGNDから浮き上がった波形(同時にVccよりも低い電圧で反転する波形)になるのではないかと推測しました。
この場合充放電されるCの値は実際のコンデンサの容量よりも小さくなるはずで、すると時定数tの値もそれだけ小さくなるのではないかと思われます。
するとEの値は充放電の上限電圧−下限電圧になると考えられ、このときの0.632Eという値も小さい値になると同時にその値に下限電圧を加えた値にRとCの接合部の電圧が達したときがtであるということになるのでは、という推測が成り立ちます。
その上昇カーブが上の組に対してどうなのかということまでは難しくてよくわからないのですが、RとCの接合部が次段のインバータの入力になっていることを考えると、1/2Vccに達するまでの時間はおそらく下の組の方が早いのではないかと推測しました。
つまりこの場合遅延時間は一定ではなくて、上よりは下のほうが短くなるということです。

下図の回路で試してみました。

トランジスタ回路はベース電流の影響などもあって今回の測定にはやや難がありますからHCMOSICでテストを行ないました。
74HC04ではなくて74HCU04を使ったことに特別の意味はありません。
たまたま以前別のテストに使うために作ったジャノメ基板に配線した74HCU04回路がそのまま使えそうでしたのでそれを利用しただけです。

テスト中の写真です。

左側はクロック発生回路ボード([第65回])です。
右側がジャノメ基板に組んだ74HCU04回路です。

74HCU04部分を拡大しました。

テストクリップで隠れてしまっていますが白色テストクリップの先に1KΩ抵抗の頭が見えています。
その右にあるのが56pFセラミックコンデンサです。

まずは2MHzのテストです。

上側(CH1)が先ほどの回路図のA点です。
下側(CH2)がC点です。
RC回路のために出力が遅延していることがわかります。

同じテストを4MHzで行ないました。

2MHzと比べるとわずかですが出力の遅延時間が短いことがわかります。
CH2の波形が立ち下がったところで両者を比べてみるとわずかですが4MHzのほうが10nsほど短いようです。

こちらは2MHzでのテストです。

CH1はA点でCH2はB点です。
2MHzでは入力パルスのHLの期間が必要な充放電期間ぎりぎりという感じです。
CH2の波形は画面中央の位置(CH1が立ち上がる位置)でわずかに浮いているように見えます。
ちょっと充放電時間が不足しているかもしれません。

こちらは4MHzです。

4MHzではCH2の波形は完全に浮き上がっています。
画面でははっきりはわかりませんが上限もVcc(5V)よりは少し低いようです。
B点での4MHzと2MHzの波形の違いがC点での遅延時間の差につながっていると考えられます。

参考までに1MHzでも同じテストをしてみました。

水平時間軸のスケールを2MHz、4MHzと同じにしたため同時にはCH1の半波しか観測できません。
CH1はA点でCH2はC点です。
2MHzよりもわずかですが遅延時間はさらに大きいように見えます。

こちらは残りの半波です。

立ち上がりと立ち下がりで遅延時間にわずかの差があるようです。

こちらは1MHzでのA点とB点の波形です。

1MHzではほぼ満充電に近いように見えます。

残りの半波です。

1MHzでは放電も十分なようです。
1MHzでのテストをしてみた結果、R=1KΩ、C=56pFでは時定数こそわずか56nsに過ぎませんが56pFコンデンサがほぼ十分な程度に充放電するには2MHz(半波は250ns)でも不足で少なくとも400ns程度は必要であることがわかりました。

ここまで書いてきて気が付きました。
前回問題になったクロック4MHzというのはCPUクロックのことでした。
PCWRの回路でRC回路に入力されるクロックはその1/2の2MHzのMCLKでした。
つまり。
上の4MHzのテストは必要のないものだったのでした。
前回問題になったCPUクロック4MHzに対しては2MHzのテストが相当します。
CPUクロック2MHzに対しては1MHzのテストが相当します。
まあでもせっかく撮った写真ですから無駄でも的外れでもこのまま残しておくことにいたします。

実はひょっとしたらトランジスタのベースにスピードアップコンデンサとして入っている22pFが前回の4MHz問題に関係しているかもしれないと考えて、上と同じテストをR=1KΩ、C=22pFでも行なってみました。
今ではそれも的外れだったと考えていますが、せっかく写真まで撮ったことですから参考までに記録として残すことにしました。

R=1KΩ、C=22pF、2MHzです。

CH1はA点、CH2はB点です。

1MHzです。

立ち上がりの半波です。

こちらも1MHzです。

立ち下がりの半波です。

もう一度、クロック2MHzです。

CH1はA点、CH2はC点です。
30nsぐらいの遅延です。
74HCU04の遅延時間も考慮すると時定数T=RC=22nsに近い値になっています。

1MHzの半波です。

遅延時間は2MHzと大体同じです。

1MHzの残りの半波です。

こちらも2MHzと同じ感じです。

トランジスタでCPUをつくろう![第391回]
2021.8.29upload

前へ
次へ
ホームページトップへ戻る