標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第83回]
●PUSH命令回路の問題点(前回の続きです)
前回の終わりのところで、「T3のSPclkとT4のMEMWRがくっついているところが問題」だと書きました。
もう一度、PUSH命令のタイミングチャート([第69回])です。
このチャートは各信号の遅れをほとんど無視しています。
そこで問題点がはっきりするようにT3とT4の境目のあたりを拡大して、関係する信号にまとを絞ったタイミングチャートを描いてみました。
このタイミングチャートはテストに使ったプログラム、
0000 310080 LXI SP,8000
0003 F5 PUSH PSW
0004 E5 PUSH H
0005 F1 POP PSW
0006 E1 POP H
のうちの、
0004 E5 PUSH H
のT3とT4の境目の部分を拡大して示したものです。
信号のうちのいくつかは、74HC03、74HC05(いずれもオープンドレインゲート)の出力信号とプルアップ抵抗から構成されていて、立ち上がりがかなり遅れてしまいます。
このことについては[第72回]で説明しました。
PCADout、PCclk、SPclkがゆるい勾配になっているのは、その理由からです。
dataDIRは下がりエッジがゆるくなっていますが、これはロジック回路が反転しているためで、模式的な表現です。
PC(プログラムカウンタ)、SP(スタックポインタ)はともに入力クロックの上がりエッジがゆるやかなため、カウントアップ(SPはカウントダウン)するのが、T3の終わりのタイミングよりも遅れます。
外部アドレスバスへの出力は、PCADoutとSPselによって、PCからSPへ切り換えられますが、両信号のタイミングのズレから、多分上のタイミングチャートのように、T4のはじめの部分で最初はPCとSPの出力がぶつかり、それからSPの値が出力されると考えられます。
SPもカウントダウンが遅れるので、SPの値がA15−A0に出力されはじめる、はじめの部分(図の水色の部分)では、カウントダウンする前のアドレスが出力されると思われます。
次は外部データバスD7−D0について見てみます。
こちらはdataDIRの遅れによって、データバスバッファ74HC245の向きが切り換わるのが遅れます。
メモリからはT3の終わりまでは、命令コードの”E5”がD7−D0に出力されています。
T3の終わりにMEMWRがアクティブになると、メモリからの出力はなくなり、D7−D0はハイインピーダンスになります。
D7−D0も抵抗でプルアップしていますが、Lレベルの出力だったビットがHレベルになるのが遅れるのは、他の信号の場合と同じです。
本当はここでinnerBUSからHレジスタの値がD7−D0に出てくるはずなのですが、74HC245の向きが変わるのが遅れるために、ここにデータの空白の期間が生まれます。
しかしいきなりD7−D0が”FF”になるのではなくて、D7−D0の各ビットの遅れによって、それまでメモリから出力されていた”E5”がしばらくの間D7−D0に残った状態になります。
メモリ(RAM62256タイプ)のデータシートでは、データがメモリアドレスに書き込まれるタイミングはMEMWRの立ち上がりのタイミングということになっています。
それならいいのかなぁ、とつい思ってしまったのですが、ずっと長い間の経験から「そんなはずはないのだが…」という疑問が残っていました。
確かに、WR信号の立ち上がりのタイミングでデータがメモリにラッチされるので、「データ」はそれ以前には不確定でもよいはずなのですが…。
しかし、アドレスについては、それとは別問題のはずです。
確か、ダイナミックRAMなどでは、WR信号をアクティブにしておいて、CS(チップセレクト)をON/OFFすることでデータを書き込む、などというモードがあったように思います。
WR信号がアクティブな状態でアドレスを切り換えると、多分切り換え前のメモリアドレスにそのときのデータが書き込まれてしまう、のではないか、との推測がなりたちます。
このあたりを「ついうっかり」してしまっていました。
やはり最初に回路を考えた時点のように、MEMWRはデータ、アドレスが確定してから、アクティブにしなければならなかったのです。
●MEMWR回路を変更しました
今回変更したMEMWR回路です。
考え方は[第72回]のregWR回路の変更と同じです。
[第72回]のregWR回路からのmemWR信号はすでに変更済みですから、今回はそれに追加して、2枚目の基板からのmemWR信号に対してclkでゲートします。
●MEMWR回路変更後のPUSH命令のタイミングチャートです
そういえば、regWRもclkでゲートするようにしたのでした。
ということは、POP命令のタイミングチャートも変わります。
●regWR回路変更後のPOP命令のタイミングチャートです
すでに説明したこのほかの命令のタイミングチャートについても、MEMWR、regWRの信号のタイミングは全部、上のPUSH命令、POP命令のタイミングチャートと同じタイミングになりますが、いちいち変更するのも手間ですので、そのままにしておきます。
2008.9.30upload
前へ
次へ
ホームページトップへ戻る