コンピュータシステムの理論と実装読書ログ

Nand2tetris読書ログ 2 〜 Multiplexor

1.5 1章演習の続き

前回の記事:Nand2tetris読書ログ 1

マルチプレクサ

入力:a, b, sel
出力:out

a b sel out
0 0 0 0
0 1 0 0
1 0 0 1
1 1 0 1
0 0 1 0
0 1 1 1
1 0 1 0
1 1 1 1

実装方法

入力が3つの値になりました。考え方も実装方法もたくさんありますが、私の思考ログを残しておきます。まず、outを作るために必要な2つの入力c1c2と論理ゲートを考えます。ここまでで作った論理ゲートは全て1入力1出力か、2入力1出力のゲートなので、必ず2つの入力を持つ論理ゲートを使って今回の目的の出力を得られるはずです。

SomeGate(a = c1, b = c2, out = out)

例えば以下のような例があります(他にも色々あります)。

Or(a = c1, b = c2, out = out)

c1 c2 out
0 0 0
0 0 0
1 0 1
1 0 1
0 0 0
0 1 1
0 0 0
0 1 1

これでoutが得られるので、あとはc1c2を作る方法を探せば良いことになります。

どちらも比較的簡単に作ることができます。

Not(in = sel, out = notsel)
And(a = a, b = notsel, out = c1)

a notsel c1
0 1 0
0 1 0
1 1 1
1 1 1
0 0 0
0 0 0
1 0 0
1 0 0

c2についても同じように、

And(a = b, b = sel, out = c2)

b sel c2
0 0 0
1 0 0
0 0 0
1 0 0
0 1 0
1 1 1
0 1 0
1 1 1

これでc1c2が得られたので、完成です。

Not(in = sel, out = notsel);
And(a = notsel, b = a, out = c1);
And(a = sel, b = b, out = c2);
Or(a = c1, b = c2, out = out); 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です