我需要多少档才能正确执行以下说明。我对自己的所作所为感到有些困惑,所以我在这里看专家的答案。
lw $ 1,0($ 2);
beq $ 1,$ 2,Label;
请注意,检查分支是否发生将在解码阶段完成。但是在这种情况下,beq的源寄存器rs
将在lw指令的回写阶段之后更新$1
。那么我们是否需要将新数据从存储器存储器阶段转发到beq指令的解码阶段。
以下是数据路径图:
答案 0 :(得分:1)
从内存中获取的值将写入管道回写阶段的寄存器文件中。寄存器文件的写入发生在时钟周期的前半部分,而寄存器文件的读取发生在时钟周期的后半部分。
因此,写入寄存器文件的值可以在与写入寄存器文件相同的时钟周期内读取。因此转发在这里无效。
至于所需的停顿数量,您需要在管道中插入两个气泡,因为当lw
指令处于解码阶段时,beq
指令应处于写回阶段。
我希望这能回答你的问题。