【发布时间】:2012-12-15 02:48:53
【问题描述】:
我需要多少档位才能正确执行以下指令。我对自己的所作所为有点困惑,所以我来这里看看专家的答案。
lw $1,0($2);
beq $1,$2,Label;
请注意,是否会发生分支的检查将在解码阶段完成。但是在这种情况下为 $1 的 beq 的源寄存器 rs 将在 lw 指令的回写阶段之后更新。那么我们是否需要将内存阶段的Memory中的新数据转发到beq指令的Decoding阶段。
舞台是这样的:
IF:取指令; ID:指令解码 例如:执行/ALU 阶段 MEM:从内存中读取数据 WB:将数据存储在目标寄存器中
这是我到目前为止所做的。
当 lw 处于 exec 阶段而 beq 处于解码阶段时,停止条件变为 true 并创建气泡。现在 lw 处于 Mem 阶段,并且由于气泡,beq 仍处于解码阶段,再次停止条件已变为真,并且发生了第二次停止。现在 lw 处于 WB(回写)并且 beq 处于解码阶段,但仍然是值1 美元的值将在 WB 阶段结束时更新,这最终意味着 beq 仍然可以使用错误的 1 美元值。
【问题讨论】:
-
“检查分支是否会发生” - 你的意思是哪个检查。根据csc.gatech.edu/~copeland/3055-00/lab/lab-2/MIPS_pipes.JPEG 分支在EX中完成;并且新的 PC 被转发到 MEM 的 PC 寄存器。
-
由于分支延迟,您需要额外增加 1 个档位。所以你需要 7 个摊位。
-
怎么变成7档了??最多可以2个摊位