学ぶ › トピック 1
論理ゲート:NOT、AND、OR、NAND、NOR、XOR、XNOR
読了時間:約 7 分 · bitGateLab チーム
信号機からプロセッサまで、デジタル回路はどれも、0 と 1 で判断を行う数種類の部品を組み合わせて作られています。それが論理ゲートです。この記事では、基本となる七つのゲートについて、記号の描き方、ブール代数での書き方、そして真理値表を学びます。最後に、NAND か NOR のどちらか一種類のゲートだけで、ほかのすべてのゲートを作れる理由も見ていきます。
論理レベル:0 と 1 の意味
デジタル回路では、どの信号も二つの状態のどちらかしか取りません。低い電圧(0 V 付近)を論理 0または偽、高い電圧(電源電圧付近、たとえば 5 V や 3.3 V)を論理 1または真と呼びます。ゲートは一つまたは複数の入力を受け取り、出力を一つ返します。その出力は、そのときの入力の値だけで決まります。過去のことは何も覚えていません。そのため、ゲートで作る回路は組み合わせ回路と呼ばれます。
ゲートを最も完全に記述する方法が真理値表です。入力のあらゆる組み合わせと、それぞれに対応する出力を並べた表です。入力が n 本あれば組み合わせは 2n 通りあるので、2 入力ゲートの表は 4 行、3 入力ゲートの表は 8 行になります。
三つの基本ゲート
NOT(インバータ)
入力は一つだけで、その反対の値を出力します。0 が入れば 1 が出て、1 が入れば 0 が出ます。式では Y = A と書きます(A' や ¬A という書き方もあります)。記号は、先端に小さな丸印(バブル)の付いた三角形です。この丸印は「ここで反転する」ことを表す共通の目印です。
| A | Y = A |
|---|---|
| 0 | 1 |
| 1 | 0 |
AND(論理積)
出力が 1 になるのは、すべての入力が 1 のときだけです。積の形で Y = A·B、または単に Y = AB と書きます。直列につないだ二つのスイッチを思い浮かべてください。両方とも閉じているときだけランプが点灯します。
OR(論理和)
出力が 1 になるのは、少なくとも一つの入力が 1 のときです。和の形で Y = A + B と書きます。並列につないだ二つのスイッチに相当します。注意してください。ブール代数では 1 + 1 = 1 であり、2 にはなりません。
派生ゲート:NAND、NOR、XOR、XNOR
NAND は AND の後ろにインバータを付けたもので、Y = AB です。すべての入力が 1 のときだけ出力が 0 になります。NOR は OR を反転したもので、Y = A + B となり、すべての入力が 0 のときだけ 1 になります。記号では、どちらも出力に丸印が付きます。
XOR(排他的論理和)は、入力が異なるときに 1 になります。Y = A ⊕ B = AB + AB です。入力が三つ以上ある場合、XOR は 1 の個数が奇数のときに 1 になるので、パリティビットの計算に使われます。XNOR はその否定で、Y = A ⊕ B = AB + A B となり、入力が等しいときに 1 になります。つまり 1 ビットの一致比較器です。
2 入力の六つのゲートをまとめた真理値表は次のとおりです。
| A | B | AND | OR | NAND | NOR | XOR | XNOR |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
| 0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
例:小さな回路の出力を求める。 A = 0、B = 1、C = 1 のとき、Y = (A + B) · C を計算します。
- OR:A + B = 0 + 1 = 1。
- 反転:1 = 0。
- C との AND:0 · 1 = 0。
結果は Y = 0 です。A = 0、B = 0、C = 1 の場合は、OR の出力が 0、インバータの出力が 1、AND の出力が 1 となるので、Y = 1 です。
NAND と NOR:万能ゲート
あるゲートだけを何個か使って NOT、AND、OR を作ることができ、したがってどんな論理関数でも実現できるとき、そのゲートは万能であるといいます。NAND と NOR はこの性質を持っています。これには実用上の意味があります。メーカーは一種類のセルだけを製造して設計全体を組み上げることができますし、皆さんも 74HC ファミリの IC 一種類だけで回路を丸ごと作ることができます(たとえば 74HC00 には 2 入力 NAND が四つ入っています)。
NAND だけで作る
- NOT:NAND の二つの入力を一つにつなぎます。両方に A を入れると、A·A = A になります。
- AND:NAND の後ろに、インバータとして使う NAND をつなぎます。AB = AB です。
- OR:各入力をそれぞれ NAND で反転し、三つ目の NAND でまとめます。A·B = A + B です(ド・モルガンの定理による)。
NOR だけで作る
- NOT:NOR の入力を一つにつなぎます。A + A = A です。
- OR:NOR の後ろに、インバータとして使う NOR をつなぎます。
- AND:各入力をそれぞれ NOR で反転し、もう一つの NOR でまとめます。A + B = AB です。
例:四つの NAND で作る XOR。 N1 = AB、N2 = A·N1、N3 = B·N1、Y = N2·N3 とします。四つの場合をすべて確認しましょう。
| A | B | N1 | N2 | N3 | Y |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 0 |
| 0 | 1 | 1 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 | 1 | 0 |
Y の列は XOR の列と一致します。ゲート四つが、IC 一つに収まります。
よくある間違い
- OR で 1 + 1 = 2 と考えてしまう。ブール代数の和は飽和するので、1 + 1 = 1 です。
- 式 AB(NAND、全体にかかる一本のバー)と A B(別々の二本のバー、NOR と等価)を混同する。バーの長さが変われば結果も変わります。
- 3 入力の XOR は「入力が一つだけ 1 のとき」に 1 になると思い込む。実際には 1 の個数が奇数のときに 1 になるので、1、1、1 の場合も含まれます。
- 実物の CMOS IC で入力を未接続のままにする。どこにもつながっていない入力(フローティング入力)は、0 と読まれるか 1 と読まれるかが定まりません。GND か電源に接続しましょう。
シミュレータで試してみよう
これらの表を覚えるいちばんの方法は、自分の手で作ってみることです。回路エディタでは、ゲートを置いて入力を切り替えると、出力がすぐに確認できます。そのあとで、ツールが計算する真理値表と見比べてください。
- 入力を二つ、NAND ゲートを一つ、出力を一つ配置して、配線します。
- 入力を四通りの組み合わせに切り替え、それぞれの出力を書き留めます。
- 回路の真理値表を生成し、この記事の表と比べます。
- 例で示した四つの NAND による XOR を組み、その真理値表が XOR 単体のものと一致することを確かめます。
- 仮想ブレッドボードで試したい場合は、74HC ファミリの NAND の IC を置いて電源をつなぎ、出力の LED を観察します。
練習問題
- Y = A + B の真理値表を書いてください。
解答
AB = 00、01、10、11 に対して、出力は 1、0、1、1 です。0 になるのは A = 0 かつ B = 1 のときだけです。
- 4 入力 AND の真理値表は何行ありますか。また、そのうち出力が 1 になるのは何行ですか。
解答
24 = 16 行です。出力が 1 になるのは、そのうち一行(1111)だけです。
- A = 1、B = 1、C = 1 のときの 3 入力 XOR の出力を求めてください。
解答
1 ⊕ 1 = 0、0 ⊕ 1 = 1 です。1 が三つ(奇数個)あるので、出力は 1 です。
- この方法で 2 入力 AND を作るには、NOR ゲートが最低いくつ必要ですか。
解答
三つです。二つの NOR をインバータとして使い(一つは A 用、もう一つは B 用)、三つ目の NOR に A と B を入れます。その出力は A + B = AB です。
これらのゲートを使った式の変形と簡単化については、ブール代数に進みましょう。