# 4.4.2 流水线操作的详细说明
为了更好地理解流水线是怎样工作的,让我们来详细看看流水线计算的时序和操作。图 4-34 给出了前面我们看到过的三阶段流水线(图 4-33)的流水线图。就像流水线图上方指明的那样,流水线阶段之间的指令转移是由时钟信号来控制的。每隔 120ps,信号从 0 上升至 1,开始下一组流水线阶段的计算。

图 4-34 三阶段流水线的时序。时钟信号的上升沿控制指令从一个流水线阶段移动到下一个阶段
图 4-35 跟踪了时刻 240~360 之间的电路活动,指令 I1 经过阶段 C,I2 经过阶段 B,而 I3 经过阶段 A。就在时刻 240(点 1)时钟上升之前,阶段 A 中计算的指令 I2 的值已经到达第一个流水线寄存器的输入,但是该寄存器的状态和输出还保持为指令 I1 在阶段 A 中计算的值。指令 I1 在阶段 B 中计算的值已经到达第二个流水线寄存器的输入。当时钟上升时,这些输入被加载到流水线寄存器中,成为寄存器的输出(点 2)。另外,阶段 A 的输入被设置成发起指令 I3 的计算。然后信号传播通过各个阶段的组合逻辑(点 3)。就像图中点 3 处的曲线化的波阵面(curved wavefront)表明的那样,信号可能以不同的速率通过各个不同的部分。在时刻 360 之前,结果值到达流水线寄存器的输入(点 4)。当时刻 360 时钟上升时,各条指令会前进经过一个流水线阶段。

图 4-35 流水线操作的一个时钟周期。在时刻 240(点 1)时钟上升之前,指令 I1 和 I2 已经完成了阶段 B 和 A。在时钟上升后,这些指令开始传送到阶段 C 和 B,而指令 I3 开始经过阶段 A(点 2 和 3)。就在时钟开始再次上升之前,这些指令的结果就会传到流水线寄存器的输入(点 4)
从这个对流水线操作详细的描述中,我们可以看到减缓时钟不会影响流水线的行为。信号传播到流水线寄存器的输入,但是直到时钟上升时才会改变寄存器的状态。另一方面,如果时钟运行得太快,就会有灾难性的后果。值可能会来不及通过组合逻辑,因此当时钟上升时,寄存器的输入还不是合法的值。
根据对 SEQ 处理器时序的讨论(4.3.3 节),我们看到这种在组合逻辑块之间采用时钟寄存器的简单机制,足够控制流水线中的指令流。随着时钟周而复始地上升和下降,不同的指令就会通过流水线的各个阶段,不会相互干扰。