处理器流水线介绍


1 处理器流水线概述

1.1 经典的五级流水线

        经典MIPS五级流水线如图所示:

1

        在此流水线中一条指令的生命周期分为以下步骤:

        在处理器中采用流水线设计有助于提高处理器的性能。以上述五级流水线为例,由于前一条指令在完成了“取指”进入“译码”阶段后,下一条指令马上就可以进入“取指”阶段,以此类推。如果流水线没有停顿,理论上可以取得每个时钟周期都完成一条指令的性能。

1.2 流水线与状态机的关系

        流水线的本质可以理解为一种以面积换性能、以空间换时间的手段,提高了性能,优化了时序,增加了吞吐率。

        与流水线相对应的另外一种策略是状态机,状态机是流水线的取反,本质上可以理解为是一种以性能换面积、以时间换空间的手段。

        流水线和状态机的关系是展开和折叠的关系。假设处理器不采用流水线而使用状态机来完成,则需要多个时钟周期才能完成一条指令的所有操作,每个时钟周期完成状态机的一个状态(分别为取指、译码、执行、访存和写回)。通过使用状态机,可以省掉上述流水线中的寄存器开销,还可以复用组合逻辑数据通路,因此面积开销比较小,但是每条指令都需要5个周期才能完成,吞吐率和性能很差。

        8051内核就没有流水线。

1.3 流水线的深度

        早期的经典流水线是五级流水线,现代的处理器往往具有极深的流水线级数,譬如高达十几级甚至二十几级的深度。流水线的级数越多,意味着流水线被切的越细,每一级流水线内容纳的硬件逻辑便越少。在两级寄存器(每一级流水线由寄存器组成)之间的硬件逻辑越少,则意味着能够运行到更高的主频。因此,现代的处理器流水线极深主要是由于处理器追求高频的指标所驱使。高端的ARM Cortex-A系列由于有十几级的流水线,所以能够运行到高达2GHz的主频,而Intel的x86处理器甚至采用几十级的流水线深度将主频推到3~4GHz的高度。主频越高也意味着流水线的吞吐率越高,从而性能越高。

        由于每一级流水线都由寄存器组成,更多的流水線級數需要消耗更多的寄存器,以及更多的面积开销。

        由于每一级流水线需要进行握手,流水线最后一级的反压信号可能会一直串扰到最前一级造成严重的时序问题,需要使用一些比较高级的技巧来解决此类反压时序问题。

        由于在流水线的取指令阶段无法得知条件跳转的结果到底是跳还是不跳,因此只能进行预测,而到了流水线的末端才能够通过实际的运算得知该分支是真的该跳还是不该跳。如果发现真实的结果真实结果与预测结果不相符,则意味着预测失败,需要将所有预取的错误指令流全部丢弃,重新取正确的指令流,这个过程叫做“流水线冲刷”。虽然可以用分支预测器来保证前期的分支预测尽可能准确,但也无法做到万无一失。流水线的深度越深,意味着已经预取了更多的错误指令流,意味着浪费和损失越严重。


2 处理器流水线中的反压

        流水线越深,由于每一级都要进行握手,流水线最后一级的泛亚信号可能会一直串扰到最前一级造成严重的反压时序问题,需要使用一些比较高级的技巧来解决这些时序问题,在现代处理器设计中,通常由如下三种方法:

        以上解决反压的技术方法,不仅在处理器设计中能够用到,而且在普通的ASIC电路设计中也会经常用到。


3 处理器流水线中的冲突

3.1 流水线中的资源冲突

        资源冲突是指流水线中硬件资源的冲突,最常见的是运算单元的冲突,譬如除法器需要多个时钟周期才能完成运算。因此在前一个除法指令完成运算之前,新的除法指令如果也需要除法器,则会存在着资源冲突。在处理器的流水线中硬件资源冲突种类还有较多,在此不一一赘述。解决资源冲突可以通过复制硬件资源或者流水线停顿等待硬件资源的方法解决。

3.2 流水线中的数据冲突

        数据冲突是指不同的指令之间的操作数存在着数据相关性造成的冲突,常见的数据相关性如下:

        以上的3种相关性中,RAM属于真数据相关。

        解决数据冲突的常见方法如下:


4 E200处理器的流水线

4.1 流水线总体结构

        蜂乌E200处理器的总体结构如图所示:

2

        要点如下:


        告辞。

Back to Archive
WeChat QR Code

Scan to connect