CPUってなに?はじめの一歩

CPUのしくみを、動かしながら。

小さな命令が、
コンピュータを動かす。

CPU(Central Processing Unit:中央処理装置)は、プログラムの命令に従って、データを動かし、計算し、次にすることを切り替える回路です。

「5と3を足す」だけでも、内部では値の受け渡しが起こります。その道筋を、一つずつ見ていきましょう。

CPUとは何かを読む
今回たどる、小さな計算
5値を入れる+3足す8出力する

プログラムの一行が、
回路の動きにつながる。

4クロックの体験へ
01

CPUとは何か

命令を実行する、計算と制御の担当。

CPUCentral Processing Unit の略で、日本語では「中央処理装置」といいます。プログラムに並んだ命令を読み、その内容に応じて回路を働かせます。

たとえば「数を読み込む」「足す」「結果を出す」「条件によって別の命令へ進む」。複雑に見えるアプリも、このような小さな処理の積み重ねで動いています。

入力スイッチ・キー
処理CPU命令に従って動く
出力表示・ランプ
メモリ命令やデータを置く場所

役割を整理した概念図です。CPUはコンピュータを構成する部品の一つで、メモリや入出力装置と協力します。参考:IBMのCPU解説

02

データの表し方

0と1の並びに、値を割り当てる。

1bit(ビット)は、0か1のどちらかを表す単位です。bitはBinary digit(二進数の一桁)を短くした語です。桁が増えると、区別できる組み合わせも増えます。

4bitなら2⁴=16通り。符号なしの整数として読むと0〜15です。8bitなら2⁸=256通りで、0〜255を表せます。8bitは1byte(バイト)です。

命令も数値も、メモリの中ではビットの並びです。どの並びをどの命令として読むかは、CPUの命令セットで決まります。

0 / 1を切り替えてみよう

1になっている桁の重みを足します。

01014 + 1 = 5

ここでは符号なしの整数として読みます。4bitの桁に16は収まりません。

03

CPUの基本構造

計算する。覚える。行き先を決める。

最初は、次の部品の役割が分かれば十分です。実験室にも同じ名前が登場します。

計算担当はALUArithmetic Logic Unit:算術論理演算装置)。命令を読む番地を覚えるのはPCProgram Counter:プログラムカウンタ)です。この図のPCはパソコンの略ではありません。

メモリ命令・データを置く番地 0, 1, 2, …
番地・データ

CPU

制御装置命令を解読し、選択・計算・取り込みの信号を出す
制御信号
レジスタA・B・PC など値を保持する
ALU算術論理演算装置計算する

部品の間を結ぶ配線・バスで、値を受け渡す

役割をまとめた機能図です。部品の数や配線はCPUごとに異なります。クロック信号が、値を取り込むタイミングをそろえます。
レジスタ A / B
CPU内部で値を一時的に保持する小さな記憶回路。A・Bは区別するための名前です。SAP-1系のAはAccumulator(アキュムレータ)として、計算する値や結果を置きます。
演算装置 ALU
入力された値を計算する回路。TD4の加算器は足し算、今回のSAP-1系は足し算と引き算を行います。
プログラムカウンタ PC
命令を読む番地を保持します。順番に増やしたり、分岐命令で別の番地に変えたりします。
制御装置
命令から「どの値を配線に出すか」「どこへ取り込むか」を決め、各部品へ信号を送ります。
メモリ ROM / RAM
ROMはRead-Only Memory(読出し専用メモリ)、RAMはRandom Access Memory(任意の番地を指定してアクセスするメモリ)の略です。今回のTD4は命令ROM、SAP-1系は読み書きできるRAMに命令とデータを置きます。
バス・配線
値や信号の通り道。SAP-1系では共通のバスを使い、クロックごとに送り元と受け取り先を切り替えます。
実験室で登場する、もう少し詳しい名前
IR:Instruction Register(命令レジスタ)
SAP-1系で、読み込んだ命令を保持します。
MAR:Memory Address Register(メモリアドレスレジスタ)
SAP-1系で、RAMにアクセスする番地を保持します。TD4にはIR・MARはありません。
MUX:Multiplexer(マルチプレクサ/セレクタ)
TD4で、A・B・入力IN(Input)・定数0から加算器へ送る値を選びます。
C:Carry(キャリー)/Z:Zero(ゼロ判定)
Cは加算の桁あふれなどを示します。SAP-1系のZは「Aが0か」の判定信号です。更新の規則はCPUごとに異なります。

