標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第103回]

●Qe出力について、タイミングチャートで説明します

前回、タイミング発生回路の、74HC74を使ったQe出力回路が間違っている、と書きました。
もう一度タイミングパルスの発生回路(部分)を再掲します。


この回路はT15のときだけ、正しい出力が得られません。
タイミングチャートで説明します。



命令のタイミングチャートを利用したため、T4からのチヤートになっています。
Qa〜Qdが74HC161からの出力信号で、Qeは「期待される」74HC74からの出力信号です。

74HC161のpin15からは「T15」の期間に上位桁へのキャーリーパルスが出力されます。
キャーリー出力がT15からT16になる瞬間に出てくれれば、問題はなかったのですが、そうではなかったところにミスの原因がありました。
キャーリーパルスはT15になると同時に、立ち上がり、T15の期間中Hになっています。
この信号を74HC74のCK入力にしていました。
74HC74はCKの「立ち上がりエッジ」で入力をラッチして、出力を変化させます。
ということは、T15の立ち上がりで、Qeが出力されてしまうのです(タイミングチャートのQeX)。

T15ですから、Qe〜Qaは”01111”でなければならないのに、”11111”になってしまいます(T15ではなくて、T31です)。

どうすればよいかというと、74HC74のCKとして、74HC161のpin15の出力をそのまま使うのではなくて、その出力を74HC04で反転させた信号を使えばよいのです。

ただ、問題が1つだけあります。
このタイミング発生回路はMclr信号でクリアするようになっています。
もしもT15の立ち上がりでMclrが入力されると、困ったことがおきる可能性があります。
タイミングチャートの下の部分がそれです。

T15のときに発生するMclrは、T15が立ち上がってから出力されますから、74HC161のpin15からキャリーパルスは出てしまったあとになります。
キャリーパルスの立ち下り(つまり74HC74のCK入力の立ち上がり)は、Mclr信号(74HC161と74HC74のクリア信号)と同時ではなくて、74HC161の出力遅延時間だけ遅れます。
ということは、MclrによってQe〜Qaが”00000”になった直後に、74HC74のCK入力(立ち上がりエッジ)が発生するため、Qe〜Qaは”10000”になってしまいます(と推測されます)。

実は、「つくるCPU」回路では、MclrはTn期間のn=偶数の立ち上がりで発生するようにしていますから、実際にはそのようなことがおきる心配はありません(と思います)。
さらに、この問題はT15のときにだけ発生する可能性がありますが、幸いなことに、少なくともT15のときにMclrを発生させる命令回路はありません。

ですけれど、念のために、ということで、タイミングチャートの下の部分のような心配も回避するように、工夫した回路に直しました。


CLKの後半のLの期間だけ、キャリーパルスが74HC74に伝えられるようにしました。
もしもT15のときにMclrが入力されることで、T15の立ち上がり部分で誤ったキャリーパルスが74HC161から出力されたとしても、74HC04と74HC00のゲートによって、クロックの前半部分は、74HC74には伝わりませんから、上で書いたような、”00000”が”10000”になってしまう心配はありません。

回路を修正した後に撮影した、XTHL命令のT15の写真です。


またピンボケになってしまいましたけれど、LED表示は正しくなりました。
2008.10.26upload

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