スイッチから CPU まで · LogicLab

1 個のスイッチから 1 台の CPU まで組み立てよう。直列・並列のスイッチとリレーを動かして「AND」「OR」「NOT」を見つけ、光る導線を伝う信号と論理ゲート内部のトランジスタの開閉を透視します。NAND ゲートだけであらゆるゲートを配線し、半加算器・全加算器を作って検証後にチップへ封入。4 個の全加算器を筆算のように並べて桁上がりが最上位まで伝わる様子を観察し、最後はクロックを押して自作の加算器が 4 ビット小型 CPU の中でプログラムを実行する姿を追い、チップの中のトランジスタ数を比べます。

教科:情報技術 · 対象:中学校、高校 · 学習内容:論理ゲートと真理値表、2 進数と桁上がり、半加算器と全加算器、CPU が命令を実行する仕組み

章の内容

スイッチは「計算」できるか

スイッチには開と閉の 2 つの状態しかありません。開を 0、閉を 1、消灯を 0、点灯を 1 と書けば、回路はそのまま真偽を問う「判断問題」になります。

画面のスイッチを直接クリックしてみましょう。2 つのスイッチを直列につなぐと両方閉じたときだけ点灯し、並列につなぐとどちらか一方を閉じれば点灯します。4 通りすべて試すと、右側の真理値表が 1 行ずつ埋まっていきます。

次にリレーへ切り替えます。コイルに電流を流すと電磁石になり、別の回路の接点を引き離します。つまり電気で動かすスイッチです。1937 年、21 歳のシャノンは修士論文で、こうしたスイッチ回路が論理の「AND」「OR」「NOT」をそのまま表せることを示しました。電気回路そのものの法則は VoltLab を参照してください。

論理ゲート

前の課のスイッチ回路を箱に収め、入力と出力だけを外に出したものが論理ゲートです。導線に電圧がある状態を 1(点灯)、ない状態を 0(消灯)と表します。

左の入力スイッチを切り替え、信号が導線を伝わってゲートに入り、少し遅れて結果がランプに届く様子を見ましょう。右側でゲートを切り替え、それぞれの真理値表を確かめます:AND ゲート Y = A · B、OR ゲート Y = A + B、NOT ゲート Y = A。出力に小さな丸がついた NAND ゲート・NOR ゲートは計算してから反転し、XOR ゲートは 2 つの入力が異なるとき 1 を出力します。

「透視」を押して中を見てみましょう。動く部品は一切なく、電圧で制御する超小型スイッチ――トランジスタが数個あるだけです。左上から MIL 記号と JIS/IEC 記号(&、≥1、1、=1)を切り替えられます。

万能な NAND ゲート

この課では自分で配線します。ボード上には NAND ゲートしかありません。これだけを使って他のゲートを組み立てましょう。

配線:ピンからピンへドラッグします(または 1 つ目をクリックしてから 2 つ目をクリック)。導線は出力から入力へつなぎ、1 つの出力は複数の入力に分けられますが、1 つの入力には 1 本しかつなげません。線をクリックすると外せます。左のスイッチを動かして信号の流れをいつでも確認できます。

つなげたら検証を押します。すべての入力を自動で試し、目標の真理値表と 1 行ずつ照合します。全行一致したらチップに封入しましょう。半導体工場も同じです。NAND ゲートはトランジスタ 4 個で済み、最小・最速だからこそ、すべてを組み立てる「積み木」になります。迷ったら「配線を 1 本ヒント」を押してください。

0 と 1 だけで数を数える

1 本の導線が表せるのは 0 か 1 だけで、これを 1 ビット(bit)と呼びます。もっと大きな数を表すには何本か並べ、10 進法の 1 の位・10 の位・100 の位のように各桁に重みを持たせます――ただし重みは 1、2、4、8 で、2 になると繰り上がります。

4 つのスイッチを切り替えると、下のランプがその桁の 0・1 を示し、右の数字表示器が 10 進数を表示します。1011 なら 8 + 0 + 2 + 1 = 11 です。

