MIPS数据路径混乱

MIPS数据路径混乱,mips,pipeline,Mips,Pipeline,一直在学习mips数据路径,有几个问题 为什么会有写回阶段? -想法:如果没有增加更多延迟或延长时钟周期,似乎可以将写回阶段中的mux移动到Mem阶段,移除Mem/写回缓冲区,并完全摆脱写回阶段。为什么不是这样 关于分支预测和暂停的混淆。 -想法:如果add指令跟随beq指令进入pipline(beq在ID阶段,add在fetch阶段),但执行了分支,那么add指令如何转换为no op?(设置了哪些控制信号,如何设置?) 级间缓冲区何时更新? 想法:我认为它们会在时钟周期结束时更新,但无法验证这

一直在学习mips数据路径,有几个问题

  • 为什么会有写回阶段? -想法:如果没有增加更多延迟或延长时钟周期,似乎可以将写回阶段中的mux移动到Mem阶段,移除Mem/写回缓冲区,并完全摆脱写回阶段。为什么不是这样

  • 关于分支预测和暂停的混淆。 -想法:如果add指令跟随beq指令进入pipline(beq在ID阶段,add在fetch阶段),但执行了分支,那么add指令如何转换为no op?(设置了哪些控制信号,如何设置?)

  • 级间缓冲区何时更新? 想法:我认为它们会在时钟周期结束时更新,但无法验证这一点。此外,我还试图了解在失速期间到底发生了什么。当需要暂停时,IF/ID级间缓冲区是否锁定?如果是这样,这是如何做到的?然后,该指令是否从缓冲区中读取以确定ID阶段中应包含的指令

  • 谢谢你的帮助

    以下是管道的图片:

  • 写回阶段用于将结果写回寄存器。MEM/WB缓冲区用于保存前一阶段的任何数据。通过摆脱写回阶段,您将要做的基本上是扩展
    mem
    阶段。例如,在指令中,
    LW R1,8(R2)
    8(R2)
    寻址的内存位置的内容将存储在MEM/WB缓冲区中。通过将内容复制到缓冲区,MEM stage现在可以接受另一条
    LW
    指令,从而获得更多的ILP

  • @克雷格·埃斯蒂对此的回答是正确的。然而,即使你不做@Craig提到的交换,你也可以使用控制信号,并在if,ID阶段刷新以下指令

  • 我不确定是否有一个确切的答案,即何时更新级间缓冲区。在我看来,在时钟周期开始时,级间缓冲区中的数据是不相关的,而在时钟周期结束时是相关的。控制信号被用来控制管道中每一级发生的事情,这意味着它们可以用来判断该级是否不提取任何信号

  • 我想我能回答2。分支后面的inst位于“分支延迟槽”中,并且总是[在分支之前--执行与否]执行。因此,给定:
    beq$6,$7,label
    add$8,$9,$7
    sub$3,$4,$2
    label:mul
    。对于未执行,执行顺序为
    add,beq,sub,mul
    ,对于执行的分支,执行顺序为
    add,beq,mul
    。概念是,
    add
    必须由inst-fetch单元预取[因为它运行“一个先行”],那么为什么要“浪费”它呢?