2016-11-02 122 views
2

一直在学习关于mips数据路径并且有几个问题。MIPS数据路径混淆

  1. 为什么会有回写阶段?如果没有增加更多延迟或使时钟周期更长,似乎可以将写回阶段中的多路复用器移入Mem阶段,并移除Mem/Writeback缓冲区并完全摆脱写回阶段。为什么不是这种情况?

  2. 关于分支预测和停顿的困惑。 - 思考:如果一个add指令跟随beq指令进入管道(在ID阶段beq,加入获取阶段),但是分支被采用,那么add指令如何转换为no-op? (设置了什么控制信号,怎么办?)

  3. 何时更新了级间缓冲区? 想法:我认为他们在时钟周期结束时更新,但一直无法验证这一点。此外,我正试图了解在摊位期间究竟发生了什么。当需要停顿时,IF/ID级间缓冲区是否被锁定?如果是的话,这是如何做到的?然后,指令是否从缓冲区中读取,以确定ID阶段应该有哪些指令?

感谢所有帮助

这里的管道的图片:

MIPS DATAPATH

+2

我想我可以回答#2。分支后面的inst在“分支延迟槽”中,并且在分支被执行或不执行时执行_always_。所以,考虑到:“6美元,7美元,标签”,“添加8美元,9美元,7美元,”3美元,4美元,2美元,“标签:MUL”。对于采取的分支,执行顺序可以是'add,beq,sub,mul'或者'add,beq,mul'。这个概念是'add'_had_被inst获取单元预取(因为它运行“一个”),所以为什么要“浪费”呢? –

回答

0
  1. 回写阶段是编写的结果返回给寄存器。 MEM/WB缓冲器用于保存前一阶段的任何数据。通过摆脱回写阶段,你将会做的事情基本上延伸了舞台。例如,在类似的指令中, LW R1, 8(R2)8(R2)寻址的存储器位置的内容将被存储在MEM/WB缓冲器中。通过将内容复制到缓冲区,MEM阶段现在可以接受另一个LW指令,因此更多的ILP。

  2. @Craig Estey已经为此回答正确。然而,即使你不做交换@Craig已经提到过,如果IF,ID阶段用于以下指令,你总是可以使用控制信号和刷新东西。

  3. 我不确定是否有一个准确的答案,何时更新一个阶段缓冲区。我看到它的方式是,在时钟周期开始时,级间缓冲区中的数据不相关,并且在时钟周期结束时它是相关的。控制信号被用来控制流水线每个阶段发生了什么,这意味着它们可以用来告诉IF阶段不要取任何一个。