基本用語の参考:IBM — マイクロプロセッサの構成 · TI — セレクタ/マルチプレクサ · TD4の名前の由来

04

命令とクロック

読む、解読する、実行する。これを繰り返す。

  1. FETCH

    命令を読む

    PCの番地から命令を取り出す。

  2. DECODE

    命令を解読する

    何を、どの部品で行うかを決める。

  3. EXECUTE

    処理を実行する

    転送や計算を行い、結果を取り込む。

  4. NEXT

    次の命令へ

    次の番地、または分岐先から続ける。

この手順は、命令を理解するための整理です。四つの段階が、そのまま四つのクロックになるわけではありません。

クロックは、回路のタイミングをそろえる周期的な信号です。計算回路に値が伝わり、決められたタイミングでレジスタが値を取り込みます。

TD4 / 4bit

1命令を1クロックで

命令に応じて入力を選び、加算器を通った値を取り込みます。MOV(Move:転送)のような命令も「+0」を使います。

SAP-1系 / 8bit

1命令を3〜5クロックで

T1で命令の番地、T2で命令を取得。T3以降で転送や計算を行います。Tは命令内の何番目の段階かを表します。

05

まずは4クロック

「5+3」が出力されるまで。

TD4で、実際に値の変化を見てみましょう。「1クロック進む」を押すと、一行の命令が実行されます。A・Bは値を置く場所、OUT(Output:出力)は出力用のレジスタです。CLK(Clock:クロック)は実行したクロックの通算回数を示します。

プログラム

  1. MOV A, 5Move(転送):Aに5を入れる
  2. ADD A, 3Add(加算):Aに3を足す
  3. MOV B, AAの値をBへ
  4. OUT BOutput(出力):Bの値を出力へ

人が読みやすい命令表記をアセンブリ言語といいます。アセンブラがこれを機械語に変換します。

実行前 · 0 / 4
A0
B0
OUT0
PC0
選択する入力
加算器 ALU
取り込む場所
まだ命令を実行していません。最初のクロックで、Aに5を入れます。 同じプログラムを、配線図で調べる

値は各クロックを実行した後の状態です。AからBへコピーしてもAの値は残ります。ここでは出力までの4クロックを扱い、実験室のサンプルには続けて待機用のJMP命令があります。

06

CPUの中を見にいこう

次は、ソースと配線図を見比べる。

実験室では、動いた配線、ALUの計算、レジスタの変化をクロックごとに確認できます。迷ったら、まずはTD4から始めてください。

はじめての実験

TD4 4bit

先ほどの「A → B → OUT」をそのまま実行します。1クロックで1命令が進むので、ソースと動きを対応づけやすいモデルです。

  1. 「1クロック ↑」を1回押し、A=5を確認。
  2. 2回目でA=8。加算器の5+3を見る。
  3. 4回目でOUT=8。転送の道筋をたどる。
TD4の実験を始める データ0〜15 · 1命令/クロック
次のステップ

SAP-1系 8bit

「ALUで 5+3」を使い、一つの命令を細かく追います。RAMから値を読み、共通バスを通して計算するモデルです。

  1. 最初のT1でPC → MAR(Memory Address Register:番地の保持)、T2でRAM → IR(Instruction Register:命令の保持)。
  2. ADDのT4では、足す値3をBへ準備。
  3. ADDのT5でA=8。全体で15クロック後に停止。
SAP-1系の実験を始める データ0〜255 · 3〜5クロック/命令

見る順番は、この3つ。

  1. ソースの緑色の行どの命令の動作か。
  2. 図内の吹き出しと矢印どこからどこへ値が動いたか。
  3. レジスタの前 → 後何が変わり、何が残ったか。

PCが先の番地を指していても、元の命令がまだ実行途中のことがあります。実行行は命令が完了するまで同じ行に残ります。スマホでは「注目部品」表示で拡大して追えます。

この実験で使うCPUと、モデルの範囲

TD4とSAP-1系は、別々の命令セットを持ちます。両方とも命令は8bit、番地は4bitで、16個のメモリ番地を使います。今回のSAP-1系は、原典SAP-1を拡張したBenEaterSVを参考にしています。SVはSystemVerilogという回路記述言語の名前を短くした表記です。

各ステップは論理的なデータ転送を表し、実際のゲート遅延や半クロックの電気的な波形は再現しません。詳しい仕様と出典は実験室の「学習ガイド」「命令表」に記載しています。

TD4の回路資料 · BenEaterSVの参照設計 · 参照実装のライセンス