演算回路
1ビット変数A,Bの演算をする場合、
A | B | 演算結果 |
---|---|---|
0 | 0 | 0 or 1 |
0 | 1 | 0 or 1 |
1 | 0 | 0 or 1 |
1 | 1 | 0 or 1 |
の4通りの入力に対してそれぞれ2通りずつの結果があるので2^4 = 16通りのパターンが存在する。
なのでこの演算回路は
- A, Bが1ビットずつ
- 16通りのいずれの演算をするかを指示するための4ビット
の入力があって
- 演算結果の1ビット
が出力だから下の図みたいになる。
んで、この回路をどうやって作るかというと
- 演算は16種類 => デコーダの出力は 0000 から 1111までの4ビット正数
- (A,B)=(0,0), (0,1), (1,0), (1,1)の各場合の演算結果が上の正数の1〜4ビット目にそれぞれ対応
- つまりこの回路はデコーダの出力のうちの1ビットを選択する"ただのマルチプレクサ"
ということになるので、つまり実行したい演算の結果表をデコーダが生成するようにすれば回路がものすごく単純になるわけ。上手くできてるなぁ。
結果表が0000〜1111になるような演算は順番に以下のようになる。(ABは A and B, A+Bは A or B, ~Aは not A, AxBは A xor Bのつもり)
0, (~A)(~B), (~A)B, ~A, A(~B), ~B, AxB, ~A+~B, AB, (~A)xB, B, ~A+B, A, A+~B, A+B, 1