プロセッサの追加設計 1(addiu 命令、sw命令)と動作実験 1-2

実験の概要

本実験では、プロセッサの追加設計と動作実験を行う。これにより、プロセッサの追加設計の手順とプロセッサの動作の理解を目指す。 本実験では、addiu 命令と sw 命令が未実装なプロセッサを例とし、追加設計を行い、両命令が正しく実行されるプロセッサを完成させる。また、その動作を実際に動作させて観察する。

プロセッサの追加設計 1

動作実験 1-1 の addui 命令と sw 命令が未実装なプロセッサについて、追加設計を行い、両命令を正しく実行するプロセッサを完成させなさい。 また、そのプロセッサと動作実験 1-1 の print_B.bin を FPGA 上に実現し、その動作を確認せよ。

本実験を下記の 1, 2, 3, 4, 5 の手順で行いなさい。
1. addiu 命令のためのメイン制御回路の追加設計
2. sw 命令のためのメイン制御回路の追加設計
3. 論理合成
4. FPGA を用いた回路実現
5. プロセッサの機能レベルシミュレーション

なお、本実験で追加設計を行う addiu 命令と sw 命令のアセンブリ言語は表 1 のとおりである。
表 1: addiu 命令と sw 命令のアセンブリ言語
区分 命令 意味
算術演算 addiu rt, rs, immediate rt = rs + immediate
データ転送 sw rt, address(rs) メモリ[rs + address] = rt

また、本実験で追加設計を行う addiu 命令と sw 命令の機械語は図 1 のとおりである。
addui
001001 rs rt immediate
I 形式 6 ビット 5 ビット 5 ビット 16 ビット
31  26 25  21 20  16 15      0
sw
101011 rs rt address
I 形式 6 ビット 5 ビット 5 ビット 16 ビット
31  26 25  21 20  16 15      0
図 1: addiu 命令と sw 命令の機械語

1. addiu 命令のためのメイン制御回路の追加設計

本実験では、動作実験 1-1 で動作を確認した addiu 命令と sw 命令が未実装なプロセッサについて、追加設計を行う。

本実験では、動作実験 1-1 で使用したプロセッサのメイン制御回路の Verilog HDL 記述 main_ctrl.v を使用する。 main_ctrl.v は、動作実験 1-1 でプロセッサの Verilog HDL 記述一式 mips_de2-115.tar.gz を展開した際に作成されたディレクトリ mips_de2-115 内のサブディレクトリ MIPS 内にある。

ソースファイル main_ctrl.v 中のコメント、追加設計 1 のヒント(1)〜(9)の周辺を、下記の 1, 2, 3, 4, 5, 6, 7, 8, 9 の手順で適切に変更せよ。
  1. 追加設計 1 のヒント(1):I 形式の命令 addiu の追加、命令コードの定義
  2. 追加設計 1 のヒント(2):I 形式の命令 addiu の追加、is_branch モジュールへの制御信号の記述
  3. 追加設計 1 のヒント(3):I 形式の命令 addiu の追加、ALU の入力ポート B へ流すデータを選択するセレクト信号の記述
  4. 追加設計 1 のヒント(4):I 形式の命令 addiu の追加、符号拡張を行う制御信号の記述
  5. 追加設計 1 のヒント(5):I 形式の命令 addiu の追加、加算を行う制御信号の記述
  6. 追加設計 1 のヒント(6):I 形式の命令 addiu の追加、レジスタファイルへの制御信号の記述
  7. 追加設計 1 のヒント(7):I 形式の命令 addiu の追加、レジスタファイルの方へ流すデータを選択するセレクト信号の記述
  8. 追加設計 1 のヒント(8):I 形式の命令 addiu の追加、レジスタファイルの write_idx へ流すデータを選択するセレクト信号の記述
  9. 追加設計 1 のヒント(9):I 形式の命令 addiu の追加、レジスタファイルの write_idx へ流すデータを選択するセレクト信号の記述

2. sw 命令のためのメイン制御回路の追加設計

本実験では、sw 命令についての追加設計を行う。

本実験では、動作実験 1-1 で使用したプロセッサのメイン制御回路の Verilog HDL 記述 main_ctrl.v を使用する。 main_ctrl.v は、動作実験 1-1 でプロセッサの Verilog HDL 記述一式 mips_de2-115.tar.gz を展開した際に作成されたディレクトリ mips_de2-115 内のサブディレクトリ MIPS 内にある。

