管道摊位中的决策

Decision making in Pipeline stalls

加载字指令后紧跟分支指令(32 个 mips)。

lw r2, (0)r1;-- I swap registers here as opposed to my previous question
Beq r2, r3, target;

生成执行图,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.

回复:您的更新:IF 不是指令,而是管道阶段。


顺便说一句,在您删除管线图之前,问题 很多 更清楚了。您应该将它们放回原处,并设置代码格式(select 文本并单击 {} 图标,或按 ctrl-k。)