標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第392回]
●またしても前回の訂正です
前回、WR信号の立ち下りが問題になるのはMEMWRだけです、と書きました。
ですけれど、またまたうっかりしていました。
問題になるのは、MEMWRだけではありませんでした。
たしかこの連載のずっと前のほうのどこかに書いていたと思います。
レジスタのセレクト信号もTn(Mn)に同期してアクティブになります。
メモリはCS(チップセレクト)とRD、WRが分離していますが、レジスタの場合は回路の都合で、RDとWRそのものがレジスタセレクト信号になるようにしています。
まあ、動作としてはどちらの場合でも同じで、結局WR信号がアクティブになった時点で、そのときに選択されているチップにデータが書き込まれることになります。
regWR信号は立ち上がりはゆっくりですが、立ち下がりはゲートの遅延時間以上には遅れません(厳密にいえばそれに回路のキャパシタンスなどもろもろが加わってそれなりに遅延するのですが)。
つまりregWR(in)はレジスタセレクトとほぼ同時にアクティブになってしまうということです。
この信号をそのままレジスタへのWR信号にしてしまうと、ひょっとしてレジスタセレクト信号のほうが遅れてしまうかもしれません。
その場合には、regWRが立ち下がったはじめのわずかな期間、別のレジスタが選択されて誤書込されてしまうかもしれません。
以上については、おお、こんなところ([第72回])で書いていました。
そうでした。
d0〜d3の立ち上がりが遅いために、regWRが先にアクティブになってしまい、違うレジスタに誤書込されてしまったことについて書いておりました。
ですから、MEMWRだけではなくて、regWRも、Tn(Mn)に同期してすぐにアクティブにするのではなくて、それよりも遅れてアクティブにする必要があったのでした。
まあ今回の4ビットCPU回路については、レジスタセレクトにd0〜やs0〜は使わないように考えていますから、レジスタセレクト信号はそれほど遅くはならないはずなのですけれど、それにしてもregWRがいきなりアクティブになってはまずい、ということに変わりはありません。
今回のregWR回路で、実際のレジスタやメモリに対するWR信号が、データバスやアドレスバスよりも半クロック遅れてアクティブになるようにしているのは、そういう理由からなのです(ってことをもうきれいにすっかり忘れてしまっていました)。
●テスト回路の信号を「ロジアナ」で観測してみました
[第374回]で紹介しました「カメレオンUSB+ロジアナ」で、今回作成したテスト回路の信号を観測してみました。
ロジアナは一度にたくさんの信号を観測できるのが、最大の利点ですが、ちゃんとメモしておかないと、どの信号が回路のどこなのかがわからなくなってしまいます。
たしか「カメレオンUSB+ロジアナ」は、プローブの名前を変更できる機能があったはずなのですが、面倒なのでデフォルトのままにしてあります。
その代わり、観測したポイントを回路図に記入しました。回路図の中で赤色の()で示した数字がロジアナのプローブ番号です。
プローブ(2)だけがちょっと離れてしまいました。
(0)がCLOCK(Φ)、(1)がその反転信号です。(3)〜(6)はQA〜QDです。(7)〜(9)、(2)はT0、T2、T4、T6です。
(9)はregWR(in)の前段の信号でT4そのものになっています。
(10)も同じ位相の信号ですが、オープンコレクタ出力を受けて反転させていますから、立ち下りが遅れるはずです。
(11)が本当のregWR信号です。
[09.12.5追記]
03〜06はQA〜QDです。
ちょうど1.0μSからカウントがスタートしています。
03〜06を上から見ると普通の2進数表記と逆になりますから、06〜03の順に見て、それを右から左に追っていくと、0000、0001、0010、0011、0100、0101、0110、0111、1000、1001、1010まで読み取れます。
左端の0.0μSのところを同じようにして読んでみますと、1100、1110、1111になっていることがわかります(ここはロジアナがスタートした直後のせいでしょうか、クロックが少し乱れています)。
そしてその下の07〜09を見ると、07は0000の期間にパルスが出ています。T0です。
08は0010ですからT2です。09は0100ですからT4です。10も09と同じになっています。
この次のパルスは02に出ています。0110ですからT6です。
74HC238のG1にQAを入れるという工夫によって、T0、T2、T4、T6と、偶数番のみの出力が得られていることが確認できました。
11が本当のregWRですが、半クロック遅れてアクティブになっていて、T4の終わりに立ち上がっていることがわかります。なおこのregWRの立ち上がりはT4の終わりよりは少し遅れるはずなのですが、10MHzのサンプリングではその遅れは確認できません。100MHzで観測すれば確認できるはずです。
[追記ここまで]
こちらは100MHzで観測した波形です。
このくらいのレンジで見ると、信号が遅延している様子がよくわかります。
面白いのは、一番上の00と01です。
ここは74HC74のQとQ_ですから同じタイミングのはずなのですが、QもQ_も立ち上がりよりも立ち下りのほうが遅れています。
なぜでしょうかねぇ。
09と10はオープンコレクタの影響を受けて、立ち下りのほうが遅くなっています。
でも30ns程度ですから、それほど遅れてはいません。
上の10MHzでは同時に見えた11(regWR)の立ち下りも09(T4)の終わりより遅れていることが確認できます。
しかし今回はテスト用の回路で配線もうんと短いですから、それほど大きな遅れにはなっていません。
MYCPU80のように大きな基板で配線長がうんと長くなって、ICもいっぱいぶら下がってくると、多分100ns以上の遅れが出るようになると思います。
いやあ、こうやって見てみますと、「カメレオンUSB+ロジアナ」は、なかなかのすぐれものではありませんか。
2009.12.4upload
2009.12.5追記
前へ
次へ
ホームページトップへ戻る