加载字指令后面紧跟着(mips 32的)分支指令。
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.
re:您的更新:IF
不是指令,它是一个流水线阶段。
顺便说一句,在删除管道图之前,问题已经清楚得多了。您应该将它们放回中,并设置代码格式(选择文本并单击{}图标,或点击ctrl-k)