復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第278回]
●RC遅延回路
前回は冒頭で[第274回]および[第276回]の回路図に間違いがあることに気が付きましたのでそれを訂正いたしました、と書いたのでありますが。
その前回にお見せした回路図にまた同じ間違いがありました。
うっかりして修正前の図版をもとにして作業してしまったのですねえ。
恥の上塗りでありました。
本日になりましてからら気が付きましたのでさっそく修正済みの図に差し替えました。
ことのついでですので、この遅延回路のダイオードの役目について説明をしておくことにいたします。
まあ初歩的なことですのでおそらく皆様よくご存知のこととは思いますが。
まずダイオードが無い場合を考えますと、前段のゲートの出力がLからHになったときは、抵抗Rを介してコンデンサCが充電されます。
その充電にともなって後段のゲートの入力端子の電圧は0Vから5Vに向けて上昇していきます。
その入力電圧がC−MOSICの閾値1/2Vdd(2.5V)を越えると、後段のゲートの出力がHになります(この図の回路はもう一方の入力とのORによって出力の状態が異なりますが、ここではそれは考えないこととします)。
この充電時間が出力の遅延時間になります。
大体0.7〜0.8RCです。
この回路の場合実測値は約8μsecでした(前回のロジアナ波形参照)。
前段のゲートの出力がHからLに変わったときはその逆のことが起こります。
今度は5Vに充電されていたコンデンサCが抵抗Rを介して0Vに向けて放電されていきます。
後段のゲートの入力端子の電圧が2.5Vを割ると、ゲートの出力がLになります。
このときもやはり同じ時間だけ出力の遅延が発生します。
以上をご理解いただいた上で、今度はダイオードが有る場合について考えてみることにいたしましょう。
図ではダイオードはコンデンサから前段のゲートの出力に向かう方向に入っています。
前段のゲートの出力がLからHになるときはダイオードは働きませんからもともとのRC遅延回路と同じです。
逆に前段のゲートの出力がHからLになると、今度は5Vに充電されていたコンデンサは抵抗を介してではなくて、ダイオードを介して放電されます。
このときはダイオードとC−MOSゲートの内部抵抗がRとして働きますが、ともにきわめて小さな値ですから、1000pF程度の容量でしたらほとんど瞬時に放電されてしまいます。
つまりここにダイオードを入れることによって後段のゲート出力がLからHになるときは遅延が利いてゆっくりと立ち上がるのに対して、逆にHからLになるときは遅延せずにただちに立ち下がることになります。
この回路の最終段はCPUに対するWAIT信号の出力になっています。
WAIT信号がLからHになると、今までデータバスから命令コードを読み込むところで待たされていたCPUが直ちに読み込みを完了して次のアクションに移ります。
タイミングとしてはデータバスにC3Hが挿入されるのと同時になります。
このときデータバスのD2〜D5は、もし直前の値がHだった場合でも各ラインに入っているダイオードを介してGNDにショートする形でHからLになりますからその遷移はほぼ瞬時に行われます。
しかし残りのD0、D1、D6、D7はその直前の値がLだった場合、メモリからの出力がOFFになってそれからデータバスラインに入ったプルアップ抵抗によってゆっくりとLからHに立ち上がります(この場合ラインの浮遊容量がCとして働きプルアップ抵抗とともに遅延回路を構成してしまいます)。
その様子を[第276回]のロジアナ波形でお見せしましょう。
(00)信号の立ち上がり後、D5はHからLになるのに50ns程度しかかかっていませんが、D1、D6、D7はLからHになるのに200ns程度かかっています。
もしWAIT出力回路に上述の遅延回路がなければ、(00)信号の立ち上がり後すぐにWAITが解除されてしまいますから、その場合には命令コードC3Hの読み取りに失敗してしまう可能性が高くなります。
なおここでの実測値が約200nsであることからすれば、せいぜい1μsも遅延すれば十分と思われますが、安全のためさらに十分な遅延時間(約8μs)にしてあります。
ところで[第276回]の回路図では、上記の遅延回路のほかにもう1箇所遅延回路が使われています。
図の中ほど、74HC73のCLR端子にも遅延回路が使われています。
ちょっと抵抗値が見難いですが、2.2KΩです。
前述の遅延回路の1/5の値です。
さらにここはダイオードの向きが逆になっています。
この遅延回路はいままで説明しましたWAIT信号がLからHになる(つまりWAITが解除される)タイミングとは逆に、再びWAIT信号がHからLになるタイミングで働きます。
この74HC73のpin12とpin9の出力は、CPUがJP命令を読み取ってそれを実行した直後のタイミングでともにHになって、その両出力のANDによって再びWAIT信号をLにするもとになっています。
この74HC73の両出力がHである限りはWAIT出力はLになっているのですが、(00)がLになるとクリアされて、その結果WAIT出力はOFF(H)になります。
そのときちょうど同じタイミングで今回のはじめのところから説明をしております遅延回路の後段のゲート出力がLになってWAIT出力をLにします。
しかしWAIT出力をLに維持するという点から見るとそれは非常に危険なことで、わずかなゲートの遅れでそこに隙間ができるとWAIT信号にヒゲが発生することになります。
ましてそこにはダイオードが入っているとはいえ1000pFのコンデンサがつながっていますから、遅延が0であるとはいえません。
最悪の場合、それによってわずかにWAITが途切れてしまい、CPUが次の命令を実行してしまうかもしれません。
74HC73のCLR端子に入れた遅延回路はそのような危険を防止するためのものなのです。
その遅延回路によって、前述の74HC32のゲート出力がLになってWAIT信号出力のLが確実なものになるまでのわずかな期間、WAIT信号のL出力が維持されます。
今回はアドレスインクリメント回路の動作を、ロジアナで観測した波形をもとに説明をする予定だったのですが、遅延回路の説明で時間がつぶれてしまいました。
アドレスインクリメント回路のロジアナ波形につきましては次回に説明をすることにいたします。
ワンボードマイコンでCP/Mを![第278回]
2012.12.29upload
前へ
次へ
ホームページトップへ戻る