The Elements of Computing Systems に沿って基本の論理ゲートを実装している。
8月に取り組むテキストを紹介する - ユユユユユ (https://jnsato.hateblo.jp/entry/2020/08/02/230000)
NOT, AND, OR, XOR のような耳慣れた論理に加えて、** Multiplexor と Demultiplexor **という耳慣れない回路が、基本の論理ゲートとして扱われていた。そもそも論理ゲートというものを、「2つの入力を1つの出力に合成するもの」のように捉えていた僕にとっては、複数の入出力を持ちうるこれらのゲートは異色の存在に思われた。ノートの書写しにはなるが、TILとして書いておきたい。
multiplexor
マルチプレクサは、3つの1ビットの入力を受け取り、1つの1ビットの出力を与える。入力のうち1つはセレクタと呼ばれ、このセレクタがフラグとして立っているかどうかで、残りの2つの入力のうちどちらが出力されるかが決定される。
真理表を書くと次のようになる。
input1 | input2 | selector | output |
---|---|---|---|
0 | 0 | 0 | 0 (=input1) |
0 | 1 | 0 | 0 (=input1) |
1 | 0 | 0 | 1 (=input1) |
1 | 1 | 0 | 1 (=input1) |
0 | 0 | 1 | 0 (=input2) |
0 | 1 | 1 | 1 (=input2) |
1 | 0 | 1 | 0 (=input2) |
1 | 1 | 1 | 1 (=input2) |
高級言語であれば、IFを使って条件分岐するような処理になる。
bool input1, input2, selector;
// 入力処理
if (selector)
printf("%d", input2);
else
printf("%d", input1);
論理ゲートで実装する上では、こうなる。
demultiplexor
デマルチプレクサは、2つの1ビットの入力を受け取り、2ビットの出力を行う。今度も2つの入力のうち一方がセレクタであり、セレクタの値によって、出力ビットのどちらに入力ビットを出力するかが決定される。
真理表は次の通り。
input | selector | output |
---|---|---|
0 | 0 | 00 |
0 | 1 | 00 |
1 | 0 | 10 |
1 | 1 | 01 |
高級言語であれば、さながらこうなるだろう。
bool input, selector;
// 入力処理
if (selector)
printf("0%d", input);
else
printf("%d0", input);
実装はこうなる。