ええっ⁈ CPU創ったの⁈ すっごーい! 第2章 第5節
~あんたCPUなんか創ってどうするのよ?! Vol.2~
2017/8/11
コミックマーケット C92 1日目 東7そ11b
第2章 第5節 論理設計②
前節で論理設計を行いましたが、これはあくまでも理論上の設計なので、これを現実の回路に落とし込む作業が必要になります。もしTD4EX1をFPGAで作るのなら前節までで出来上がりなのですが、本書はCPUをロジックICで作ることを目的としていますから、現実に存在するICに合わせて論理設計を調整する必要があります。
TD4では命令デコーダーとして74HC32と74HC10を1個ずつ使っています。74HC32は2入力のORが4個、74HC10は3入力のNANDが3個入っていますので、これらはそのまま使うとして、問題はこの2個のICだけでTD4EX1の命令をデコードできるかどうかです。もしできないのなら、何らかのICを追加する必要があります。
では前節の結果を順番に再確認していきましょう。
- セレクタ①
ST端子 = bit7
SELECT端子 = bit6これはそのままです。
- セレクタ②
SELECT端子 = bit5 OR (bit7 AND bit6 AND bit4)
(bit7 AND bit6 AND bit4)の部分は74HC10の3入力NANDを使いましょう。必要なのはNANDではなくてANDですが、NANDの1個をNOTとして使えば問題ありません。ORは74HC32を使います。
筆者独自の表記法で恐縮ですが、NANDを使って以下のように記述します。
SELECT端子 = bit5 OR NOT (bit7 NAND bit6 NAND bit4)
消費した論理回路はNANDが2個、ORが1個ですので、残りはNANDが1個、ORが3個です。
- 出力先
アキュムレータAのLD端子 = bit4 OR (bit7 AND bit6)
アキュムレータBのLD端子 = (NOT bit4) OR (bit7 AND bit6)
出力ポートのLD端子 = bit4 OR NOT (bit7 AND bit6)ここでちょっと考えます。(bit7 AND bit6)を74HC10のNANDで実現したいところですが、NANDは1個しか残っていないので、このままでは不可能です。
ここでICを1個追加しましょう。
(bit7 AND bit6)を実現するためにICを追加するのですからANDが良さそうな気がしますが、NOTも必要であることを考えるとNANDにするべきです。という事で74HC00を1個追加します。
アキュムレータAのLD端子 = bit4 OR NOT (bit7 NAND bit6)
アキュムレータBのLD端子 = (NOT bit4) OR NOT (bit7 NAND bit6)
出力ポートのLD端子 = bit4 OR (bit7 NAND bit6)ここでちょっとしたマジックを一つ。アキュムレータBのLD端子のORに注目してください。
このORの入力はNOT bit4とNOT (bit7 NAND bit6)ですが、両方ともNOTが付いています。このような場合、等価変換によって1個のNANDに置き換えることが出来ます。
アキュムレータBのLD端子 = bit4 NAND (bit7 NAND bit6)
さらに(bit7 NAND bit6)は共通なのでnand76という名前を付けて分離します。
また、後で必要になるので、これを反転した信号にand76という名前を付けておきます。
nand76 = bit7 NAND bit6
and76 = NOT nand76
アキュムレータAのLD端子 = bit4 OR and76
アキュムレータBのLD端子 = bit4 NAND nand76
出力ポートのLD端子 = bit4 OR nand76追加した74HC00のNANDのうち2個をNANDとして使い、1個をNOT用に使います。ORは2個使用します。従って残りはORが1個、2入力NANDが1個、3入力NANDが1個となります。
- PC
最後に一番厄介なPCです。
PCのLD端子 = NOT(bit7 AND bit6 AND bit4 AND (Q OR bit5))
これをそのまま回路にすると4入力のNANDである74HC20が必要になってしまいますが、幸いなことにbit7とbit6のANDはand76という信号線として既に用意されていますので、3入力のNANDを使えば大丈夫です。ORも1個残っていますので、結局以下のようになります。
PCのLD端子 = and76 NAND bit4 NAND (Q OR bit5)
最終的に2入力のNANDが1個余ります。