4

我需要多少档位才能正确执行以下指令。我对自己的所作所为有点困惑,所以我在这里看专家的答案。

lw $1,0($2);

beq $1,$2,标签;

请注意,是否会发生分支的检查将在解码阶段完成。rs但是在这种情况下,beq的源寄存器$1将在 lw 指令的回写阶段之后更新。那么我们是否需要将内存阶段的内存中的新数据转发到beq指令的解码阶段。

这是数据路径图:

在此处输入图像描述

4

1 回答 1

1

从内存中取出的值在流水线的回写阶段写入寄存器文件。对寄存器文件的写入发生在时钟周期的前半部分,而从寄存器文件的读取发生在时钟周期的后半部分。

因此,写入寄存器文件的值可以在与写入寄存器文件相同的时钟周期内读取。因此转发在这里是无效的

至于需要的停顿次数,则需要在流水线中插入两个气泡,因为在指令处于解码阶段lw时,该指令应该处于回写阶段。beq

我希望这回答了你的问题。

于 2013-01-24T09:45:51.823 回答