標準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

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