1.5 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つの入力c1
とc2
と論理ゲートを考えます。ここまでで作った論理ゲートは全て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
が得られるので、あとはc1
とc2
を作る方法を探せば良いことになります。
どちらも比較的簡単に作ることができます。
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 |
これでc1
とc2
が得られたので、完成です。
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);