← 基礎編の入口へ戻る
第2章:第1部・機械を分解する
第2章 CPUを構成するブロック ― 厨房の顔ぶれ
この章のねらい。 CPUの部品を、ひととおり見わたします。第1章の作業台(桝)に加えて、コンロ・倉庫・しおり・読み解き係・親方・メトロノーム。それぞれが何者なのか。そして要所要所で、設計者が「何を・どんな方法で・どんな理由で」決めるのかを書き添えます。部品を知ると同時に、「CPUはこうやって選んで組むのか」が見えてくる――それがこの章のねらいです。最後に、全部をつないだ厨房の全体図をながめます。
2.1 厨房の顔ぶれ
CPUがやりたいのは、つきつめれば「命令の列を、上から順に実行すること」。たったそれだけのために、役割のちがう部品がいくつか要ります。厨房にたとえると、こんな顔ぶれです。計算するコンロ、値を置く作業台、遠くの倉庫、いま何番の注文かを指すしおり、注文票を読み解く係、全体を采配する親方、そして全員の拍をとるメトロノーム。順に見ていきます。
2.2 コンロ = ALU(計算する装置)
実際に計算するのが ALU(エー・エル・ユー、算術論理演算装置)。コンロのように、材料(ふつう2つの値)を受け取り、煮炊き――足し算・引き算、AND/OR といった論理、「A は B より小さい?」という比較――をして、結果を1つ出します。CPUが“手を動かす”仕事は、ほぼここで起きる。この厨房の主役です。
設計者はここで決める。 何を:コンロにどんな料理をさせるか。足し引きと論理だけにするか、掛け算・割り算もできる金物(RISC-Vでいう M 拡張)を足すか。どう決める:そのチップの用途から、要る計算を選ぶ。なぜ:使わない計算機を載せても、面積と電力のむだになるだけだから。コンロは、ふつう1つです。
2.3 作業台 = レジスタファイル(第1章の桝32個)
第1章でじっくり見た作業台です。桝が32個、1個が32升目(32ビット幅)。コンロ(ALU)は、ここから材料(値)を読み、計算した結果を、またここへ書き戻します。倉庫(メモリ)まで行かずに、手元ですぐ取り出せる近さが、速さの肝でした。設計者がここで決めるのは、第1章のとおり桝の幅(32/64)です。
2.4 しおり = プログラムカウンタ(PC)
プログラムは、倉庫(メモリ)に番地つきでならんだ命令の列です。機械は「いま何番地の注文票をやっているか/次はどれか」を覚えていないと、迷子になります。それを指し示す小さな専用のしおりが、プログラムカウンタ(PC)。次に実行する注文票の番地を持っています。ふつうは1つずつ番地を進めて前へ――だから“カウンタ(数え上げ)”――「あちらへ飛べ」という命令が来たときだけ、新しい番地に書き換わります。ループも条件分岐も、正体はこのしおりの書き換えです。
2.5 読み解き係 = デコーダ / 親方 = 制御部
倉庫から取ってきた注文票は、ただの 0/1 の並びです。これを見て「これは“たす”、材料は x1 と x2 の桝、盛り付け先は x3」と読み解く係が、命令デコーダ。暗号のような数字列を、人間でいう“意味”に翻訳します。読み解いた指示をもとに「いまは足し算だから、x1 と x2 の桝をコンロにつなぎ、結果を x3 へ戻せ」と各所に采配するのが、制御部=厨房の親方。自分では料理せず、全体の段取りだけを決めます。
設計者はここで決める。 何を:注文票の“書式”――つまり命令の種類と書き方。どう決める:命令を単純にそろえるか、多機能で複雑にするか。なぜ:種類が多く複雑だと、読み解き係(デコーダ)が重く大きくなる。単純にそろえると軽い。――この綱引きが、第4章「CISCとRISC」の本題になります。
2.6 倉庫 = メモリ
厨房の外には、桝が天文学的にならんだ巨大な棚――メモリがあります。ひとつずつに番地。役割は二つです。ひとつは命令の置き場(注文票がしまわれていて、しおり=PCが番地で指すのはここ)。もうひとつはデータの置き場(計算で読み書きする値や、作業台に載りきらない大量の値を預ける)。
設計者はここで決める。 何を:命令用の棚とデータ用の棚を、別々にするか、ひとつにまとめるか。どう決める:別々にすると、命令の取り出しとデータの出し入れを同時にでき、流れがよくなる(これをハーバード型と呼びます)。ひとつにまとめると、作りが簡単で小さくなる(プリンストン型)。なぜ:速さを取るか、小ささ・簡潔さを取るか。小さなチップでは、ひとつにまとめることも多いです。
2.7 メトロノーム = クロック
最後に、いちばん地味で、いちばん欠かせない裏方――クロックです。部品が勝手なタイミングで動くと、値が定まる前に隣が読んでしまって、計算がめちゃくちゃになります。そこで、厨房全体に カチ、カチ、カチ… と一定の拍を配るメトロノームがいる。1拍(1サイクル)ごとに、各部品がきっちり一歩だけ進む。値はその拍のあいだに安定し、次の拍の頭で、いっせいに次へ送られます。
設計者はここで決める。 何を:拍を、どれだけ速くできるか(=クロック周波数)。どう決める:1拍の長さは、第3章で見るとおり「いちばん時間のかかる手順」で決まります。その長さは、回路と製造プロセスから タイミング解析(STA) で見積もる――LibreLane/OpenROAD でおなじみの、あの解析です。速くしたければ、重い手順を細かく工程に分ける。なぜ:分けるほど1拍は短くできますが、工程の境目を増やすぶん回路も増えます。なお、こうして拍に合わせるのが同期式。拍を置かず、各部が「終わった」と合図して渡す非同期式もありますが、合図の仕組みが複雑で、実用例は多くありません。
2.8 全体図 ― 厨房の配線
顔ぶれがそろいました。最後に、ざっとつないでみましょう。しおり(PC)が倉庫(メモリ)の番地を指し、注文票を取り出す。読み解き係(デコーダ)が読み解き、親方(制御部)が采配する。作業台(レジスタ)とコンロ(ALU)のあいだで値と結果がやりとりされ、必要なら倉庫に出し入れする。そして、すべてがメトロノーム(クロック)の拍にのって進む――これで、確かに一台のCPUです。
厨房の配線図。倉庫(メモリ)から命令と材料が行き来し、しおり(PC)・読み解き係(デコーダ)・親方(制御部)・作業台(レジスタ)・コンロ(ALU)が連携。すべてがメトロノーム(クロック)の拍にのって進みます。
この章は、どの判断のための知識か。 ここで設計者が決めるのは、ひとことで言えば厨房の顔ぶれの“取捨選択”です。何を――どの計算(掛け算や浮動小数点など)を載せ、どれを省くか。命令用とデータ用の倉庫を分けるか。拍をどこまで攻めるか。どう決める――用途から「要る/要らない」を選び、面積・電力・速度の綱引きで判断する。なぜ――載せた部品は、ぜんぶ面積と電力を食うから。要るものだけを、過不足なく。これが「自分チップを“選んで組む”」の中身です。序章の“決めることマップ”の中央4領域に、ここでいよいよ手がかかり始めます。