この世の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は何もしません。心配無用です。