pipeline流水线设计是一种典型的 面积换性能的设计。一方面通过对长功能路径的合理划分,在同一时间内同时并行多个该功能请求,大大提高了某个功能的吞吐率;另一方面由于长功能路径被切割成短路径,可以达到更高的工作频率,如果不需要提高工作频率,多出来的提频空间可以用于降压降功耗。
在此流水线中一条指令的生命周期分为:
MIPS五级流水线结构图
MIPS五级流水线运行图
上述的五级流水线为例,由于前一条指令在完成了“取指”进入“译码”阶段后,下一条指令马上就可以进入“取指”阶段,依次类推,如果流水线没有停顿,理论上可以取得每个时钟周期都完成一条指令的性能。
正面意义:在两级寄存器(每一级流水线由寄存器组成)之间的硬件逻辑越少,则意味能够运行到更高的主频。因此现代的处理器流水线极深主要是由于处理器追求高频的指标所驱使,高端的ARM Cortex-A系列由于有十几级的流水线,所以能够运行到高达2GHz的主频,而Intel的x86处理器甚至采用几十级的流水线深度将主频推到3-4GHz的高度。主频越高也意味着流水线的吞吐率越高从而性能越高。
反面意义:首先更多的流水线级数要消耗更多的寄存器,也意味着更多的面积开销。其次同时流水线越深,由于每一级流水线需要进行握手,流水线最后一级的反压信号可能会一直串扰到最前一级造成严重的时序问题,需要使用一些比较高级的技巧来解决此类反压时序问题。最后在流水线的取指令阶段无法得知条件跳转的结果,因此只能进行预测,到了流水线的末端才能够通过实际的运算得知该分支是真的该跳还是不该跳,如果发现真实的结果与之前预测的结果不相符,则意味着预测失败,需要将所有预取的错误指令流全部丢弃掉,而重新取正确的指令流,这个过程叫做流水线冲刷(Pipeline Flush)。
解决反压信号串扰的问题,可以采用取消反压信号,加入乒乓缓存,加入前向旁路缓存,基本都是以面积换取性能的方法。
深处种菱浅种稻,不深不浅种荷花,流水线的不同深度皆有其优缺点,需要根据不同的应用背景合理地进行选择。
使用流水线一般是时序比较紧张,对电路工作频率较高的时候。
一般来说,划分流水线的考虑因素如下,
简单的流水线实例参见参考文献二,pipe line 分割了关键路径延时,提高了整体设计的工作频率 25.6%。
【1】芯片设计小经验–流水线设计(微信公众号:数字IC自修室)
【4】为什么CPU流水线设计的级越长,完成一条指令的速度就越快?
【5】Verilog十大基本功1(流水线设计Pipeline Design)
【6】流水线设计的方法和作用
【7】跟涛哥一起学嵌入式 31:深入浅出CPU流水线工作原理
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170398.html原文链接:https://javaforall.cn