流水线装配

时间:2012-12-30 18:07:45

标签: assembly mips

我需要多少档才能正确执行以下说明。我对自己的所作所为感到有些困惑,所以我在这里看专家的答案。

lw $1,0($2);

beq $1,$2,Label;

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

舞台就像这样:

enter image description here

IF:取指令; ID:指令解码 例如:执行/ ALU阶段 MEM:从内存中读取数据 WB:将数据存储在目标寄存器中

这是我到目前为止所做的。

当lw处于exec阶段并且beq处于解码阶段时,停止条件变为真并且产生气泡。现在lw处于Mem阶段,beq仍处于解码阶段,由于气泡,停止状态再次变为真,第二档已经发生。现在lw处于WB(写回)并且beq处于解码阶段但仍然是值1美元将在WB阶段结束时更新,这最终意味着beq仍将使用错误的$ 1值。

1 个答案:

答案 0 :(得分:2)

看起来你需要第三个停顿来允许寄存器在解码之前写回寄存器文件,或者将数据从回写阶段转发到解码阶段。无论哪种方式,如果要写入的寄存器等于rs,都应执行此操作。

你似乎需要太多的停顿,因为在解码阶段早期检测到分支,这很好,因为它可以节省获取无论如何都要刷新的不必要的指令,但是你必须有适当的危险检测。 / p>