CPU中的时序电路
TODO
单周期处理器的设计
王道2021《组原》P206
单指令周期:对所有指令都选用相同的执行时间来完成,称为单指令周期方案。此时每条指令都在固定的时钟周期内完成,指令之间串行执行,即下一条指令只能在前一条指令执行结束后才能启动。因此,指令周期取决于执行时间最长的指令的执行时间。对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。
流水线处理器的基本原理
王道2021《组原》P206
流水线方案:指令之间可以并行执行的方案,称为流水线方案,其追求的目标是力争在每个时钟脉冲周期完成一条指令的执行过程(只在理想情况下才能达到该效果)。这种方案通过在每个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。
Data Hazard的处理
《CS-APP》P295 流水线冒险
将流水线技术引入一个带反馈的系统,当相邻指令间存在相关时会导致出现问题。 这些相关有两种形式:
- 数据相关:下一条指令会用到这一条指令计算出的结果
- 控制相关:一条指令要确定下一条指令的位置。
这些相关可能会导致流水线产生计算错误,称为冒险(hazard), 冒险分为两类:
- 数据冒险(data hazard)
- 控制冒险(control hazard)
解决数据冒险的方式:
- 用暂停来避免数据冒险:暂停(stalling) 是避免冒险的一种常用技术,暂停时,处理器会停止流水线中一条或多条指令,直到冒险条件不在满足。让一条指令停顿在译码阶段,直到产生它的源操作数的指令通过了写回阶段,这样我们的处理器就能避免数据冒险。
- 用转发来避免数据冒险:将要写的值传入到流水线寄存器作为源操作数。这样就能避免暂停,这种将结果值直接从一个流水线阶段传到较早阶段的技术称为数据转发(data forwarding) 。
流水线设计中的其他问题
《CS-APP》P284 流水线的局限性
- 不一致的划分
- 流水线过深,收益反而下降