論理ゲートとは? AND・OR・NOTで計算できるしくみ
論理ゲートは、0か1の入力を受け取り、決まった規則で0か1を出す小さな回路です。「両方1なら1」のAND、「どちらか1なら1」のOR、「反対にする」のNOTなどがあります。どれもトランジスタを数個から十数個つないで作ります。ゲートを組み合わせると、足し算も、CPUの複雑な計算もできます。
この記事でわかること
- 論理ゲートが何をする回路か、6種類のゲート(NOT・AND・OR・NAND・NOR・XOR)の規則
- スイッチの直列・並列とANDとORの関係
- トランジスタ4個でNANDゲートができるしくみ
- NANDだけでどんな回路も作れる理由と、ゲートの遅れがクロックの速さを決めるわけ
前提知識: 「トランジスタは電気で切り替えるスイッチ」「コンピュータは電圧の高い・低いを1と0に見立てる」の2つを知っていると読みやすくなります。
身近なところでは
電子レンジは、ドアが閉まっていて、しかもスタートボタンが押されたときだけ温めはじめます。車は、どれか1つでもドアが開いていれば、警告のランプをつけます。階段の照明は、上と下のどちらのスイッチでも、つけたり消したりできます。
この3つは、どれも「いくつかの条件から、するかしないかを決める」決まりです。1つ目は「両方そろったら」、2つ目は「どれか1つでも」、3つ目は「2つのスイッチの向きが同じか、違うか」です。このような決まりを、0と1で計算する小さな回路が論理ゲートです。
実際の電子レンジや車には、こうした判断をマイコン(小さなコンピュータのチップ)にさせているものも多くあります。そのマイコンの中も、論理ゲートの集まりです。
論理ゲートは「0と1の決まりを守る回路」
コンピュータの回路では、電圧が高い状態を1、低い状態を0とします。論理ゲートは、入り口(入力)で0か1を受け取り、出口(出力)から0か1を出します。入力の数は、1つのものも2つ以上のものもあります。どの入力でどの出力を出すかは、ゲートの種類ごとに決まっていて、変わりません。
ゲートの決まりは、表で書くとはっきりします。入力のすべての組み合わせと、そのときの出力を並べた表を真理値表と呼びます。入力が2つなら、組み合わせは00・01・10・11の4通りなので、表は4行で足ります。
なお、ここでの「ゲート」は、0と1を処理する回路の1単位のことです。トランジスタの電極(電気の出入り口)の1つも「ゲート」と呼びますが、別の意味です。
基本の3つ: NOT・AND・OR
NOT: 反対にする
NOTゲートは入力が1つだけで、0なら1を、1なら0を出します。入力をひっくり返すので、インバータ(反転するもの)とも呼ばれます。
| 入力A | NOTの出力 |
|---|---|
| 0 | 1 |
| 1 | 0 |
AND: 両方1のときだけ1
ANDゲートは、入力が両方とも1のときだけ1を出します。1つでも0があれば0です。電子レンジの「ドアが閉まっている」かつ「ボタンが押された」の判断にあたります。
OR: どちらか1つでも1なら1
ORゲートは、入力のどちらか1つでも1なら1を出します。両方とも0のときだけ0です。車の「どれか1つでもドアが開いていたら警告」にあたります。
| A | B | AND | OR |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 |
ANDやORの入力は、2つとは限りません。3入力のANDなら、3つとも1のときだけ1を出します。
反転つきの仲間と、XOR
ANDの出力をNOTでひっくり返したものをNAND(ナンド)と呼びます。Not ANDを縮めた名前です。同じように、ORを反転したものがNOR(ノア)です。NANDは「両方1のときだけ0」、NORは「両方0のときだけ1」になります。
もう1つよく使うのがXOR(エックスオア)です。2つの入力が違うとき、つまり片方だけが1のときに1を出します。階段の照明は、このXORと同じ性質を使っています。どちらかのスイッチを切り替えると、2つの向きが「同じ」と「違う」の間で入れ替わり、明かりがついたり消えたりするからです。
| A | B | NAND | NOR | XOR |
|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 0 |
NANDの列は、さきほどのANDの列の0と1をすべて入れ替えたものです。NORの列も、ORの列を入れ替えたものになっています。
スイッチの直列と並列で考える
ANDとORは、電池と電球とスイッチの回路で考えるとイメージしやすくなります。スイッチを2つ一列につなぐ形を直列、2つの道に分けて並べる形を並列と呼びます。下の図で、スイッチを入れた状態を1、電球がつくことを1と読みかえてみてください。
直列では、電気はAとBの両方を通らないと電球まで届きません。そのため、両方を入れたときだけ電球がつきます。これはANDの真理値表と同じです。並列では、電気はどちらの道を通ってもよいので、どちらか一方を入れればつきます。これはORと同じです。
スイッチの回路と、0と1の論理の計算は対応しています。これを1930年代に論文にまとめたのが、のちに情報理論を作ったクロード・シャノンです。電話の交換機に使われていたリレー(電磁石で動くスイッチ)の回路を、式で整理して設計できることを示したのです。
トランジスタでゲートを作る
チップの中のゲートは、MOSFETというトランジスタで作ります。MOSFETは、ゲートの電極にかける電圧で、電流の通り道をつないだり切ったりするスイッチです。このしくみは「トランジスタとは?」で説明しています。
MOSFETには、正反対に動く2種類があります。nMOSは入力が1のときにつながり、pMOSは入力が0のときにつながります。この2種類を組み合わせてゲートを作る方式をCMOSと呼び、今のチップのほとんどがこの方式です。いちばん簡単なNOTゲートは、pMOSとnMOSを1つずつ、合わせて2個で作れます。
NANDゲートはトランジスタ4個
2入力のNANDゲートは、pMOS2個とnMOS2個、合わせて4個のトランジスタでできています。出力を1にする電源の+側には、pMOSを2つ並列につなぎます。出力を0にする0 Vの側には、nMOSを2つ直列につなぎます。
AとBが両方とも1のときは、直列の2つのnMOSがどちらもつながります。出力は0 Vの側とつながって0になります。このとき2つのpMOSはどちらも切れています。
AかBのどちらかが0のときは、直列のnMOSのうち1つが切れるので、0 Vの側への道はなくなります。かわりに、0が入ったほうのpMOSがつながり、出力は電源の+側とつながって1になります。こうして「両方1のときだけ0」というNANDの決まりができあがります。
どの入力のときも、上と下のどちらか一方の道が必ず切れています。電源から0 Vの側へ電流が流れ続けないので、出力を保っている間はほとんど電力を使いません。これがCMOSのよいところです。
ANDはNANDより手間がかかる
CMOSでは、入力が1になるとnMOSがつながり、出力を0 Vの側へ引き下げます。そのため、pMOSとnMOSを上下に1組並べただけで作れるのは、入力が1になると出力が0に向かうゲートだけです。NOT・NAND・NORがこの形です。ANDはNANDの後ろにNOTをつけて、4個+2個の6個で作るのがふつうです。ORも同じで、NORにNOTをつけて作ります。
NANDだけで、どんな回路も作れる
NANDゲートには、おもしろい性質があります。NANDだけをたくさん組み合わせれば、NOT・AND・ORをはじめ、どんな決まりの回路でも作れるのです。このような性質を持つゲートを、万能なゲートと呼びます。
まず、NOTの作り方です。NANDの2つの入力に同じ信号Aを入れます。真理値表の「0と0」の行では出力が1、「1と1」の行では出力が0です。つまり、Aの反対が出てくるので、NOTとして働きます。
次に、ANDです。NANDは「ANDを反転したもの」なので、その出力をもう一度反転すれば、ANDに戻ります。反転には、今作ったNANDのNOTを使います。NANDを2個使えば、ANDができるわけです。
ORは、AとBをそれぞれNOTで反転してから、NANDに入れると作れます。AもBも0なら、反転して両方1になるので、NANDの出力は0です。それ以外のときは、反転した入力のどれかが0になり、出力は1です。これは「両方0のときだけ0」というORの決まりそのものです。このように「反転を組み合わせると、ANDとORを入れかえられる」という規則を、ド・モルガンの定理と呼びます。NOT・AND・ORが作れれば、どんな真理値表の回路も組み立てられます。
同じことは、NORゲートでも成り立ちます。1969年に月に着陸したアポロ宇宙船の誘導コンピュータは、この性質を利用しました。使ったIC(集積回路)は約2,800個で、そのほとんどが「3入力のNORゲートを2つ入れたIC」という1種類です。当時のICは新しく、使った実績がまだ少ない部品でした。高い信頼性が必要だったため、単純な1種類にそろえて、信頼性を確かめやすくしたのです。
ただし、今のチップをNANDだけで作るわけではありません。NANDだけでは、同じ働きの回路でも部品が増え、遅くもなりやすいからです。実際の設計では、NAND・NOR・NOTのほか、よく使う組み合わせを1つにまとめた部品を、目的に合わせて使い分けます。
ゲートを組み合わせて計算する
ゲートの出力を、次のゲートの入力につないでいくと、もっと複雑な決まりを作れます。たとえば、2進数の1桁どうしの足し算は、XORとANDを1つずつ並べるだけでできます。XORが「その桁の答え」を、ANDが「上の桁への繰り上がり」を出すのです。この回路を半加算器と呼びます。
半加算器を広げて何桁でも足せるようにする方法は、「コンピュータは0と1でどう計算するの?」で詳しく説明しています。また、論理回路シミュレーターでは、ゲートを並べてスイッチを切り替え、真理値表を作って確かめられます。「NANDだけでつくるXOR」の例も読み込めます。
足し算の回路のように、出力がそのときの入力だけで決まる回路を、組み合わせ回路と呼びます。一方、ゲートの出力を自分の入力に戻すようにつなぐと、前の状態を覚えておく回路も作れます。こちらは順序回路と呼ばれ、CPUの中で計算の途中の数を覚えておくのに使われます。2つの違いは「組み合わせ回路と順序回路の違い」の表で比べられます。
ゲートには「遅れ」がある
ゲートの入力を切り替えても、出力はその瞬間には変わりません。トランジスタが切り替わり、次のゲートの入力に電気をためるまで、少し時間がかかるからです。入力が変わってから出力が変わるまでの時間を、伝搬遅延と呼びます。
たとえば、部品として売られているNANDゲートのIC「74HC00」の説明書(データシート)を見てみます。電源4.5 Vで使い、決められた試験の条件で測った遅れは、標準で9ナノ秒(ナノは10億分の1)です。チップの中のゲートはずっと小さく、つなぐ先も近いので、遅れはピコ秒(1兆分の1秒)の単位になります。
CPUは、クロックという一定の間隔の合図に合わせて、計算を一歩ずつ進めます。1回の合図の間に、信号は何段ものゲートを順に通り、次の合図までに答えが落ち着いていなければなりません。そのため、通るゲートの数がいちばん多く、遅れがいちばん大きい道筋が、クロックをどこまで速くできるかを決めます。この道筋をクリティカルパスと呼びます。
数字で考えてみます。3 GHzのクロックなら、合図の間隔は約333ピコ秒です。説明のために1段の遅れを10ピコ秒とすると、つなげられるのは多くても約33段です。実際には、配線の遅れや、答えを覚える回路の時間も差し引く必要があります。配線の遅れのしくみは「時定数RCとは?」で説明しています。
よくある誤解
誤解: 論理ゲートは、手で切り替えるような小さなスイッチが中で動いている
実際は、動く部品はまったくありません。ゲートの中のトランジスタは、前のゲートが出した電圧によって、電気的につながったり切れたりします。人が切り替えるのは、キーボードのような入り口の部分だけです。チップの中では、ゲートの出力が次のゲートを切り替える連鎖が、1秒に何十億回もの速さで起きています。スイッチのたとえや、昔のリレー(電磁石で金属の接点を動かすスイッチ)の計算機のイメージから生まれやすい誤解です。
誤解: 0はちょうど0 V、1はちょうど1 V(または電源と同じ電圧)
実際は、0と1はそれぞれ電圧の「範囲」で決まっています。74HC00を電源4.5 Vで使う場合、入力は1.35 V以下なら0、3.15 V以上なら1と読まれます。その間の電圧は、どちらに読まれるか決まっていません。一方、出力は0なら0.1 V以下、1なら4.4 V以上を出すと保証されています(出力の電流が小さいとき)。たとえば1の出力は4.4 V以上なので、雑音で1.25 V下がっても、まだ1と読まれる3.15 Vに収まります。0の側も同じく1.25 Vの余裕があります。この余裕をノイズマージンと呼び、配線に雑音が少し乗っても0と1を読み違えないのはこのおかげです。チップの内部ではもっと低い電圧で動きますが、範囲で読むという考え方は同じです。
誤解: ANDやORが基本の部品で、NANDやNORはそれに部品を足した複雑なもの
実際は、CMOSのチップでは逆です。2入力のNANDとNORはトランジスタ4個で作れますが、ANDとORは反転のための2個を足して6個かかります。真理値表で習う順番(ANDが先、NANDが後)と、回路で作りやすい順番は同じではありません。
数字で見る
| もの | 数 |
|---|---|
| CMOSのNOTゲート | トランジスタ2個 |
| CMOSの2入力NAND・NOR | トランジスタ4個 |
| CMOSの2入力AND・OR | トランジスタ6個 |
| IC「74HC00」1個 | 2入力NANDゲート4個 |
| アポロ誘導コンピュータ(1960年代) | IC約2,800個(ほとんどがNORゲート2個入り) |
| インテル4004(1971年) | トランジスタ約2,300個 |
| Apple A17 Pro(2023年) | トランジスタ約190億個 |
チップの設計では、回路の大きさを「2入力NANDゲート何個分」で表すことがあります。A17 Proの約190億個をNANDの4個で単純に割ると、約48億個分になります(当サイトのおおまかな計算)。ただし、実際のチップには、記憶のための回路など、ゲートとは形の違う部分もたくさんあります。この数は大きさの見当をつけるための目安です。
もっと詳しく学ぶ
- 試してみる: 論理回路シミュレーター(ゲートをつないで動かす)、カルノー図・論理式の簡単化ツール(同じ働きを、より少ないゲートで作る)
- 違いを表で見る: CMOSとTTLの違い(ゲートを作る2つの方式)、nMOSとpMOSの違い
- 次の一歩の用語: マルチプレクサ(入力を選んで通す回路)、フリップフロップ(1ビットを覚える回路)、グリッチ(遅れの差で一瞬出るまちがった出力)
- 図で見る: NOTゲートのトランジスタの並びは、図解「CMOSインバータ」で見られます
- 続けて読む: ゲートの集まりが命令を実行するしくみは「CPUとは?」で説明しています