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

●INR、DCR命令について説明するつもりでしたが…

前回、最初の基板と2枚目の基板をつないで、まず最初にLXI命令をステップ動作させながら、写真に撮ったものをもとに、説明をしました。
今回はその続きのINR、DCR命令の説明をするつもりでした。

INR、DCR命令は、もう説明済みだと勘違いしていました。まだ、説明していませんでしたね。
そういえば、INR、DCR命令は、また新しいレジスタ(シフトレジスタ)を使いますから、その回路の説明をまずしなければなりません。
いままで説明してきた命令にはなかったことですが、INR、DCR命令はフラグの変化を伴います。
そうすると、フラグレジスタについても説明をしなければなりません。

結構たいへんだなぁ、ということで、説明するのはもっと後にしよう、と考えたことを、すっかり忘れてしまっていました。

せっかく、2枚目の基板もなんとか動くようになってきて、クロック動作の写真を使って説明をはじめたのですから、もう少し、写真を使っての説明を続けていきたい気持ちです。

ということで、INR、DCR命令の説明は、もうしばらく後にして、いままでに説明した、JMP、STA、LDA、STAX、LDAX、PUSH、POPについて、命令の動作をクロック毎に写真に撮って、それをもとにしながら説明を進めていきたいと思います。
ですから、予定変更です。
INR、DCR命令については、もう少し後になります。

なんだかボケボケです。INR、DCR命令は[第58回]ですでに説明済みでした。
自慢じゃありませんが大容量(でもないか)完全揮発性メモリなものですから、つねにリフレッシュしていないと、きれいさっぱりと忘れ去ってしまいます。
最近はときどき自宅の住所とか電話番号とかを忘れてしまいそうな恐怖に襲われたりしています。
INR、DCR命令のクロック毎の動作については、てきとうなところで説明することにいたします。
(以上、08年9月24日追記)


●回路図の訂正です

まずは、STA、LDA命令について、ステップ動作をさせながら、写真に撮ろうとしたのですが…。

LDA命令の最後、T8までくると、WKHレジスタの値が、突然”FF”になってしまいました。
何回繰り返してみても、決まってT7からT8に移る瞬間に、WKHレジスタが”FF”に書き変えられてしまいます。
でもWKHregWRのLEDは点灯していません。

まさか?
と思いましたが、どうもWKHregWRしか原因は考えられません。
ストレージオシロでWKHregWRをモニタしてみると、T7からT8に移る瞬間に幅のせまいパルスが出ていることがわかりました。

LDA命令のタイミングチャート([第64回])を見ていてやっと気がつきました。
これじゃあ、だめだったのです。
うっかりしていました。

●d3〜d0の立ち上がりが遅い!

LDA命令のタイミングチャート([第64回])のうち、問題の部分だけ抜き出して説明をします。


多分、d3とd0の立ち上がりが遅くて、T7からT8になって、regWRがアクティブになったときに、d3とd0がまだHレベルになっていないため、わずかな期間、WKHレジスタに対する書き込みパルス(WKHregWR)が出力されてしまうのではないか、と考えました。

ストレージオシロで確認してみました。

上(CH1)がd0で、下(CH2)がregWRです。
やっぱり!

オープンコレクタゲートの出力を使ってのワイヤードORなので、立ち上がりが遅いだろうとは思っていましたが、74HC373はパルスのエッジでデータをラッチするから、regWR信号の立ち上がりまでにd3〜d0やデータが安定すればよい、と簡単に考えてしまいました。
上の図で説明したような書き込みパルスが発生する可能性について、当然気がつくべきでした。

CPU回路のような、速い立ち上がりが要求されるような回路では、74HC03や74HC05ではなくて、3ステートバッファの74HC125か74HC126を使うべきでした。
しかしいまさら74HC03や74HC05を全部74HC126に変更する、なんてことはとてもできません。
そこで、レジスタへの書き込みパルスの幅を下のチャートのようにせばめることにしました。



CLOCKとregWRのANDをとって、それをレジスタ書き込み信号にしたのです。
レジスタ書き込み信号の回路図は[第45回]でお見せしたものが最終でしたが、またまた変更になってしまいました。

今回変更した回路図です。


左上部分にregWRとCLOCKとのAND回路が追加になっています。
今回は基板内で空いているゲートを手っ取り早く利用したため、図の回路になりましたが、本当は矢印で示したように74HC32を使った方がスマートです。

ところで、今回はMEMWR回路も再検討した結果、[第45回]で追加した、MEMWRのための、フリップフロップ回路は削除することにしました。
そのことについては、また次回に説明をすることにいたします。
2008.9.19upload
2008.9.24追記

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