The due date for this assignment is May 4. But you can get full credit if you submit it by the cutoff date of May 9.
IF/ID ID/EX EX/MEM MEM/WB 32 PC+4 1 RegWrite 1 RegWrite 1 RegWrite 32 IR 1 MemtoReg 1 MemtoReg 1 MemtoReg 1 Branch 1 Branch 32 ReadData 1 MemRead 1 MemRead 32 ALUresult 1 MemWrite 1 MemWrite 5 RegisterRd 1 ALUSrc 32 BranchTarget 2 ALUOp 1 Zero 32 PC+4 32 ALUresult 32 Reg[rs] 32 Reg[rt] 32 Reg[rt] 5 RegisterRd 32 SE(Imm) 5 rt 5 td 64 Total 146 Total 107 Total 71 Total
/* Do register forwarding if necessary. If the two previous * instructions specify the same destination register and it * matches either of the current instruction's source registers, * get the register value from the next stage of the pipeline. * That is, the instruction immediately preceding this one. If * just one matches, use its results. If neither matches, use * the contents of the register file. * * Note: Values for ForwardA and ForwardB are taken from Figure * 6.31, not the values used in class. */ par /* Determine values for ForwardA and ForwardB in parallel */ { if (EX.MEM.RegWrite && (EX/MEM.RegisterRd == ID/EX.Rs)) { ForwardA = 0b10; } else { if (MEM/WB.RegWrite && (MEM/WB.RegisterRd == ID/EX.Rs)) { ForwardA = 0b01; } else { ForwardA = 0b00; } } if (EX/MEM.RegWrite && (EX/MEM.RegisterRd == ID/EX.Rt)) { ForwardB = 0b 10; } else { if (MEM/WB.RegWrite && (MEM/WB.RegisterRd == ID/EX.Rt)) { ForwardB = 0b10; } else { ForwardB = 0b00; } } } }