「1 を足す」を押して順番に数えてみましょう。最下位が 1 のときに 1 を足すと 0 に戻って左へ桁上がりします。0111 に 1 を足すと桁上がりが 3 桁連続で伝わり、4 桁すべて 1 からさらに 1 を足すとオーバーフローします。

半加算器

1 ビットの 2 進数どうしの足し算は 4 通りしかありません:0 + 0 = 0、0 + 1 = 1、1 + 0 = 1、そして 1 + 1 = 10 です。結果を表すには、この桁の和 S と上の桁への桁上がり C の 2 ビットが要ります。

右の目標真理値表を見比べましょう。S の列はどのゲートと同じでしょうか?C の列はどうでしょう?ボード上の 4 種類のゲートから適切な 2 個を選び、A・B をつないで出力を S と C のランプへ配線してください。使わないゲートはそのままで構いません。

検証に通ったら半加算器チップに封入します。1937 年、ベル研究所のスティビッツがリレー数個と懐中電灯の豆電球 2 個を家に持ち帰り、台所のテーブルで組んだのがまさにこの 2 進加算回路でした。

全加算器

筆算の足し算では、各桁で実際には3 つの数を足しています。A のその桁、B のその桁、そして下の桁からの桁上がり Cin です。この 3 入力を処理する回路を全加算器と呼びます。

ボードには先ほど封入した半加算器チップ(HA)が 2 個あります。まず 1 個目で A と B を足し、その和と Cin を 2 個目で足せば、2 個目の「和」が最終的な S になります。

2 個の半加算器からはそれぞれ桁上がりが出ます。どちらか一方でも 1 なら上の桁へ繰り上げるべきなので、適切なゲートを選んで Cout にまとめましょう。8 通りすべて検証できたら全加算器チップ(FA)に封入します。

4 ビット加算器

4 個の全加算器が筆算と同じように一列に並んでいます。一番上のスイッチが A、2 段目が B、下のランプが和です。各全加算器の桁上がり出力は左隣(1 つ上の桁)の桁上がり入力につながっています――オレンジ色の線が桁上がりです。

スイッチを動かして計算を作り、信号が 1 桁ずつ伝わっていく様子を見ましょう。1111 + 0001 を試してみてください。最下位で生じた桁上がりが 4 個の全加算器を順番に通り抜けるまで上位の結果が確定しないため、リップルキャリー(波紋桁上がり)加算器と呼ばれます。右の波形図には各ビットがいつ安定したかが記録されます。

右端には「減算」スイッチ M もあります。オンにすると B の各ビットが XOR ゲートで反転され、最下位に 1 が足されます。A − B = A + B + 1 により、引き算も同じ加算器で行えます。

加算器から CPU へ

あなたが作った 4 ビット加算器が、この小さな CPU の演算装置になりました。その周りにはいくつかの部品が加わっています:数値を記憶するレジスタ A・B、命令を並べておくプログラムメモリ、何番目の命令かを覚えるプログラムカウンタ PC、そして命令を解読して加算器へ送るデータを選ぶ制御装置です。

クロックを 1 回押すごとに、1 つの命令が 4 拍で実行されます:命令取り出し → 解読 → 実行 → PC+1。まず「3 + 4」を 1 歩ずつ動かし、次に「カウントダウン」と「3 × 4」を実行してみましょう――乗算器はなく、足し算のループで掛け算を実現しています。右側のプログラムはオペランド横の − と + で書き換えられます。

最後に「ズームアウト」を押して、1 個のスイッチから現代のチップまでトランジスタが何個あるか比べてみましょう。1971 年の Intel 4004 も同じ 4 ビットで 2,300 個でした。さらに大量の足し算と掛け算で機械がどう「学習」するかは NeuroLab へどうぞ。

確認テスト

8 つの課題をふり返り、下の選択問題に答えよう。

ほかの実験

ホームに戻る