演算回路

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