ハードウェアエンジニアの守破離

国内電機メーカーに勤務しているハードウェアエンジニア

【Nand2tetirs】名著『コンピュータシステムの理論と実装』を読んで、実際にコンピュータシステムを構築してみる #3

今回の内容

↓前回

subarukun.hatenablog.com


前回設計したNANDをブロック化して、NOT, AND, OR, XORを構築します。

最初はNANDのみ使用可能な状態ですが、論理ゲートを構築できたらブロック化して手駒を徐々に増やして行こうと思います。

徐々に仲間(Component)が増えて最後に魔王(CPU)を倒すRPGのような感覚です。

構築した回路はGithubのcircuitsリポジトリに順次アップしています。

NAND回路のブロック化

前回MOSFETを用いて設計したNAND回路を簡略化のためブロック化します。

ブロック化の方法についてはこちらのサイトを参考にさせていただきました。

電圧源とGNDはブロックの端子として出したいので、Labelに置き換えます。

f:id:Subarukun:20220313173258p:plain

回路図(.asc)を一部修正後、[Hieraruchy]->[open this Sheet's Symbol]でSymbol(.asy)を作成します。[Draw]からLineやArc、Circleを駆使してそれっぽいシンボルを作成します。

f:id:Subarukun:20220313173631p:plain

大きさはアバウトですが完成しました。

実際に作成したComponentが所望の動作するか確認します。

前回のNANDシミュレーション回路を置き換えたところ、同じ出力結果が得られたためブロック化が成功したことが分かります。

f:id:Subarukun:20220313174041p:plain

Nand to NOT

Notは前回MOSFETレベルで設計しましたが、NANDから再構築します。

f:id:Subarukun:20220305213140p:plain

2入力の論理がTrueの時に出力がFalseになるNANDの特性を利用して、2入力をshortすればNOTが完成します。

f:id:Subarukun:20220313175205p:plain

NANDのようにNOTもブロック化して、今後簡単に使用できるようにします。

f:id:Subarukun:20220313180306p:plain

正常にブロック化できたことが確認できました。

f:id:Subarukun:20220402221359p:plain

Nand to AND

ANDの記号と真理値表は以下の通りです。

ANDは2入力の積をとります。

f:id:Subarukun:20220313175823p:plain

NANDの出力を反転させることでANDは構築できます。

直前にパーティに入れたNOTが早速活躍しました。

MOSFETは合計8個使用されています。

f:id:Subarukun:20220313182257p:plain

ANDをブロック化して…パーティに仲間が加わりました。

f:id:Subarukun:20220313190348p:plain

Nand to OR

ORの記号と真理値表は以下の通りです。

ORは2入力の和をとります。

f:id:Subarukun:20220313182841p:plain

2入力いずれも反転してNANDに入力する構成でORは実現できました。

トランジスタは12個使用されています。

f:id:Subarukun:20220313183604p:plain

ORがパーティに加わりました。

Symbolの出力部分がもう少し尖がった方が見栄えが良いですが、本質的ではないのでこれで良しとします。

f:id:Subarukun:20220313185411p:plain

Nand to XOR

最後はXORを構築します。

f:id:Subarukun:20220313190800p:plain

これまでに比べると複雑ですが、NOT, NAND, ORを駆使して実現できました。

トランジスタは24個使用されています。

f:id:Subarukun:20220313191723p:plain

最後の論理ゲートXORが加わりました。

f:id:Subarukun:20220402221627p:plain

まとめ

NANDからNOT, AND, OR, XORの各論理ゲートが構築できることが確認できました。

次回は1段階ボトムアップしてMux, DMuxをパーティ総力を挙げて構築します。

構築した回路はGithubのcircuitsリポジトリに順次アップしています。