命令を解読して各装置に制御信号を送り出すCPUの司令塔
制御装置(Control Unit)とは、メモリから取り出した命令を解読し、CPU内外の各装置に「いつ・何をするか」を指示する制御信号を送り出すCPUの司令塔です。演算装置(ALU)やレジスタ、メモリは、すべてこの制御装置の指示に従って動きます。
身近な例で考えると、制御装置はオーケストラの指揮者です。指揮者自身は楽器を演奏しません(計算しません)が、楽譜(命令)を読み、各奏者(演算装置・レジスタ・メモリ)に「ここで入れ」「この音を出せ」とタイミングと内容を指示します。指揮者がいるからこそ、バラバラの楽器が1つの曲を奏でられるのです。
上のツールで命令を選んで▶ボタンを押すと、制御装置が命令をデコード(解読)し、メモリ・レジスタ・ALUへ順番に制御信号を送り出していく流れが1ステップずつ見られます。矢印の向きが「制御装置から各装置への指令」を表しています。
デコード(decode=解読)とは、命令レジスタ(IR)に入った命令語を「何をする命令か」「どのデータに対してか」に分解して意味を判別する処理です。この役割を担うのが制御装置の中にある命令デコーダという回路です。
命令語は2つの部分に分かれています。
・オペコード(命令部):操作の種類を表す(ADD=加算、LOAD=読込 など)
・オペランド(番地部):操作の対象を表す(メモリの番地や値 など)
たとえば「ADD 101」なら、オペコード=ADD、オペランド=番地101 と解読され、「番地101の値をALUで加算せよ」という意味だと判明します。
デコードは計算そのものではない点が重要です。あくまで「次のステップで誰に何をさせるか」を決める段階で、実際の計算は次に制御信号を受け取ったALUが行います。「デコード=命令の解読」と「実行=ALUによる演算」は別の段階として切り分けて理解しましょう。
デコードが終わると、制御装置は解読結果に従って各装置へ制御信号を順番に送り出します。たとえば「ADD 101」では、おおむね次の順序で指令が飛びます。
・メモリへ:「番地101のデータを読み出せ」
・レジスタへ:「ACCとMDRの値をALUへ渡せ」
・ALUへ:「加算を実行せよ」
・レジスタへ:「ALUの結果をACCに格納せよ」
ここで大切なのは順序とタイミングです。メモリからデータが届く前にALUに加算を命じても材料が揃いません。制御装置はクロック(一定間隔の信号)に合わせて、各装置が正しい順番で動くように指揮します。これは料理で「材料を切る→炒める→盛り付ける」の順番を守るのと同じで、順番を間違えると正しい結果になりません。
命令が完了すると、制御装置はPC(プログラムカウンタ)を+1して、再び次の命令の取り出しに戻ります。上のツールでLOADやSTOREも選んでみると、命令の種類によって指令を送る相手や順序が変わることが分かります。STOREでは演算装置を使わない、といった違いに注目してください。
CPUは電源が入っている間、「フェッチ→デコード→実行」の3ステップを延々と繰り返します。この繰り返しを命令サイクル(インストラクションサイクル)と呼び、制御装置がすべての手順を仕切っています。
・フェッチ(取り出し):PC(プログラムカウンタ=次の命令の番地を指すポインタ)が示すアドレスのメモリから命令を読み取り、IR(命令レジスタ=読み取った命令を一時保存する場所)に置く
・デコード(解読):IRに入った命令を制御装置が解読し「何を・誰に・どの順でさせるか」を決める
・実行(エグゼキュート):解読結果に従って各装置に制御信号を送り、ALUが計算・メモリが読み書きなどを行う
なぜこの3ステップを繰り返すのか。プログラムとは命令の集まりで、1命令ずつ順番に処理することで複雑な仕事を実現します。このサイクルを回す速さの指標がクロック周波数(=1秒間に何回サイクルできるかの目安)です。3GHzのCPUなら1秒間に約30億回このサイクルを繰り返しています。制御装置はこの高速サイクルの「指揮者」として、すべてのステップを正しく順番に動かし続けます。
制御装置がなければ、ALUもメモリもレジスタも「いつ動けばよいか」がわかりません。ALUが計算しようとしてもデータがレジスタに届いていない、メモリが読み出し中なのにALUが結果を要求するといった「すれ違い」が起きてしまいます。
なぜ制御装置が必要なのか。それは「各装置が正しい順番で・正しいタイミングで」動く保証が必要だからです。制御装置が各装置に「今やれ」「次はお前の番」と指令を出すことで初めて、1つの命令が正しく完了します。
アナロジーで考えると、信号機のない交差点です。車(各装置)はそれぞれ進みたいのに、信号(制御装置)がなければいつ行けばいいかわからず、衝突(処理の矛盾)が起きます。制御装置は交差点の信号のように、各装置が「今動いてよい」タイミングを管理します。この役割があるからこそ、CPUは何億もの命令を正確に、矛盾なく処理し続けられるのです。