蜂鸟E200设计:流水线

写在前面:本篇内容来自胡振波先生所著的《手把手教你设计CPU——RISC-V处理器》,并附加个人学习心得,纯用以个人学习笔记。强烈推荐想要系统学习RISC-V处理器的同学们去看一下这本书,深入浅出、干货满满。

处理器流水线结构,是处理器微架构最基本的一个要素,承载并决定了处理器其他微架构细节

目录

概述

1. 流水线概念起源

2. 经典MIPS五级流水线

3. 流水线VS状态机

4. 流水线深度(级数)

流水线中反压问题

1. 取消握手

2. 加入乒乓球缓存

3. 加入前向旁路缓存

流水线中冲突

1. 资源冲突

2. 数据冲突

蜂鸟E200处理器流水线总览


概述

1. 流水线概念起源

流水线概念起源于工业制造领域。以汽车制造为例,装配一辆汽车有四个步骤:

冲压、焊接、涂装、总装。

在第一辆汽车完成前一项工序,进入后一项工序时,第二辆汽车进入前一项工序,以此类推。这种生产方式如流水一般不息不止,故名流水线。

2. 经典MIPS五级流水线

一条指令的生命周期可以分为如下步骤:

(1). 指令取值(IF):将指令从存储器中读出来。

(2). 译码(ID):将取出的指令进行翻译。译码后,得到指令所需的操作数寄存器索引,使用索引从通用寄存器组中读出操作数。

(3). 执行(IE):译码后已知计算类型和操作数,即可对指令执行运算。如:指令为一条加法运算指令,则对操作数加法操作。此阶段一般需要用到算法逻辑部件运算器(ALU),作为执行运算的硬件单元。

(4). 访存(MEM):使用存储器访问指令,将数据从存储器中读出或写入。

(5). 写回(WB):将指令执行的结果写回通用寄存器组。对于普通运算指令,结果为“执行”后的计算值;对于存储器读指令,结果为“访存”时从存储器中取出的数据。

理论上,如果流水线没有停顿,每个时钟周期都可以完成一条指令。

3. 流水线VS状态机

ASIC电路广泛采用流水线思想,其本质上是以面积换性能、以空间换时间的方法。如:五级流水线增加了五组寄存器,每一流水线级数内部都有各自的组合逻辑数据通路,彼此间无复用资源,面积开销较大。但不同流水线级数可以同时做不同任务,优化了性能、时序,增加了吞吐率。

状态机是流水线的“取反”,也被大部分ASIC采用,本质是以性能换面积、以时间换空间的方法。

因此,具体设计中考虑侧重面积还是侧重性能,来决定选择哪一种方式。

4. 流水线深度(级数)

流水线每一级都由寄存器组成。级数越多,每一级流水线内部硬件逻辑越少,可以实现更高主频、更高吞吐率、更高性能,但会消耗更多的寄存器与面积

由于每一级流水线需要握手,最后一级的反压信号可能会串扰最前一级造成时序问题

流水线冲刷(PF):取值阶段无法知道条件跳转结果,因此只能预测。到流水线末端,通过实际运算才能知道该分支跳转结果。如果预测值和实际跳转结果不同,也就是预测失败,需要将预取的错误指令流丢弃,重新取正确指令流。流水线深度越深,预测失败的功耗就越大,浪费严重

流水线越深
益处弊处
高频、高吞吐率、高性能寄存器/面积消耗大
最后一级反压信号引起时序问题
预测失败的功耗浪费严重

注:书中在此处举例剖析了市场上流水线级数两种变化趋势,感兴趣的朋友自行查阅

流水线中反压问题

对于流水线最后一级的反压可能引起的时序问题,通常有如下三种方法解决:

1. 取消握手

可杜绝反压问题,时序表现好,但可能造成功能错误或指令丢失。因此,这种方法一般要配合其他机制(如:重执行、预留大缓存等),故整体硬件复杂度较高,仅用于高级处理器设计。

2. 加入乒乓球缓存

此方法采用面积换时序的思想,通过使用乒乓缓存(两个表项)替换普通一级流水线(一个表项),使此级流水线向上一级流水线握手时只关注是否有空的表项,无需后一级握手接收信号串扰上一级。

3. 加入前向旁路缓存

此方法采用面积换时序的思想,通过额外增加旁路缓存(一个表项),将后向握手信号时序路径切断,对前向路径无影响。蜂鸟E200设计中采用此方法,可以有效解决反压时序问题。

流水线中冲突

1. 资源冲突

指流水线中硬件资源冲突,最常见运算单元冲突,如:除法器需要多个时钟周期完成运算,前一条除法指令未完成时,后一条除法指令需要除法器,则造成资源冲突。

解决方法:复制硬件资源或流水线停顿等待硬件资源

2. 数据冲突

指不同指令间操作数存在数据相关性造成的冲突,主要有以下三种:

(1). WAR(先读后写)相关性:“后序执行的指令需要写回结果寄存器索引”与“前序执行的指令需要读取源操作数寄存器索引”相同时。后序指令不能比同WAR相关性的前序指令先执行,否则会使前序指令读取到错误索引。

(2). WAW(先写后写)相关性:“后序执行的指令需要写回结果寄存器索引”与“前序执行的指令需要写回结果寄存器索引”相同时。后序指令不能比同WAW相关性的前序指令先执行,否则前序指令的写回结果会覆盖后序指令的写回结果。

(3). RAW(先写后读)相关性:“后序执行的指令需要读取源操作数寄存器索引”与“前序执行的指令需要写回结果寄存器索引”相同时。后序指令不能比同RAW相关性的前序指令先执行,否则会使后序指令读取到错误索引。(真数据相关:无法通过寄存器重命名解决)

对WAR、WAW相关性解决方法:寄存器重命名。如:在Tomasulo算法中通过保留站和ROB(Re-order Buffer)完成,或采用纯物理寄存器。

对RAW相关性解决方法:通过动态调度尽可能减少流水线停顿等待时间。一方面,采用数据旁路传播技术,尽可能让前序指令计算结果更快地旁路传播给后序相关指令操作数;另一方面,尽可能让后序相关指令在等待过程中不阻塞流水线,使无关指令顺利执行。

实现上述动态调度两方面的手段:在每个运算单元前配置乱序发射队列,发射队列仅追踪RAW相关性而不存放操作数,可以做到很深(如:16个表项)。在发射队列中的指令解除相关性后发射,读取物理寄存器组,再发送给运算单元计算。

蜂鸟E200处理器流水线总览

主要含有的流水线级数为:IFU(第一级,取指)、EXU(第二级,译码、执行)、WB(第二级,写回,与EXU位于同一个时钟周期)、LSU(第三级,访存)

严格说,蜂鸟E200为变长流水线结构,因为第三级的LSU需要第二级的WB写回结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值