これまでにも扱ったことのある論理回路について。もう少し勉強してみたいところもあるので、ロジック IC などと戯れてみようかと思います。
まずは、おさらいから。
基本的な論理回路
論理回路の基本というと、AND、OR、NOT です。が、TTL とか DTL とかに遡っていくと、もっとも単純な論理回路は NAND なんだそうな。たしかに俺の頭の中でも、いつも NAND が基本にあったりするし、品番も 00 番だったりするし。
実験用の回路
わかってることでも、もう一度実際に確認してみよう。ってんで作った実験用の回路 (図 1)。
押しボタンを押すと、ゲートに HIGH が入力されると同時に、入力側の LED が点灯します。出力が HIGH のとき、出力側の LED が点灯します。
図 1 は NAND ゲートが入っていますが、AND や OR を入れれば、それぞれの動きが確認できます。
ちなみに、回路図の右側はロジック IC の電源と未使用ゲートの処理について書いてます。もちろん状況によって変化しますが、電源 Vcc と GND 間にコンデンサ 0.1μF を入れるとか、未使用ゲートは入力を Vcc または GND につないでおくこと、出力はオープンにしておくこと、これらは基本です。
回路図に書いてなくても、やるんですよ。
NAND ゲート
NAND ゲート、 74HC シリーズでは 74HC00 などです。
By Inductiveload – Own work, Public Domain, Link
Input A | Input B | Output Q |
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
真理値表のように、2つの入力A、Bがともに “1” のときだけ、出力 Q が “0” になります。それ以外はすべて “1” です。
“1” とは HIGH レベル、”0″ は LOW レベルと考えて下さい。実験回路では、押しボタンを 2 つとも押したときだけ、出力 LED が消灯 (LOW)。その他の状態では点灯 (HIGH) したままです。
出力がいきなり負理論になっちゃうのでややこしいですが、AND の出力を NOT で反転したもの、と考えるとわかりいいかも、です。
論理式は、
Q = A・B
解説によっては、こんな式もでてきます。
Q = A・B = A + B
これは何だ?って話。
ひとつには、A を NOT した A と、B を NOT した B を、OR ゲートに入れると、NAND と同じ結果が得られるよ、ということ。
もうひとつは、この論理式は真理値表から導き出されている、ってこと。真理値表で Q = 0 になるのは、A、B がともに 1 のときだけ。したがって、論理式は、
Q = A + B
となる。これ、「主乗法標準形」っていいます。こいつを、ド・モルガンの法則にあてはめると、
Q = A + B = A・B
になり、どっちも同じ結果になる、ってことがわかります。
NOT ゲート
NOT ゲート、74HC シリーズでは 74HC04 など。「インバータ」ともいいます。
By Inductiveload – Own work, Public Domain, Link
Input A | Output Q |
0 | 1 |
1 | 0 |
NOT ゲートは、1 つの入力と 1 つの出力だけ。入力は反転して出力されます。
論理式は、
Q = A
簡単ですね。
NAND の出力の ○ は、負理論の意味もあるけど、NOT を表しているんだとか。
論理式を少し変換してみます。
Q = A = A + A = A・A
ってことで、
fNOT(A) = fNAND(A,A)
つまり、NAND ゲートの 2 つの入力をショートして、同じ信号を入れると、NOT ゲートになる、ってことです (図 4)。
AND ゲート
AND ゲート、74HC シリーズでは 74HC08 など。
By Inductiveload – Own work, Public Domain, Link
Input A | Input B | Output Q |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
入力 A、B がともに 1 のときだけ、出力 Q が 1 になります。
論理式は、
Q = A・B
真理値表から導き出すには「主加法標準形」を使います。出力 Q が 1 になるのは、A、B がともに 1 のときだけです。したがって、
Q = A・B
うーん、そのまんまだ。
NAND は、AND の出力を NOT したものだと、上で書きました。逆に言うと、NAND の出力を NOT すると、AND になる。
fNOT(X) = fNAND(X,X) なので、
fAND(A,B) = fNOT(fNAND(A,B)) = fNAND(fNAND(A,B),fNAND(A,B))
これを論理回路にすると、図 6 のようになります。
OR ゲート
OR ゲート、74HC シリーズでは 74HC32 などです。
By Inductiveload – Own work, Public Domain, Link
Input A | Input B | Output Q |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
入力 A、B のどちらか一方でも 1 ならば、1 が出力されます。
論理式は、
Q = A + B
主乗法標準形でも、Q = 0 のとき f(0,0) なので、
Q = A + B
ですね。
ちなみに、
から、
fOR(A,B) = fNAND(A,B) = fNAND(fNOT(A),fNOT(B))
となります。
さらに変換して、NAND で構成してみましょう。
fOR(A,B) = fNAND(fNOT(A),fNOT(B)) = fNAND(fNAND(A,A),fNAND(B,B))
図 8 のようになりました。
この論理回路を組んで、入力の 1 つ以上の押しボタンを押すと、出力の LED が点灯します。どちらの押しボタンも押していないときだけ、消灯します。OR 回路になっていますね。
XOR ゲート
基本論理回路に入るのか、入らないのか、排他的論理和。74HC86 です。
By Inductiveload – Own work, Public Domain, Link
Input A | Input B | Output Q |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
2つの入力が異なる値のときに、出力が 1 になる論理回路です。
論理式は、主加法標準形により、
Q = A・B + A・B
となります。
XOR を他の論理ゲートを利用して作る方法が、ググるといろいろと紹介されています。俺がもっとも好きなのは、NAND ゲート 4 個を使って作るもの。これなら、74HC00 が 1 個あれば作れちゃいますからね。
論理式を変換してみましょう。まず、
A・B = A・B + B・B = B ( A + B ) = B・A・B
と変形できますので、
これは、
fXOR(A,B) = fNAND(fNAND(fNAND(A,B),B),fNAND(A,fNAND(A,B)))
と表せられますので、論理回路は図 10 のようになりました。
後記
ああ、もう、小難しい論理演算はおしまいです。疲れました (;´Д`)