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

回路が「遅れる」とは?

一瞬では、ない

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

第1回では、電池の+側につながった線を 1 の線、−側につながった線を 0 の線と呼んだ。 第2回と第3回で、スイッチを電気で押せるようになった。 いまの主役は、動く部分のないスイッチ、トランジスタだ。

第4回では、2 種類のトランジスタを、出口の上と下に組にして置いた。 前回は、その組でできる NAND を 1 種類だけ並べて、NOT も AND も足し算も作った。

前回の終わりに、半加算器の和は、NAND が 3 段重なってできている、と書いた。 1 段目が切り替わってから、2 段目。2 段目が切り替わってから、3 段目。 そして、こう問いかけた。

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

答えから言うと、一瞬ではない。

ヒントは、もう第2回にあった。 リレーは、コイルに電気を流してから接点が切り替わるまで、カチッと鳴るまでに、少し時間がかかった。 リレーを 2 段つなぐと、1 段ずつ遅れて切り替わった。

じつは、このシリーズの図は、第2回からずっと、少しずつ間をあけて動かしてきた。 押したとたんに全部が変わるのではなく、1 つ切り替わってから、次が切り替わる。 このサイトのシミュレータは、この「1 つぶん」の刻みをステップと呼んで数えている。

今回は、そのステップの正体を見ていこう。 動く部分のないトランジスタでも、切り替わるのには時間がかかる。 なぜだろう。

線に、ためる

NOT の出口の線は、どこへつながっているのだろう。

ゲートの出口の先には、たいてい、次のゲートがある。 つまり、出口の線の先には、次のゲートのトランジスタの押し口がある。

第3回で見た、トランジスタの箱を思い出してほしい。 押し口の線は、箱の横から入って、板で終わっていた。 その板は、通り道と、すき間をあけて向かい合っていた。 触れてはいない。 だから、押し口は電気を通さない。

では、押し口を 1 にするとは、どういうことだろう。

電気が通り抜けない板を 1 にするには、板に電気をためるしかない。 板だけではない。そこまで続く線にも、少しだけ電気がたまる。 バケツに水を入れるようなものだ。 満タンになって、はじめて 1 になる。

そして、ためるには時間がかかる。 水道の蛇口をひねっても、バケツは一瞬では満たされない。

0 にするときは、反対だ。 たまっている電気を、抜かなければならない。 これにも時間がかかる。

上下の組の NOT でいえば、 出口を 1 にするとき、上の組が 1 の線から電気を流し込んで、線にためる。 出口を 0 にするとき、下の組が、たまった電気を 0 の線へ抜く。

トランジスタは、押されればすぐにつながる。 けれど、つながってから、線にためる(抜く)までの時間が、どうしても要る。 これが、ゲートの遅れだ。

押して、確かめる

下の図は、第4回の上下の組の NOT を、2 段つないだものだ。 1 段目の出口の線は、右へ伸びて、2 段目の上と下の押し口に入っている。

出口の線の下にある横長の目盛りは、その線にたまっている電気だ。 緑でいっぱいなら 1、空なら 0。

線にためる シミュレータ

入力スイッチ A を倒して、出口の線にたまっている電気(目盛り)を見てください

+電池−10A0で1で0で1で1 の線0 の線出口1 段目2 段目

A を倒して、1 段目と 2 段目の出口の線の目盛りを見てください。

目盛りの緑は、その線にたまっている電気。満タンなら 1、空なら 0。1 ステップかけて、たまる(抜ける)

入力スイッチ A を倒してみてほしい。

まず、押し口の線の色が、その場で変わる。 倒したその場を、0 ステップ目と数えよう。

1 段目のトランジスタは、すぐにつながり(切れ)、水色の箱が入れ替わる。 けれど、出口の線の色は、まだ変わらない。 目盛りが、ゆっくり抜けていく(たまっていく)。 抜けきった(たまりきった)ところで、やっと線の色が変わる。 ここまでで、1 ステップ。

すると今度は、その線につながっている 2 段目の押し口が変わる。 2 段目も同じように、自分の出口の線にためて(抜いて)いく。 2 段目の出口が変わるのは、2 ステップ目だ。

もう一度倒すと、今度は向きが逆になる。 1 にするほうも、0 にするほうも、1 ステップずつかかる。

ここでの目盛りの動きは、ためていく様子を見せるために、ゆっくり描いた絵だ。 本物の速さは、あとで数字で見る。

つなぐと、足し算

NOT を 1 段つなぐと、1 ステップ。 2 段つなぐと、2 ステップ。

それなら、もっとつないだら、どうなるだろう。

ここからは、前回と同じように、ゲートを箱で描く。 箱の中には、いつでも、いま見た上下の組が入っている。

NOT をつなぐ シミュレータ

段の数を選んで A を倒し、出口が変わるまでのステップを数えてください

