この世のCPUを食べ尽くすのだ! 第3章 第3節 第4項

~あんたCPUなんか創ってどうするのよ?! Vol.3~

2018/10/8
技術書典5 け39

第3章 第3節 第4項 RAMのCS端子およびWE端子

CS端子はRAMの動作する/しないを制御する重要な信号です。このCS端子は以下の条件が揃ったときに0にします。

アドレスが0~D
メモリマップドI/Oを採用したため、アドレスのE番地にはテンキー入出力ポートとLEDへの出力ポートが割り当てられ、F番地には出力先LEDの選択ポートが割り当てられています。そのためRAMは0~D番地までです。
従ってI/Oユニットはアドレスバスの上位3ビット(bit3~1)を調べ、全部のビットが1の場合はCS端子を1のままにします。どれか1ビットでも0であれば、他の条件と合わせて0にします。
READ信号またはWRITE信号が0
READ信号はCPUがIN命令を実行していることを示し、WRITE信号はOUT命令を実行していることを示します。従ってどちらかの信号が0の場合にCS端子を0にします。
クロックが0
「クロックが1の間は何もしない」という取り決めに従い、クロックが1の間はCS端子を1にします。クロックが0であれば、他の条件と合わせて0にします。

これらの条件をもとにCS端子の制御回路を作ります。論理式で表すと以下のようになります。

CS端子 = (bit3 AND bit2 AND bit1) OR (READ AND WRITE) OR CLOCK

いっぽうWE端子はCPUから供給されるWRITE信号そのままです。

WE端子 = WRITE

CS制御モードを使うためには、CS端子よりも先にWE端子を0にする必要があるため、WE端子は「クロックが1の間は何もしない」という決まりに従うことができません。

そこで筆者はWE端子とWRITE信号に関しては「クロックが1の間は何もしない」という決まりを適用しない事にしました。命令デコーダーでOUT命令がデコードされた段階でWRITE信号を0にし、それに伴ってWE端子も0にします。この条件では「ヒゲ」が発生する可能性がありますが、「ヒゲ」が発生するのはクロックが1の期間だけですし、その間はCS端子が1なのでRAMは何もしません。心配無用です。