シリーズ「コンピュータの部品のしくみ」 第5回

回路が「1 種類で足りる」とは?

素直に作れるのは、NAND

このシリーズでは、机の上に部品を並べて、ゲートの中身を組み立てている。

第1回では、電池の+側につながった線を 1 の線、−側につながった線を 0 の線と呼んだ。 スイッチを一列に並べると「どちらも」(AND)、横に並べると「どちらか」(OR)になった。

第2回と第3回で、スイッチを電気で押せるようになった。 いまの主役は、動く部分のないスイッチ、トランジスタだ。 1 で押されるとつながる種類と、0 で押されるとつながる種類がある。

前回は、この 2 種類を、出口の上と下に組にして置いた。 上の組と下の組は、いつもちょうど反対のつなぎ方をしている。 だから出口は、必ずどちらか片方だけにつながる。

そうして素直に作れたのが、NAND(ナンド)だった。 トランジスタ 4 個でできる。

ABNAND
001
011
101
110

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 のスイッチをクリックして、表のとおりになるかを見てください

NANDA0出口

使っている箱:NAND が 1 個だけ

A出口
01
10

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回の、階段の照明の話で出てきた。

ABXOR
000
011
101
110

これを、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 のスイッチをクリックして、表のとおりになるかを見てください

NANDNANDNANDNANDA0B0出口

使っている箱:NAND が 4 個だけ

AB出口
000
011
101
110

XOR の表と同じになっているか

真ん中の上の NAND が、A だけの見張り番。 真ん中の下の NAND が、B だけの見張り番。 A と B を食い違わせると、どちらかの見張り番の線が灰色(0)に変わり、出口が点く。

前回、店で売っている NAND の IC(たとえば 74HC00)には、2 入力の NAND が 4 つ入っている、と書いた。 ちょうど 4 つだ。 この IC 1 個で、XOR が組める。

NAND の IC 1 個で組んだ XOR。A と B を食い違わせると LED が点く

IC 1 個、NAND 4 つで XOR。左は食い違い、右はそろっている

足し算まで

ここまで来れば、足し算もできる。

1 桁の 2 進数 A と B を足してみよう。 答えは、その桁に残る和と、上の桁へ送る繰り上がりの 2 つになる。

AB繰り上がり和
0000
0101
1001
1110

和の列は、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 のスイッチをクリックして、表のとおりになるかを見てください

NANDNANDNANDNANDNANDA0B0和繰り上がり

使っている箱:NAND が 5 個だけ

AB和繰り上がり
0000
0110
1010
1101

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 の数トランジスタ前回の組なら
NOT1 個42
AND2 個86
OR3 個126
XOR4 個16—
半加算器5 個20—
全加算器9 個36—

NAND で作った NOT は、トランジスタ 4 個。 前回の上下の組の NOT なら、2 個で済む。 1 種類にこだわらなければ、もっと少なくできるわけだ。

それでも、NAND だけで何でも作れる、ということには意味がある。 どんな回路でも、少なくとも 1 つは作り方がある、と言い切れるからだ。

何段も、重ねる

半加算器の図を、もう一度見てほしい。

A が変わると、まず左の NAND が切り替わる。 その答えを受けて、真ん中の NAND が切り替わる。 さらにその答えを受けて、右の NAND が切り替わり、和のランプが変わる。

和が出るまでに、NAND が 3 段重なっている。

シミュレータでは、スイッチを押したとたんに、和のランプが変わる。 ここまで、スイッチは押した瞬間に切り替わると思ってきた。 1 段目が切り替われば、2 段目も、3 段目も、すぐに切り替わるはずだ、と。

けれど、第2回のリレーは、カチッと鳴るまでに、少し時間がかかった。 動く部分のないトランジスタは、どうなのだろう。

本当に、一瞬なのだろうか。

次回は、NAND が切り替わるまでの、ほんの短い時間をのぞいてみる。

参考文献