シリーズ「コンピュータの部品のしくみ」 第5回
回路が「1 種類で足りる」とは?
素直に作れるのは、NAND
このシリーズでは、机の上に部品を並べて、ゲートの中身を組み立てている。
第1回では、電池の+側につながった線を 1 の線、−側につながった線を 0 の線と呼んだ。 スイッチを一列に並べると「どちらも」(AND)、横に並べると「どちらか」(OR)になった。
第2回と第3回で、スイッチを電気で押せるようになった。
いまの主役は、動く部分のないスイッチ、トランジスタだ。
1 で押されるとつながる種類と、0 で押されるとつながる種類がある。
前回は、この 2 種類を、出口の上と下に組にして置いた。 上の組と下の組は、いつもちょうど反対のつなぎ方をしている。 だから出口は、必ずどちらか片方だけにつながる。
そうして素直に作れたのが、NAND(ナンド)だった。 トランジスタ 4 個でできる。
| A | B | NAND |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
A も B も 1 のときだけ 0。
それ以外は 1。
AND のちょうど反対だ。
AND のほうは、上下の組 1 段では作れなかった。 NAND の後ろに、もう 1 段、NOT をつなぐ遠回りが要った。
前回の終わりに、この組を「NAND」と書いた 1 つの箱として描く、と約束した。 今回の図に並ぶ箱には、どれも「NAND」としか書いていない。 けれど、箱の中には、いつでも前回のトランジスタ 4 個の組が入っている。
そこで、前回の終わりの問いだ。
NAND だけで、ほかのゲートも作れないか。
入口をつなぐと、NOT
まずは、いちばん簡単なゲート、NOT から。 入力を反対にして返すゲートだ。
NAND には入口が 2 つある。 NOT の入力は 1 つしかない。
そこで、入力 A の線を 2 つに分けて、NAND の 2 つの入口に、両方とも入れてみる。
すると、2 つの入口には、いつも同じ値が入る。 NAND の表のうち、使われるのは、A と B がそろっている行だけになる。
| A(2 つの入口とも) | NAND |
|---|---|
0(0 と 0) | 1 |
1(1 と 1) | 0 |
入力を反対にして返している。 NOT だ。 NAND 1 個で、できてしまった。
2 つで AND、3 つで OR
NOT ができれば、AND はすぐだ。
前回やったとおり、NAND の後ろに NOT をつなげばいい。 NAND の答えを、もう一度反対にするのだ。 その NOT も、いま NAND 1 個で作れた。
だから AND は、NAND 2 個。
次は OR だ。 ここで、前回の「ちょうど反対」の話を思い出してほしい。
NAND の出口が 1 になるのは、「A か B の、どちらかが 0 のとき」だった。
「どちらか」という言葉は、OR によく似ている。
ただ、1 ではなく 0 を見ている。
それなら、入口に入れる前に、A と B をそれぞれ反対にしておけばいい。
A が 1 なら、NAND の入口には 0 が入る。
すると「どちらかが 0 なら 1」は、もとの A と B でいえば「どちらかが 1 なら 1」になる。
OR だ。
A を反対にする NAND が 1 個。 B を反対にする NAND が 1 個。 最後の NAND が 1 個。 OR は、NAND 3 個。
押して、確かめる
上のつまみで、NOT・AND・OR を切り替えられる。 図に並んでいる箱が、どれも NAND だけであることを確かめてから、A・B を押して、表のとおりになるかを見てほしい。
NAND だけの回路 シミュレータ
A のスイッチをクリックして、表のとおりになるかを見てください
使っている箱:NAND が 1 個だけ
| A | 出口 |
|---|---|
| 0 | 1 |
| 1 | 0 |
NOT の表と同じになっているか
NOT では、A の線が 2 つに分かれて、1 個の NAND の 2 つの入口に入っている。
NOT のときは、図の下の「NAND を開く」を押すと、箱が開いて、前回の上下の組の図に切り替わる。 開いたまま、入力スイッチを倒してみてほしい。 左のスイッチも、右のスイッチも、一緒に倒れる。 どちらも同じ A につながっているからだ。
2 つとも 1 なら、下の組の一列がつながって、出口は 0。
2 つとも 0 なら、上の組がつながって、出口は 1。
箱の外から見れば NOT、中を見れば、前回の NAND そのままだ。
AND と OR に切り替えても、使っている箱は NAND だけ。 数は 2 個と 3 個。 つなぎ方を変えただけで、別のゲートになっている。
4 つで、食い違い
もう少し、手ごわいゲートを作ってみよう。
XOR(エックスオア)は、A と B が食い違っているときだけ 1 を出すゲートだ。
第1回の、階段の照明の話で出てきた。
| A | B | XOR |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
これを、NAND 4 個で作る。
1 個目の NAND には、A と B を入れる。
この答えを t と呼ぼう。
t は、A も B も 1 のときだけ 0 だ。
2 個目の NAND には、A と t を入れる。
この NAND が 0 を出すのは、A が 1 で、t も 1 のときだけ。
t が 1 ということは、「A も B も 1」ではない。
A が 1 なのだから、B は 0。
つまり 2 個目は、「A だけが 1」のときにだけ 0 を出す、見張り番になっている。
3 個目の NAND には、t と B を入れる。
同じように考えると、こちらは「B だけが 1」のときにだけ 0 を出す見張り番だ。
4 個目の NAND には、2 つの見張り番の答えを入れる。
NAND は、どちらかが 0 なら 1 を出す。
だから、「A だけが 1」か「B だけが 1」のとき、出口は 1 になる。
食い違っているときだけ 1。
XOR だ。
NAND だけの回路 シミュレータ
A・B のスイッチをクリックして、表のとおりになるかを見てください
使っている箱:NAND が 4 個だけ
| A | B | 出口 |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
XOR の表と同じになっているか
真ん中の上の NAND が、A だけの見張り番。
真ん中の下の NAND が、B だけの見張り番。
A と B を食い違わせると、どちらかの見張り番の線が灰色(0)に変わり、出口が点く。
前回、店で売っている NAND の IC(たとえば 74HC00)には、2 入力の NAND が 4 つ入っている、と書いた。 ちょうど 4 つだ。 この IC 1 個で、XOR が組める。
足し算まで
ここまで来れば、足し算もできる。
1 桁の 2 進数 A と B を足してみよう。 答えは、その桁に残る和と、上の桁へ送る繰り上がりの 2 つになる。
| A | B | 繰り上がり | 和 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
和の列は、XOR の表とまったく同じだ。 繰り上がりの列は、AND の表とまったく同じだ。
XOR は、さっきの NAND 4 個。 AND は、NAND の後ろに NOT。 ただ、ここで 1 つ得をする。 XOR の 1 個目の NAND の答え t が、もう NAND(A, B) になっている。 だから、t を NOT にする NAND を 1 個足すだけで、繰り上がりになる。
1 桁の足し算をする回路、半加算器は、NAND 5 個。
NAND だけの回路 シミュレータ
A・B のスイッチをクリックして、表のとおりになるかを見てください
使っている箱:NAND が 5 個だけ
| A | B | 和 | 繰り上がり |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
A + B を、和と繰り上がりの 2 桁で
A と B を両方 1 にすると、和は 0、繰り上がりが 1。
1 + 1 = 10。
2 進数の足し算になっている。
ここにある箱は、どれも NAND だ。
どの NAND も、「両方 1 なら 0、それ以外は 1」を返しているだけで、足し算のことは何も知らない。
『計算のしくみ』を読んだ人は、第1回の「回路は足し算を理解していない。理解していないのに、答えは合っている。」を思い出してほしい。中身を NAND だけに替えても、それは変わらない。
下の桁からの繰り上がりも一緒に足す全加算器も、NAND だけで作れる。 XOR の 4 個を 2 段つなぎ、繰り上がり用に 1 個足して、NAND 9 個だ。
表が書ければ
NOT・AND・OR・XOR、それに足し算。 ここまで、1 つずつ工夫して組み立ててきた。
では、もっと別の表が出てきたら、そのたびに工夫しなければいけないのだろうか。
そんなことはない。 表さえ書ければ、決まった手順で、必ず回路にできる。
XOR の表で、やってみよう。
出口が 1 になる行は、2 つある。
- A が
0で、B が1の行 - A が
1で、B が0の行
1 つ目の行を拾うには、「NOT A」と「B」の AND を取ればいい。
この AND は、ちょうどこの行のときだけ 1 になる。
2 つ目の行は、「A」と「NOT B」の AND で拾える。
あとは、拾った行を OR で集める。
どちらかの行に当てはまれば、出口は 1。
XOR =(NOT A AND B)OR(A AND NOT B)
どんな表でも、同じことができる。
入力が 3 つでも 4 つでも、1 になる行ごとに AND で拾い、OR で集めればいい。
入口が 2 つのゲートしかなくても、AND や OR を 2 つずつつないでいけば、いくつでもまとめられる。
『記憶のしくみ』を読んだ人は、第9回の「表が書けたら、もう回路になっている」を思い出してほしい。あのとき、表の行を AND で拾って OR で合流させた回路も、そっくり NAND だけで組み直せる。
そして、今回確かめたとおり、AND も、OR も、NOT も、NAND だけで作れる。
NAND が 1 種類あれば、どんなゲートでも作れる。 表が書ける回路なら、必ず NAND だけで組める。
さっきの XOR の見張り番を、もう一度見てほしい。
「A だけが 1」の行と、「B だけが 1」の行を、1 つずつ拾っていた。
そして最後の NAND が、それを集めていた。
決まった手順と、同じ形をしている。
(手順どおりに作ると、もう少し NAND の数が増える。t を見張り番どうしで分け合うのが、4 個で済ませる工夫だった。)
ちなみに、NOR でも、まったく同じことができる。 NOR の 2 つの入口に同じ線を入れれば NOT になり、そこから AND も OR も作れるからだ。 NOR も、1 種類で足りる。 『記憶のしくみ』を読んだ人は、第1回の、NOR 2 つで作った「覚える回路」を思い出してほしい。あれは NAND 2 つでも作れる(ただし、「つける」「消す」のスイッチは、ON ではなく OFF にしたときに働く、向きが反対の作りになる)。
1 種類で作る、うれしさ
1 種類で足りると、何がうれしいのだろう。
いちばん大きいのは、同じ部品を、たくさん作ればいいことだ。 NAND の作り方だけを磨けばいい。 並べ方さえ変えれば、どんな回路にもなる。
これを本当にやったコンピュータがある。
月へ行ったアポロ宇宙船の、誘導コンピュータだ。 設計した MIT のチームは、計算の回路を、入口が 3 つの NOR 1 種類だけで組んだ。 その数は、5000 個近く。
いろいろな種類の回路を使えば、部品の数は減らせた。 けれど、NOR だけにしたほうが、全体が簡単になり、壊れにくくなる、と考えたのだ。 のちの型では、1 つの IC に、この NOR が 2 つずつ入っていた。
IC は、まだ生まれて間もない部品だった。 1963 年の夏には、アメリカで作られた IC の 60% が、アポロの試作に使われていたという。
ただし、1 種類にこだわると、トランジスタの数は増えることがある。 前回のトランジスタの数の表を、伸ばしてみよう。 NAND 1 個は、トランジスタ 4 個だ。
| 作るもの | NAND の数 | トランジスタ | 前回の組なら |
|---|---|---|---|
| NOT | 1 個 | 4 | 2 |
| AND | 2 個 | 8 | 6 |
| OR | 3 個 | 12 | 6 |
| XOR | 4 個 | 16 | — |
| 半加算器 | 5 個 | 20 | — |
| 全加算器 | 9 個 | 36 | — |
NAND で作った NOT は、トランジスタ 4 個。 前回の上下の組の NOT なら、2 個で済む。 1 種類にこだわらなければ、もっと少なくできるわけだ。
それでも、NAND だけで何でも作れる、ということには意味がある。 どんな回路でも、少なくとも 1 つは作り方がある、と言い切れるからだ。
何段も、重ねる
半加算器の図を、もう一度見てほしい。
A が変わると、まず左の NAND が切り替わる。 その答えを受けて、真ん中の NAND が切り替わる。 さらにその答えを受けて、右の NAND が切り替わり、和のランプが変わる。
和が出るまでに、NAND が 3 段重なっている。
シミュレータでは、スイッチを押したとたんに、和のランプが変わる。 ここまで、スイッチは押した瞬間に切り替わると思ってきた。 1 段目が切り替われば、2 段目も、3 段目も、すぐに切り替わるはずだ、と。
けれど、第2回のリレーは、カチッと鳴るまでに、少し時間がかかった。 動く部分のないトランジスタは、どうなのだろう。
本当に、一瞬なのだろうか。
次回は、NAND が切り替わるまでの、ほんの短い時間をのぞいてみる。
参考文献
- 松下俊介 著. 基礎からわかる論理回路. 第2版, 森北出版, 2021.7. 978-4-627-82842-1. https://ndlsearch.ndl.go.jp/books/R100000002-I031573740
- チャールズ・ペゾルド 著 ; 酒匂寛 訳. CODE : コードから見たコンピュータのからくり. 第2版, 日経BP, 2024.2. 978-4-296-08024-3. https://ndlsearch.ndl.go.jp/books/R100000002-I033318457
- James E. Tomayko. "Computers On Board The Apollo Spacecraft". Computers in Spaceflight: The NASA Experience. NASA, 1988. https://www.nasa.gov/wp-content/uploads/static/history/computers/Ch2-4.html, (参照 2026-10-8).
- Raytheon Company. "Apollo Guidance Computer". https://www.ibiblio.org/apollo/Documents/agc_brochure.pdf, (参照 2026-10-8).
- Texas Instruments. "SNx4HC00 Quadruple 2-Input NAND Gates" (SCLS181H). 2021. https://www.ti.com/lit/ds/symlink/sn74hc00.pdf, (参照 2026-10-8).