我需要多少档位才能正确执行以下指令。我对自己的所作所为有点困惑,所以我在这里看专家的答案。
lw $1,0($2);
beq $1,$2,Label;
请注意,是否会发生分支的检查将在解码阶段完成。但是在这种情况下为 $1 的 beq 的源寄存器 rs 将在 lw 指令的回写阶段之后更新。那么我们是否需要将内存阶段的内存中的新数据转发到beq指令的解码阶段。
舞台是这样的:
IF:取指令;ID:指令解码 Ex:执行/ALU 阶段 MEM:从内存中读取数据 WB:将数据存储在目标寄存器中
这是我到目前为止所做的。
当 lw 处于 exec 阶段而 beq 处于解码阶段时,停顿条件变为真并创建了一个气泡。现在 lw 处于 Mem 阶段,并且由于气泡,beq 仍处于解码阶段,再次停止条件已变为真,并且发生了第二次停止。现在 lw 处于 WB(回写)并且 beq 处于解码阶段,但仍然是值1 美元的值将在 WB 阶段结束时更新,这最终意味着 beq 仍然可以使用错误的 1 美元值。