带和不带转发的 MIPS 流水线

MIPS Pipeline with and without Forwarding

我正在查看以下 MIPS 代码中有和没有转发的停顿数。我试图更好地了解数据路径中何时需要数据。

lw , 0()
sw , 24()

通过转发,我了解到从加载字指令进入寄存器 10 的值在内存阶段之后可用,而存储字指令在其内存阶段之前需要该值。因此,零档。

F D E M W
  F D E M W

如果没有转发,直到寄存器10在回写阶段的前半个时钟周期被写入时,寄存器10才会具有加载字指令的正确值。

存储字指令在解码阶段的后半个时钟周期需要寄存器10的正确值是否正确,产生以下两个停顿:

F D E M W
  F F F D E M W

或者是存储字指令在执行阶段需要它来产生这两个停顿序列:

F D E M W
  F D D D E M W

我想我想要一种在脑海中表达的方式,以便更好地理解。

如果没有转发,加载字指令将在写回阶段的第一个半时钟周期后更新寄存器 10。存储字指令需要在解码阶段的后半个时钟周期读取寄存器 10 中的值,从而在解码阶段产生以下 2 个停顿:

F D E M W
  F D D D E M W