4.10 流水线硬件结构

从SEQ到流水线

SEQ 处理器在每个周期完成一条指令的全部五个阶段。要实现流水线,需要对硬件结构做出两个关键更改。

SEQ+:重排序PC更新

SEQ+ 是向流水线迈出的第一步。它将 PC 更新逻辑从周期末尾移到周期最前面,使得在同一个周期的开始就能取下一条指令的地址。具体做法是用一个”PC选择”多路器,在周期开始时就确定下一个 PC 值。

SEQ+ 仍然不是真正的流水线——它仍是顺序执行,但这种重排为后续的流水线寄存器插入提供了基础。

PIPE-:插入流水线寄存器

PIPE- 在 SEQ+ 的基础上,在每两个阶段之间插入流水线寄存器(Pipeline Register):

取指 $→ [F$寄存器$] →$译码 $→ [D$寄存器$] →$执行 $→ [E$寄存器$] →$访存 $→ [M$寄存器$] →$写回

每个流水线寄存器保存前一阶段在周期内计算出的所有中间结果,供下一周期使用:

  • F寄存器(取指/译码之间):PC 值、指令字节的预测结果
  • D寄存器(译码/执行之间):icode、ifun、valC、valA、valB、dstE、dstM、srcA、srcB
  • E寄存器(执行/访存之间):icode、ifun、valC、valA、valB、dstE、dstM、srcA、srcB
  • M寄存器(访存/写回之间):icode、valE、valA、dstE、dstM、valM

反馈路径

流水线处理器面临的核心挑战是反馈路径(Feedback Paths):

  • PC预测:取指阶段需要知道下一个 PC,但真正的下一条指令地址取决于当前仍在流水线中的指令
  • 数据转发:写回阶段的结果可能被还在前段的指令需要,需要旁路路径

这些反馈路径使流水线控制逻辑变得复杂,但它们对正确性和性能至关重要。

相关笔记

链接到