プロセッサの追加設計 2(j 命令)と動作実験 2-2
2013/10/17, 第1.3版
実験の概要
本実験では、プロセッサの追加設計と動作実験を行う。これにより、プロセッサの追加設計の手順とプロセッサの動作の理解を目指す。 本実験では、j 命令が未実装なプロセッサを例とし、追加設計を行い、両命令が正しく実行されるプロセッサを完成させる。また、その動作を実際に動作させて観察する。
追加設計 1
動作実験 2-1 の j 命令が未実装なプロセッサについて、追加設計を行い、両命令を正しく実行するプロセッサを完成させなさい。 また、そのプロセッサと動作実験 2-1 の print_B_while.bin を FPGA 上に実現し、その動作を確認せよ。
本実験を下記の 1, 2, 3, 4 の手順で行いなさい。
1. j 命令のためのジャンプ・セレクト・モジュールの追加設計
2. j 命令のためのメイン制御回路の追加設計
3. 論理合成
4. FPGA を用いた回路実現
なお、本実験で追加設計を行う j 命令のアセンブリ言語は表 1 のとおりである。
表 1: j 命令のアセンブリ言語
区分
命令
意味
ジャンプ
j address
PC = address * 4
また、本実験で追加設計を行う j 命令の機械語は図 1 のとおりである。
j
000010
address
J 形式
6 ビット
26 ビット
31 26
25 0
図 1: j 命令の機械語
1. j 命令のためのジャンプ・セレクト・モジュールの追加設計
本実験では、動作実験 2-1 で動作を確認した j 命令が未実装なプロセッサについて、追加設計を行う。
本実験では、プロセッサの最上位階層の Verilog HDL 記述 cpu.vを使用する。 cpu.v は、ディレクトリ mips_de2-115 内のサブディレクトリ MIPS 内にある。
ソースファイル cpu.v 中のコメント、追加設計 2 のヒント(1)〜(4)の周辺を、下記の 1, 2, 3, 4 の手順で適切に変更せよ。
j 命令は、「命令の address フィールドに直接書かれている値」×4を PC に格納する命令である。
j 命令のためのジャンプ・セレクト・モジュールを
ブロック図
に示す。ブロック図中の破線で囲まれた、未実装、追加設計 2 と書かれた部分が j 命令のためのジャンプ・セレクト・モジュールである。 MUX {jp_sel} は、2 入力 1 出力の Multiplexer, 選択回路であり、その 2 つの入力信号のうち、0 のラベルが付けられている方が、選択信号 jp が 0 の時に出力される信号である。 以下では、このジャンプ・セレクト・モジュールをプロセッサの最上位階層の記述に追加する。
追加設計 2 のヒント(1):jp_sel の入出力用ワイヤの宣言
ブロック図
のワイヤ jp_sel_d0, jp_sel_d1, jp_sel_s, jp_sel_y に対応する、同名のワイヤを宣言する。
追加設計 2 のヒント(2):32-bit, 32-bit 入力, 32-bit 出力のセレクタを実体化
ブロック図
のモジュール jp_sel に対応する、同名のモジュールを実体化する。
追加設計 2 のヒント(3):jp_sel の出力 jp_sel_y の pc_next への接続
モジュール jp_sel の出力 jp_sel_y を
ブロック図
のように pc_next に接続する。
古い接続 assign pc_next = pc_sel_y; は消去する。
追加設計 2 のヒント(4):jp_sel の入力 jp_sel_d0, jp_sel_d1, jp_sel_s の接続
モジュール jp_sel の入力 jp_sel_d0, jp_sel_d1, jp_sel_s を、それぞれ
ブロック図
のように pc_sel_y, sh_j_y, jp に接続する。
2. j 命令のためのメイン制御回路の追加設計
本実験では、動作実験 2-1 で動作を確認した j 命令が未実装なプロセッサについて、追加設計を行う。
本実験では、動作実験 2-1 で使用したプロセッサのメイン制御回路の Verilog HDL 記述 main_ctrl.v を使用する。 main_ctrl.v は、ディレクトリ mips_de2-115 内のサブディレクトリ MIPS 内にある。
ソースファイル main_ctrl.v 中のコメント、追加設計 2 のヒント(1)〜(3)の周辺を、下記の 1, 2, 3 の手順で適切に変更せよ。
j 命令は、「命令の address フィールドに直接書かれている値」×4を PC に格納する命令である。
j 命令実行時のプロセッサ内の信号の流れを
ブロック図
に示す。ブロック図中の緑の線で書かれた信号が j 命令の実行に関わっている。以下では、信号の流れがブロック図のようになるように、ブロック図中の赤で書かれた制御信号を適切に設定する。
追加設計 2 のヒント(1):J 形式の命令 j の追加、命令コードの定義
j の命令操作コードが 6'b000010 であることから、
記述「 」を「 」に変更する。
追加設計 2 のヒント(2):J 形式の命令 j の追加、jp_sel モジュールへの制御信号の記述
jp_sel はジャンプ用のモジュールである(
ブロック図
、参考書[3]の pp.295-299, p.287(または、参考書[2]の pp.280-284, p.271))。
j 命令はジャンプ命令なので、jp_sel への制御信号としては 1'b1 が適切である(ソース中の jp_sel に関するコメント (ヒントの数行上あたり)「// jump, J, JAL 用 // MUX, jp_sel モジュールのセレクト信号 // jp == 1'b0: jump しない場合の、次の PC の値を選択 // jp == 1'b1: jump する場合の、次の PC の値を選択」より)。
記述「 」を「 」に変更する。
追加設計 2 のヒント(3):J 形式の命令 j の追加、レジスタファイルへの制御信号の記述
reg_write_enable はレジスタファイル registers の書き込み制御信号である(
ブロック図
、参考書[3]の pp.290-299(または、参考書[2]の pp.274-284))。
j 命令は演算結果をレジスタに書き込む命令ではないなので、制御信号 reg_write_enable の値として 1'b0 が適切である(ソース中の reg_write_enable に関するコメント (ヒントの数行上あたり)「// reg_write_enable // レジスタファイル registers の書き込み制御信号 // reg_write_enable == 1'b0:書き込みを行わない // reg_write_enable == 1'b1:書き込みを行う」より)。
記述「 」を「 」に変更する。
3. 論理合成
本実験では、追加設計後のプロセッサならびに命令メモリ、その他周辺回路の論理合成を行う。
論理合成には、追加設計後の main_ctrl.v と cpu.v、動作実験 2-1 で使用したその他プロセッサの Verilog HDL 記述一式、print_B_while.bin から生成した メモリ・イメージファイル rom8x1024_DE2.mif を使用する。
追加設計後の main_ctrl.v と cpu.v を、プロセッサなど一式のディレクトリ mips_de2-115 内の、サブディレクトリ MIPS 内に置く。
更に、
ディレクトリ mips_de2-115 に cd し、pring_B_while.bin の rom8x1024_DE2.mif がそこにあるのを確認して、図 2 のように論理合成を行う。
quartus_sh --flow compile DE2_115_Default
図 2: quartus_sh を使ったプロセッサの論理合成
なお、論理合成には計算機の性能により 5 分から 20 分程度の時間がかかる。 論理合成が完了すると、ディレクトリ mips_de2-115 内に FPGA にダウンロード可能なプロセッサ等の回路一式のストリーム・アウト・ファイル DE2_115_Default.sof が生成される。
4. FPGA を用いた回路実現
本実験では、追加設計後のプロセッサの実際の動作を観察し、動作実験 2-1 で観察した結果との比較を行う。 本実験には、論理合成により生成された プロセッサなど回路一式のストリーム・アウト・ファイル DE2_115_Default.sof を使用する。
DE2_115_Default.sof を quartus_pgm を用いて DE2-115 ボード上の FPGA にダウンロードし、動作させよ。
プロセッサが実行するマシン・コード print_B_while.bin はディスプレイ下部に文字 'B' を 繰り返し表示するプログラムである。
key3 を連打してプロセッサにクロックパルスを送り、プロセッサにPC=0x0000 番地から 25 個程度の命令を実行させ、ディスプレイ下部に文字 'B' が繰り返し表示されるかどうかを確認せよ。
文字 'B' が繰り返し表示されるはずである。
また、
動作実験 2-1 で確認された、動作実験 2-1 の 2 の 1 で予想した結果と異なる動作について、その動作に変化がないかどうかを確認せよ。
動作実験 2-1 の 2 の 1 で予想した結果と同じ動作になったはずである。
参考書
[1] パターソン&ヘネシー著(成田光彰訳):「コンピュータの構成と設計(上巻)第3版」, 日経BP社
[2] パターソン&ヘネシー著(成田光彰訳):「コンピュータの構成と設計(下巻)第3版」, 日経BP社
[3] パターソン&ヘネシー著(成田光彰訳):「コンピュータの構成と設計(上巻)第4版」, 日経BP社
中村一博