Mips 管道失速的决策

Mips 管道失速的决策,mips,pipeline,cpu-architecture,risc,Mips,Pipeline,Cpu Architecture,Risc,加载字指令后面紧跟着一条分支指令(mips 32) 要生成执行图,IF ID EX MEM WB。现在,BEQ IF ID EX MEM WB IF * * ID EX or IF ID EX MEM WB * * IF ID EX 我只是想知道这两种方法是否都可行。此外,此类暂停涉及哪些硬件操作?在您显示的简单管道中,lw在获取下一个insn时仍在解码。管道无法判断它们是否冲突,直到它们都被解码 仔细想想你的第二个暂停在做什么:在当前指令被解码之前,CPU延迟

加载字指令后面紧跟着一条分支指令(mips 32)

要生成执行图,
IF ID EX MEM WB
。现在,
BEQ

IF ID EX MEM WB
   IF *  *   ID EX

or 

IF ID EX MEM WB
   *  *  IF  ID  EX

我只是想知道这两种方法是否都可行。此外,此类暂停涉及哪些硬件操作?

在您显示的简单管道中,
lw
在获取下一个insn时仍在解码。管道无法判断它们是否冲突,直到它们都被解码

仔细想想你的第二个暂停在做什么:在当前指令被解码之前,CPU延迟获取下一条指令。此时,它不知道这两条指令是什么

IF ID EX MEM WB     lw
   *  IF ID  EX     beq  // lw isn't even decoded yet, and neither is this one, so no way to tell if they conflict.

re:您的更新:
如果
不是指令,则是管道阶段



顺便说一句,在删除管道图之前,这个问题要清楚得多。您应该使用代码格式(选择文本并单击{}图标或按ctrl-k)将它们放回原处。

这应该表示MIPS 2201指令集吗?谢谢,我意识到我在问题中犯了不少错误。获取指令后,管道不应该告诉他们冲突吗?@ZacUwyoH:在两条指令都被解码之前,它什么也说不出来。如果第二条指令是
添加$r10、$r11、$r12
,该怎么办?直到第二条指令被解码后才知道。因此,在您当前的编辑中,问题中的两个图表都是错误的。ID后的两个暂停会起作用吗?或者解决方案应该是什么?@ZacUwyoH:必须等待的是
beq
的执行阶段,必须等待加载的结果。如果没有旁路转发,它还必须等待加载的
WB
阶段,其中结果提交到寄存器文件。在这种情况下,ID之后但EX之前的两个暂停听起来是正确的。@ZacUwyoH:如果这回答了您的问题,您可以将其标记为接受答案,并在投票箭头下加上复选框。
IF ID EX MEM WB     lw
   *  IF ID  EX     beq  // lw isn't even decoded yet, and neither is this one, so no way to tell if they conflict.