【发布时间】:2012-12-15 01:22:16
【问题描述】:
我需要多少档位才能正确执行以下指令。我对自己的所作所为有点困惑,所以我来这里看看专家的答案。
lw $1,0($2);
beq $1,$2,标签;
请注意,是否会发生分支的检查将在解码阶段完成。但是在这种情况下,beq 的源寄存器rs 即$1 将在lw 指令的回写阶段之后更新。那么我们是否需要将内存阶段的Memory中的新数据转发到beq指令的Decoding阶段。
这是数据路径图:
【问题讨论】:
我需要多少档位才能正确执行以下指令。我对自己的所作所为有点困惑,所以我来这里看看专家的答案。
lw $1,0($2);
beq $1,$2,标签;
请注意,是否会发生分支的检查将在解码阶段完成。但是在这种情况下,beq 的源寄存器rs 即$1 将在lw 指令的回写阶段之后更新。那么我们是否需要将内存阶段的Memory中的新数据转发到beq指令的Decoding阶段。
这是数据路径图:
【问题讨论】:
从内存中取出的值在流水线的回写阶段写入寄存器文件。对寄存器文件的写入发生在时钟周期的前半部分,而从寄存器文件的读取发生在时钟周期的后半部分。
因此,写入寄存器文件的值可以在与写入寄存器文件相同的时钟周期内读取。因此这里转发无效。
至于需要的停顿次数,需要在管道中插入两个气泡,因为beq指令在解码阶段,lw指令应该在回写阶段。
我希望这能回答你的问题。
【讨论】: