: 問題
: マイクロプロセッサ演習
: データパス構成の準備2~レジスタファイル
以上の準備のもと、「単一サイクルで動作するデータパス」の構築に進む (教科書 317 ページ)。
様々な命令 (and, lw, sw, jr 等) を考え、それらが正しく動作するよう、
論理要素を追加してゆく。ここで全ての機能追加手順を解説するのは難しいので、
導入を行なうに留め、残りは教科書や授業資料を元に学ぶという方法を取る。
[命令フェッチ部]
まず、命令フェッチ部を構築する。
プログラムの現在の命令の位置 (メモリアドレス) は PC (Program Counter)
に格納されていることを演習第七回「I 形式」の章で学んだ。
この PC の値に基づいて命令メモリから命令が取得される (フェッチされる) のは
図 2 で見た通りである。
アドレス PC から命令が取得された後、
PC の値は次の命令を指すため されなければならない。
それを付加したのが図 8 である。
図 8:
データパスのうち、命令をフェッチしてプログラム・カウンタを繰り上げる部分。
|
PC は状態論理要素であるので、PC+4 の値は次のクロックの立ち上がりで
PC に書き込まれる。
図 8 の PC と加算器 (adder) からなるフィードバックは
図 4(b) に対応することに注意しよう。
すなわち、PC が状態論理要素であり、adder は組合せ論理回路である。
なお、レジスタ同様、命令メモリも読み出しは組合せ論理回路のように読み出すことができる。
[R 形式命令とロード/ストア命令部]
さらに、データパスに R 形式命令 (add, sub 等) とロード/ストア命令
を実行できるよう手を加えよう。
図 9:
データパスのうち、R 形式命令とロード/ストア命令を実行する部分。
|
まず、R 形式命令を実行するため、命令の「15~11 ビット」を書き込みレジスタ番号として、
また「20~16 ビット」および「25~21 ビット」を読み出しレジスタ番号として
分離する (演習第七回「R 形式」の章参照)。
また、「lw $t0, 4($t1)」の 4 を ALU に入力する際、
この 4 は 16 ビットなので (演習第七回「I 形式」の章参照)
32 ビットに符号拡張する必要がある (符号拡張は演習第八回補足参照)。
また、ALU への入力を選択するマルチプレクサが必要である。
例えば「add $t0, $t1, $t2」という命令であれば、
「レジスタ $t1, $t2 の内容」が入力となり、
「lw $t0, 4($t1)」という命令であれば
「レジスタ $t1 の内容と符号拡張された 4」が入力とならねばならない。
さらに、このマルチプレクサへの制御入力 ALUSrc (赤字) が必要である。
例えば、ALUSrc が 0 の時にレジスタからの入力が、 1 のときに
符号拡張からの入力が選ばれるようにする。
[残りのデータパス]
以上、命令フェッチ部と R 命令、ロード/ストア命令実行部のデータパスの構成をみた。
残りは教科書や授業資料を参考に、単一サイクルのデータパスの構成を理解して欲しい。
[制御]
さて、図 9 において、赤い文字で書かれた信号が
いくつか存在する。これらが、データパスをコントロールするための
制御入力 である。
例えば先程触れた ALUSrc であれば、
R 形式の命令であれば 0 を、ロード/ストア命令であれば 1 を
出力するよう制御信号を出さねばならない。
この ALUSrc の生成には、フェッチした命令の Op コードを元にする
(Op コードについては演習第七回参照)。
表 1:
制御信号 ALUSrc を判定するための真理値表。
命令名 |
Op5 |
Op4 |
Op3 |
Op2 |
Op1 |
Op0 |
ALUSrc |
R 形式 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
lw |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
sw |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
|
R 形式、およびロード/ストア命令の Op コードとそれに対する制御信号 ALUSrc を
表 1 に示した。
このような真理値表を元に、必要な制御信号を実現する論理回路を設計することが
できる。
(この表は R 形式とロード/ストア命令のみしか考慮しなかったが、
実際にはより多くの命令を判定しなければならない)
: 問題
: マイクロプロセッサ演習
: データパス構成の準備2~レジスタファイル
平成17年1月12日