NOTNOTNOTA0出口

A を倒して、出口が変わるまでに何ステップかかるかを数えてください。

A1 段目2 段目出口

記録テープ。上が 1、下が 0。1 目盛りが 1 ステップ、右端がいま

上のつまみで、NOT の段の数を 1〜5 から選べる。 A を倒して、出口のランプが変わるまでに何ステップかかるかを数えてほしい。

図の下の記録テープには、A と、各段の出口の値が、1 ステップに 1 目盛りずつ記録されていく。 右端が、いまだ。

A が変わると、1 目盛り遅れて 1 段目が変わる。 さらに 1 目盛り遅れて 2 段目。 テープの上で、変わり目が階段のように右へずれていく。

3 段なら 3 ステップ。 5 段なら 5 ステップ。

遅れは、足し算になる。

1 段ずつが、前の段の出口がためきる(抜けきる)のを待ってから、自分の線にため始めるからだ。 前の段が終わるまで、次の段は始められない。

「1 段目の NOT を開く」を押すと、1 段目の箱が開いて、さっきの上下の組の図に切り替わる。 箱の外から見て 1 ステップかかっていたのは、この中で、出口の線にためていた時間だ。

前回の半加算器の和は、NAND が 3 段重なっていた。 だから、A を倒してから和が出るまでに、3 ステップかかる。 前回のシミュレータは、そのあいだを飛ばして、落ち着いたあとの答えだけを見せていた。

『計算のしくみ』を読んだ人は、第1回の上級モードの「1ステップ進む」を思い出してほしい。あの 1 ステップが、ゲート 1 段ぶんの遅れだ。第2回で、繰り上がりが 1 桁ずつ順番に伝わるのを待ったのも、遅れが足し算になるからだ。

物差しの、時間の欄

では、本物の 1 ステップは、どのくらいの長さなのだろう。

このシリーズでは、スイッチの比べっこの表を、1 行ずつ伸ばしてきた。 「切り替わるのにかかる時間」の欄は、ずっと埋まらないままだった。 今回、ここを埋める。

リレーは、第2回で見たとおり。 机の上のリレーの説明書には、コイルに電気を流してから接点が切り替わるまで、6 ミリ秒以内と書いてあった。

上下の組は、店で売っている NOT の IC で確かめよう。 たとえば 74HC04 という IC には、上下の組の NOT が 6 つ入っている。 作っている会社の資料(データシート)によると、入力が変わってから出口が変わるまでの時間は、 電源が 4.5 ボルトのとき、ふつう 9 ナノ秒。

ナノ秒は、10 億分の 1 秒。 1 ミリ秒の、さらに 100 万分の 1 だ。

スイッチ押すもの動く部分切り替わるのにかかる時間待っているあいだの電気
押しボタン人の指ある人の指しだい使わない
リレー電気(電磁石)ある(カチッと鳴る)数ミリ秒押しているあいだ、コイルに流しっぱなし
トランジスタ 1 種類電気ない?0 を出しているあいだ、流しっぱなし
上下の組(CMOS)電気ない10 ナノ秒ほどほとんど使わない

(トランジスタ 1 種類の行は、このシリーズでは確かめていないので、?のまま残しておく。)

動く部分のないトランジスタは、板を動かすリレーより、けた違いに速い。 それでも、ゼロではない。 線にためる時間だけは、どうしても残る。

いまのコンピュータの CPU の中のゲートは、これよりも、もっと短い時間で切り替わる。 それでも、たくさんの段がつながれば、1 段ずつは短くても、足し算で効いてくる。

輪に、すると

ここまで、NOT を一列につないできた。 最後の出口を、最初の入口へ戻して、輪にしたら、どうなるだろう。

ただ、いきなり輪にすると、いつから動き始めたのかが分からない。 そこで、輪を、あとから閉じられるようにしておく。

使うのは、前回の NAND だ。 NAND の表の、A が 1 の行だけを見てほしい。

ABNAND
101
110

A が 1 なら、NAND は B の反対を返す。NOT と同じだ。 A が 0 なら、B が何であっても、NAND は 1 を出し続ける。

だから、NAND の片方の入口を「輪」のスイッチにすれば、 スイッチが 0 のあいだは輪が切れていて、みんな落ち着いて止まっている。 1 にした瞬間、NAND が NOT になって、輪が閉じる。

下の図では、NAND と NOT を合わせて 3 つ、4 つ、5 つの輪を選べる。

NOT の輪 シミュレータ

数を選んで「輪」のスイッチを 1 にし、出口のランプと記録テープを見てください

NANDNOTNOT輪0出口

「輪」のスイッチが 0。NAND は 1 を出し続けていて、輪は切れている。みんな止まっている。

NANDNOT 1NOT 2

