1命令を1クロックで
命令に応じて入力を選び、加算器を通った値を取り込みます。MOV(Move:転送)のような命令も「+0」を使います。
CPUってなに?はじめの一歩
CPUのしくみを、動かしながら。
CPU(Central Processing Unit:中央処理装置)は、プログラムの命令に従って、データを動かし、計算し、次にすることを切り替える回路です。
「5と3を足す」だけでも、内部では値の受け渡しが起こります。その道筋を、一つずつ見ていきましょう。
CPUとは何かを読むプログラムの一行が、
回路の動きにつながる。
CPUとは何か
CPUは Central Processing Unit の略で、日本語では「中央処理装置」といいます。プログラムに並んだ命令を読み、その内容に応じて回路を働かせます。
たとえば「数を読み込む」「足す」「結果を出す」「条件によって別の命令へ進む」。複雑に見えるアプリも、このような小さな処理の積み重ねで動いています。
役割を整理した概念図です。CPUはコンピュータを構成する部品の一つで、メモリや入出力装置と協力します。参考:IBMのCPU解説
データの表し方
1bit(ビット)は、0か1のどちらかを表す単位です。bitはBinary digit(二進数の一桁)を短くした語です。桁が増えると、区別できる組み合わせも増えます。
4bitなら2⁴=16通り。符号なしの整数として読むと0〜15です。8bitなら2⁸=256通りで、0〜255を表せます。8bitは1byte(バイト)です。
命令も数値も、メモリの中ではビットの並びです。どの並びをどの命令として読むかは、CPUの命令セットで決まります。
1になっている桁の重みを足します。
ここでは符号なしの整数として読みます。4bitの桁に16は収まりません。
CPUの基本構造
最初は、次の部品の役割が分かれば十分です。実験室にも同じ名前が登場します。
計算担当はALU(Arithmetic Logic Unit:算術論理演算装置)。命令を読む番地を覚えるのはPC(Program Counter:プログラムカウンタ)です。この図のPCはパソコンの略ではありません。
番地 0, 1, 2, …
部品の間を結ぶ配線・バスで、値を受け渡す
A / BALUPCROM / RAM基本用語の参考:IBM — マイクロプロセッサの構成 · TI — セレクタ/マルチプレクサ · TD4の名前の由来
命令とクロック
PCの番地から命令を取り出す。
何を、どの部品で行うかを決める。
転送や計算を行い、結果を取り込む。
次の番地、または分岐先から続ける。
この手順は、命令を理解するための整理です。四つの段階が、そのまま四つのクロックになるわけではありません。
クロックは、回路のタイミングをそろえる周期的な信号です。計算回路に値が伝わり、決められたタイミングでレジスタが値を取り込みます。
命令に応じて入力を選び、加算器を通った値を取り込みます。MOV(Move:転送)のような命令も「+0」を使います。
T1で命令の番地、T2で命令を取得。T3以降で転送や計算を行います。Tは命令内の何番目の段階かを表します。
まずは4クロック
TD4で、実際に値の変化を見てみましょう。「1クロック進む」を押すと、一行の命令が実行されます。A・Bは値を置く場所、OUT(Output:出力)は出力用のレジスタです。CLK(Clock:クロック)は実行したクロックの通算回数を示します。
MOV A, 5Move(転送):Aに5を入れる
ADD A, 3Add(加算):Aに3を足す
MOV B, AAの値をBへ
OUT BOutput(出力):Bの値を出力へ
人が読みやすい命令表記をアセンブリ言語といいます。アセンブラがこれを機械語に変換します。
値は各クロックを実行した後の状態です。AからBへコピーしてもAの値は残ります。ここでは出力までの4クロックを扱い、実験室のサンプルには続けて待機用のJMP命令があります。
CPUの中を見にいこう
実験室では、動いた配線、ALUの計算、レジスタの変化をクロックごとに確認できます。迷ったら、まずはTD4から始めてください。
先ほどの「A → B → OUT」をそのまま実行します。1クロックで1命令が進むので、ソースと動きを対応づけやすいモデルです。
「ALUで 5+3」を使い、一つの命令を細かく追います。RAMから値を読み、共通バスを通して計算するモデルです。
PCが先の番地を指していても、元の命令がまだ実行途中のことがあります。実行行は命令が完了するまで同じ行に残ります。スマホでは「注目部品」表示で拡大して追えます。
TD4とSAP-1系は、別々の命令セットを持ちます。両方とも命令は8bit、番地は4bitで、16個のメモリ番地を使います。今回のSAP-1系は、原典SAP-1を拡張したBenEaterSVを参考にしています。SVはSystemVerilogという回路記述言語の名前を短くした表記です。
各ステップは論理的なデータ転送を表し、実際のゲート遅延や半クロックの電気的な波形は再現しません。詳しい仕様と出典は実験室の「学習ガイド」「命令表」に記載しています。