ええっ⁈ 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個余ります。