next up previous
: データパス構成の準備1 : マイクロプロセッサ演習 : マイクロプロセッサ演習

はじめに~データパスと制御

今回から教科書第五章「プロセッサ:データパスと制御」について学ぶ。 プロセッサは大きく分けて 2 つの要素で構成される。 データパス (datapath) と制御 (control) である。 教科書によるとデータパスはプロセッサの筋肉 (brawn) であり、 制御は脳 (brain) であるとされている。 データパスは datapath という綴りにあるようにデータ経路のことであり、 この経路に沿って加算やロード/ストアなど、実際の演算処理が行われる。 制御は命令に従って何をすればよいか、データパスやメモリなどに指示を出す。

主に以下の流れで解説を進める。

  1. 単一サイクルのデータパス (今回)
  2. マルチサイクルのデータパス (次回)
  3. パイプラインを用いたデータパス (教科書下巻、授業・演習の範囲外)
三つ目の「パイプラインを用いたデータパス」は授業の範囲外であるが、 現代のプロセッサではパイプラインの考え方は必須であるため、興味のある人は 自習するとよいだろう。

今回学ぶ「単一サイクルのデータパス」の動作の模式図を図 1 に示す。

図 1: 単一サイクルで命令を実行する。
\includegraphics[scale=0.8]{eps/clock}
すなわち、1 クロックにつき 1 命令を実行するような方式である。 なお、今回の教科書第五章は非常に広範な内容を含んでいるため、 この演習だけで全てを解説するのは時間的に難しいかもしれない。 そのため、本資料は教科書や授業の内容を理解するためのガイドとして利用することを 意図して作成することにする。 教科書の解説は非常に丁寧に書かれているので、時間をかけてじっくり読んでいけば 必ず理解できるはずである。

まず、MIPS 命令セットの実現方式の概念的な構造図を表したのが図 2 である。 これはまだ不完全であるが、これに肉付けをすることで単一サイクルのデータパス が構成されるため、まずこの図の理解を足掛かりにしよう。

図 2: MIPS の命令の実現方式の概念図。
\includegraphics[scale=1.0]{eps/datapath01}
以下、順に解説しよう。
  1. 過去の授業と演習において、プロセッサはメモリに格納された命令を一命令ずつ 実行することでプログラムの機能が実現されることを学んで来た。 それに対応し、まず PC (プログラムカウンタ) に格納された メモリアドレスを読み込み、命令メモリから命令を取得する (図中 (a))。

  2. この命令が例えば add 命令であれば「add $t0, $t1, $t2」のように 3 つのレジスタを「読み込み用 2 つ、書き込み用 1 つ」として指定することになる。 そのため、命令メモリからレジスタへ 3 つの入力が入る (図中 (b))。

    一方、この命令が lw 命令「lw $t0, 4($t1)」であれば、「読み出し用 1 つ、書き込み用 1 つ」の計 2 つの入力がレジスタに入る。さらに、ベースアドレスからのずれの値「4」を後段の ALU に入力する必要がある (図中 (c))。

  3. いま、命令が 「add $t0, $t1, $t2」であれば、レジスタからの出力は 2 つ ($t1 の値と $t2 の値) である。この値を ALU に入力して加算を行う (図中 (d))。

    一方、命令が「lw $t0, 4($t1)」であれば、「$t1 の値に 4 を足す」演算が必要であり、これも ALU で行われる (図中 (e))。

  4. ALU の計算結果は、命令が 「add $t0, $t1, $t2」であればそのままレジスタにデータとして入力され、レジスタ $t0 に書き込まれる (図中 (f))。 一方、命令が「lw $t0, 4($t1)」であれば、加算結果を元にデータメモリから値を読み込んでレジスタ $t0 に格納する必要がある (図中 (g))。

  5. なお、レジスタからデータメモリの「データ」入力への延びる線は、 例えば 「sw $t0, 4($t1)」命令で使われる。レジスタ $t0 の値をデータメモリに格納するために使われる (図中 (h))。
以上が図 2 でのデータの概念的な流れである。 この概念を一つ一つ実現することでデータパスが完成する。

平成17年1月12日