ソースファイル main_ctrl.v 中のコメント、追加設計 1 のヒント(10)〜(16)の周辺を、下記の 1, 2, 3, 4, 5, 6, 7 の手順で適切に変更せよ。
  1. 追加設計 1 のヒント(10):I 形式の命令 sw の追加、命令コードの定義
  2. 追加設計 1 のヒント(11):I 形式の命令 sw の追加、RAM への制御信号の記述
  3. 追加設計 1 のヒント(12):I 形式の命令 sw の追加、is_branch モジュールへの制御信号の記述
  4. 追加設計 1 のヒント(13):I 形式の命令 sw の追加、ALU の入力ポート B へ流すデータを選択するセレクト信号の記述
  5. 追加設計 1 のヒント(14):I 形式の命令 sw の追加、符号拡張を行う制御信号の記述
  6. 追加設計 1 のヒント(15):I 形式の命令 sw の追加、加算を行う制御信号の記述
  7. 追加設計 1 のヒント(16):I 形式の命令 sw の追加、レジスタファイルへの制御信号の記述

3. 論理合成

本実験では、追加設計後のプロセッサならびに命令メモリ、その他周辺回路の論理合成を行う。

論理合成には、追加設計後の main_ctrl.v と、動作実験 1-1 で使用したその他プロセッサの Verilog HDL 記述一式、print_B.bin から生成した メモリ・イメージファイル rom8x1024_DE2.mif を使用する。

追加設計後の main_ctrl.v を、プロセッサなど一式のディレクトリ mips_de2-115 内の、サブディレクトリ MIPS 内に置く。

更に、 ディレクトリ mips_de2-115 に cd し、print_B.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 を用いた回路実現

本実験では、追加設計後のプロセッサの実際の動作を観察し、動作実験 1-1 で観察した結果との比較を行う。 本実験には、論理合成により生成された プロセッサなど回路一式のストリーム・アウト・ファイル DE2_115_Default.sof を使用する。 DE2_115_Default.sof を quartus_pgm を用いて DE2-115 ボード上の FPGA にダウンロードし、動作させよ。

プロセッサが実行するマシン・コード print_B.bin はディスプレイ下部に文字 'B' を 1 つ表示するプログラムである。 key3 を連打してプロセッサにクロックパルスを送り、プロセッサにPC=0x0000 番地から PC=0x0048 番地までの命令を実行させ、ディスプレイ下部に文字 'B' が 1 つ表示されるかどうかを確認せよ。 文字 'B' が 1 つ表示されるはずである。

また、 動作実験 1-1 で確認された、動作実験 1-1 の 2 の 1, 2, 3, 4, 5 で予想した結果と異なる動作について、その動作に変化がないかどうかを確認せよ。 動作実験 1-1 の 2 の 1, 2, 3, 4, 5 で予想した結果と同じ動作になったはずである。

5. プロセッサの機能レベルシミュレーション

本実験では、追加設計後のプロセッサの動作を機能レベルシミュレーションにより確認する。

機能レベルシミュレーションには、 動作実験 1-1 で print_B.bin から生成した機能レベルシミュレーション用の命令メモリの Verilog HDL 記述 rom8x1024_sim.v と、追加設計後のプロセッサの Verilog HDL 記述一式を使用する。

機能レベルシミュレーションを行う前に、プロセッサのトップレベル記述 mips_de2-115/MIPS/cpu.v をシミュレーション用の記述に変更し、機能レベルシミュレーション用のソースにしておく必要がある。 下記の 1, 2, 3, 4, 5, 6 の手順で、ソース mips_de2-115/MIPS/cpu.v の記述を変更せよ。
  1. cpu.v の 70 行目周辺、動作実験用のソースの include 文をコメントアウトする。
  2. cpu.v の 65 行目周辺、機能レベルシミュレーション用のソースの include を有効にする。
  3. cpu.v の 320 行目周辺、動作実験用の ROM の実体化を数行コメントアウトする。
  4. cpu.v の 315 行目周辺、機能レベルシミュレーション用の ROM の実体化を有効にする。
  5. cpu.v の 340 行目周辺、動作実験用の RAM の実体化を数行コメントアウトする。
  6. cpu.v の 335 行目周辺、機能レベルシミュレーション用の RAM の実体化を有効にする。

ソース mips_de2-115/MIPS/cpu.v の変更後、rom8x1024_sim.v をディレクトリ mips_de2-115/MIPS にコピーし、ディレクトリ mips_de2-115/MIPS に cd して、指導書 3.2 節を参考に機能レベルシミュレーションを行う。 機能レベルシミュレーション後、次の実験課題で再び論理合成が行えるように、ソース mips_de2-115/MIPS/cpu.v の記述を元にもどしておく。

参考書


中村一博