記録テープ。上が 1、下が 0。1 目盛りが 1 ステップ、右端がいま

まずは 3 つのまま、「輪」のスイッチを 1 にしてほしい。

出口のランプが、点いたり消えたりを、いつまでも繰り返す。 点滅が止まらない。 記録テープを見ると、どの箱も、3 ステップごとに切り替わっている。 ひと回りは 6 ステップだ。

追いかけてみよう。 閉じた瞬間、NAND の入口には、3 つ目の出口から 1 か 0 が戻ってくる。 NAND はその反対を出す。これが 1 ステップ目。 2 つ目がその反対を出して、2 ステップ目。 3 つ目がその反対を出して、3 ステップ目。 3 回反対になったので、3 つ目の出口は、さっきと反対になっている。 それが NAND の入口に戻ってくるので、NAND はまた切り替わる……。

変わり目が、輪を 1 周するたびに、反対になって戻ってくる。 だから、いつまでも止まらない。 1 周に 3 ステップ、行って戻るのに 6 ステップ。 5 つにすると、1 周に 5 ステップかかるので、点滅はゆっくりになる(ひと回り 10 ステップ)。

4 つにすると、どうだろう。 閉じても、何も起こらない。 反対を 4 回とると、もとに戻る。 1 周してきた値が、いまの値と同じなので、変わる理由がない。 偶数なら、止まったままだ。

ここで、もし遅れがなかったら、と考えてみてほしい。 奇数の輪では、出口の値が、そのまま自分の反対になって戻ってくる。 遅れがなければ、出口は「1 であり、同時に 0 でもある」ことになってしまう。 そんな値は、ない。

遅れがあるから、出口は「さっきの自分の反対」になる。 さっきが 1 なら、いまは 0。さっきが 0 なら、いまは 1。 遅れがあるから、輪は点滅になる。

このように NOT を奇数個つないだ輪は、リングオシレータと呼ばれる。 オシレータは、「揺れ続けるもの」という意味だ。 チップを作る工場では、この輪の点滅の速さを測って、ゲート 1 個の遅れを確かめ、作ったものの出来を見張るのに使っている。 点滅の速さは、遅れの足し算そのものだからだ。

『記憶のしくみ』を読んだ人は、第4回のクロックを思い出してほしい。0 と 1 を規則正しく繰り返す波だった。この輪の出口も、誰も押していないのに、規則正しく 0 と 1 を繰り返している。

ところで、74HC04 の NOT 3 つで、この輪を作ったら、どのくらいの速さで点滅するだろう。 データシートのふつうの値(9 ナノ秒)で計算すると、ひと回りは 2 × 3 × 9 = 54 ナノ秒。 1 秒間に、1800 万回ほど点滅することになる(実際には、つないだ線や部品によって変わる)。 とても目では追えない。

けれど、線にためる電気を、わざと多くすれば、ためるのに時間がかかり、点滅はゆっくりになるはずだ。

同じ NOT でも、ばらつく

さっきの 74HC04 のデータシートを、もう少しよく見てみよう。

9 ナノ秒というのは、「ふつう」の値だった。 同じ欄に、「最大 19 ナノ秒」とも書いてある。 使う温度の範囲を広げると、最大は 24 ナノ秒になる、とある。

同じ型番の IC でも、遅れは、1 個ずつ少しずつ違う。 温度や、電源の電圧によっても変わる。 だから資料には、1 つの数ではなく、幅で書いてあるのだ。

このサイトのシミュレータは、どのゲートも、ぴったり同じ 1 ステップで切り替わる、という約束で動いている。 本物は、そうではない。

ほとんどの回路では、それで困らない。 遅いゲートを待てばいいだけだ。 けれど、2 つの信号の「どちらが先に届くか」で答えが変わる回路では、このばらつきが効いてくる。 『記憶のしくみ』を読んだ人は、第2回で、2 つのボタンを同時に離したとき、答えを決めたのがゲートの速さだったことを思い出してほしい。あのばらつきの正体が、この遅れの違いだ。

捨てられる、電気

最後に、もう一度、出口の線にたまった電気のことを考えてみよう。

1 を出すとき、上の組は、1 の線から電気を流し込んで、線にためた。 0 を出すとき、下の組は、その電気を 0 の線へ抜いた。

抜いた電気は、もう戻ってこない。 次に 1 を出すときは、また 1 の線から流し込んで、ためなおす。

つまり、出口が 1 から 0 に切り替わるたびに、ためた電気は 0 の線へ捨てられている。

第4回で、上下の組は、待っているあいだは、ほとんど電気を使わない、と書いた。 それは本当だ。 けれど、切り替わるたびに、ためては捨てている。 さっきの輪なら、1 秒間に何千万回も。

捨てられた電気は、どこへ行くのか。

次回は、捨てられた電気の行き先を追いかける。

参考文献