以下の各課題プログラムを作成し、レポートせよ。
※質問・疑問は随時受け付ける。
レポート提出期限 2014年8月11日(月)
レポートは
学科授業支援システム CoursePowerで提出すること。
mipsyをベースとして、 6段パイプライン構成とすること。
基本的なパイプライン構成図は以下の図に示す。
(非パイプラインシミュレータでは、このパイプラインの各ステージを
命令サイクルの1サイクルごとに逐次的に処理している)
各ステージでの主な処理内容は以下の通りである。
A Simple Implementation of MIPS Pipeline (w/ 6-stage) [IF stage (Instruction fetch First)] request_read_to_cache(PC); NPC = PC + 4; [IS stage (Instruction fetch Second)] IR = reply_read_from_cache(PC); [RR stage (Register file Read)] A = Regs[rs(IR)]; B = Regs[rt(IR)]; Imm = imm(IR); // sign-extended immediate field of IR UImm = uimm(IR); // immediate field of IR [EX stage (EXecution)] Memory references: ALUOutput = A + Imm; request_read_to_cache(ALUOutput); or request_write_to_cache(ALUOutput, B); Register-Register ALU Instruction: ALUOutput = A func B; Register-Immediate ALU Instruction: ALUOutput = A func Imm; Branch: ALUOutput = NPC + (Imm << 2); Cond = (A == 0); [MA stage (Memroy Access)] Memory references (Load instruction): LMD = reply_read_from_cache(ALUOutput); Branch: if (Cond) PC = ALUOutput; [WB stage (Write Back)] Memory references (Load instruction): Regs[rt] = LMD; Register-Register ALU Instruction: Regs[rd] = ALUOutput; Register-Immediate ALU Instruction: Regs[rt] = ALUOutput;
これをベースとして、データハザードを緩和するためのデータフォーワーディング
機能や、制御ハザードを緩和するための分岐先算出用の加算器・分岐条件判定器などを
追加すること。
紙面にて配布した資料
(Appendix-A Pipelining: Basic and Intermediate Conceptsの一部抜粋)を
参考にするとよい。
(ただし、配布資料では 5段パイプライン構成を前提としているので、当然細部は異なる)
命令パイプラインの動作を表示する機能を付け、
実際にプログラムを動作させたときの様子を表示させよ。
(いろいろ表示を工夫してパイプラインの動作が見やすくするとよい)
ただし、MIPSの標準的な(整数)乗算命令はこのパイプライン化に向かないため、
以下の 3オペランドの乗算命令を追加し、この命令を実行するときのみパイプライン
処理するものとする。
opcode (6) | rs (5) | rt (5) | rd (5) | shmnt (5) | funct (6) |
0x1c | 0〜31 | 0〜31 | 0〜31 | 0 | 0x02 |
この命令は、rsで指定したレジスタの値と rtで指定したレジスタの値を乗じ、結果の積の
下位32ビットを rdで指定したレジスタに格納する。
(積の上位32ビットは捨てられる)
この命令を使うときは以下のように記述した上で
アセンブルする際に、"-mips32r2"オプションを付ける。 (付け忘れると、 mult命令+mflo命令の2命令に変換されるので注意)/* file.S */ li $4,2 li $5,3 mul $2,$4,$5 /* レジスタ4番と5番の値を乗じて2番に格納 */
mipsel-elf-gcc -mips32r2 -O file.S -c mipsel-elf-ld file.o -Tmipsy.ld -o file.bin