文章目录

  • 1.1 熟悉的经典MIPS五级流水线
  • 1.2 流水线深度设置的正面意义与反面意义
  • 1.3 选择使用流水线设计的理由
  • 1.4 流水线的stage划分
  • 参考文献

pipeline流水线设计是一种典型的 面积换性能的设计。一方面通过对长功能路径的合理划分,在同一时间内同时并行多个该功能请求,大大提高了某个功能的吞吐率;另一方面由于长功能路径被切割成短路径,可以达到更高的工作频率,如果不需要提高工作频率,多出来的提频空间可以用于降压降功耗。

1.1 熟悉的经典MIPS五级流水线

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

  • 取指:指令取指(Instruction Fetch)是指将指令从存储器中读取出来的过程。

  • 译码:指令译码(Instruction Decode)是指将存储器中取出的指令进行翻译的过程。经过译码之后得到指令需要的操作数寄存器索引,可以使用此索引从通用寄存器组(Register File,Regfile)中将操作数读出。

  • 执行:指令译码之后所需要进行的计算类型都已得知,并且已经从通用寄存器组中读取出了所需的操作数,那么接下来便进行指令执行(Instruction Execute)。指令执行是指对指令进行真正运算的过程。如果指令是一条加法运算指令,则对操作数进行加法操作;如果是减法运算指令,则进行减法操作。在“执行”阶段的最常见部件为算术逻辑部件运算器(Arithmetic Logical Unit,ALU),作为实施具体运算的硬件功能单元。

    MIPS五级流水线结构图

MIPS五级流水线运行图

  • 访存:存储器访问指令往往是指令集中最重要的指令类型之一,访存(Memory Access)是指存储器访问指令将数据从存储器中读出,或者写入存储器的过程。
  • 写回:写回(Write-Back)是指将指令执行的结果写回通用寄存器组的过程。如果是普通运算指令,该结果值来自于“执行”阶段计算的结果;如果是存储器读指令,该结果来自于“访存”阶段从存储器中读取出来的数据。

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

1.2 流水线深度设置的正面意义与反面意义

正面意义:在两级寄存器(每一级流水线由寄存器组成)之间的硬件逻辑越少,则意味能够运行到更高的主频。因此现代的处理器流水线极深主要是由于处理器追求高频的指标所驱使,高端的ARM Cortex-A系列由于有十几级的流水线,所以能够运行到高达2GHz的主频,而Intel的x86处理器甚至采用几十级的流水线深度将主频推到3-4GHz的高度。主频越高也意味着流水线的吞吐率越高从而性能越高。

反面意义:首先更多的流水线级数要消耗更多的寄存器,也意味着更多的面积开销。其次同时流水线越深,由于每一级流水线需要进行握手,流水线最后一级的反压信号可能会一直串扰到最前一级造成严重的时序问题,需要使用一些比较高级的技巧来解决此类反压时序问题。最后在流水线的取指令阶段无法得知条件跳转的结果,因此只能进行预测,到了流水线的末端才能够通过实际的运算得知该分支是真的该跳还是不该跳,如果发现真实的结果与之前预测的结果不相符,则意味着预测失败,需要将所有预取的错误指令流全部丢弃掉,而重新取正确的指令流,这个过程叫做流水线冲刷(Pipeline Flush)。

解决反压信号串扰的问题,可以采用取消反压信号,加入乒乓缓存,加入前向旁路缓存,基本都是以面积换取性能的方法。

深处种菱浅种稻,不深不浅种荷花,流水线的不同深度皆有其优缺点,需要根据不同的应用背景合理地进行选择。

1.3 选择使用流水线设计的理由

使用流水线一般是时序比较紧张,对电路工作频率较高的时候。

  1. 功能模块之间的流水线,用乒乓 buffer 来交互数据。代价是增加了 memory 的数量,但是和获得的巨大性能提升相比,可以忽略不计。
  2. I/O 瓶颈,比如某个运算需要输入 8 个数据,而 memroy 只能同时提供 2 个数据,如果通过适当划分运算步骤,使用流水线反而会减少面积。
  3. 片内 sram 的读操作,因为 sram 的读操作本身就是两极流水线,除非下一步操作依赖读结果,否则使用流水线是自然而然的事情。
  4. 组合逻辑太长,比如(a+b)*c,那么在加法和乘法之间插入寄存器是比较稳妥的做法。

1.4 流水线的stage划分

一般来说,划分流水线的考虑因素如下,

  • 如果流水线切割的子功能抽象层次较高,可以按照完整的功能进行流水线划分。
  • 流水线最好划分在数据通路上位宽较小的地方,以节省寄存器数量和面积。
  • 流水线每一级的关键路径延时最好接近,利于获得最大的Timing margin。

简单的流水线实例参见参考文献二,pipe line 分割了关键路径延时,提高了整体设计的工作频率 25.6%。

参考文献

【1】芯片设计小经验–流水线设计(微信公众号:数字IC自修室)

【2】IC设计实例解析之“流水线技术”

【3】名家专栏|你真的懂处理器流水线?

【4】为什么CPU流水线设计的级越长,完成一条指令的速度就越快?

【5】Verilog十大基本功1(流水线设计Pipeline Design)

【6】流水线设计的方法和作用

【7】跟涛哥一起学嵌入式 31:深入浅出CPU流水线工作原理

芯片设计之流水线设计-IC学习笔记(四)相关推荐

  1. IC学习笔记3——异步FIFO

    IC学习笔记3--异步FIFO 异步FIFO的工作内容与同步FIFO类似,但是异步FIFO的控制并不像同步FIFO那么简单,因为异步FIFO工作在不同的时钟域,这将会带来一些问题,比如空满检测?是否还 ...

  2. IC学习笔记1——建立时间和保持时间

    IC学习笔记1--建立时间和保持时间 前言 为了自己以后需要这些知识的时候,可以方便查阅,仅仅代表自己的观点,不一定正确. 一.建立时间和保持时间 1.1 触发器 建立时间.保持时间和传输延迟时间都是 ...

  3. 入门PCB设计AD9学习笔记8-PCB布板规则

    写作前面: 最近在学PCB设计,发现杜洋工作室的入门PCB设计讲的非常详细,适合初学者.由于是视频讲解形式,不利于后期再索引搜索各个知识点细节,所以这里做上笔记方便自己消化和之后内容的索引.惊喜发现已 ...

  4. 【《重构 改善既有代码的设计》学习笔记2】重构原则

    [<重构 改善既有代码的设计>学习笔记2]重构原则 本篇文章的内容来自<重构 改善既有代码的设计>一书学习笔记整理并且加上自己的浅显的思考总结! 上一篇通过一个简单的例子体验了 ...

  5. 华清远见fs4412开发板学习笔记(四)

    fs4412开发板学习笔记(四) 今天的课程安排 1.复习 1.1 VIM 编辑器 [1] vim + filename 打开 [2] 工作模式 命令模式 编辑模式 底行模式 [3] 模式切换 命令- ...

  6. 【http学习笔记四】安全篇

    [http学习笔记四]安全篇 文章目录 [http学习笔记四]安全篇 一.HTTPS 与 SSL/TLS ① 什么是安全? 机密性 完整性 身份认证 不可否认 ② 什么是HTTPS? ③ SSL/TL ...

  7. wyy课堂cmos模拟设计课学习笔记-器件介绍

    推荐一下wyy课堂的cmos模拟课程,比之前便宜好多就果断买了. wyy课堂cmos模拟设计课学习笔记-器件介绍 一.工艺库介绍的相关文件 二.bipolar 三.mos 四.电阻 五.电容 六.电感 ...

  8. 【《重构 改善既有代码的设计》学习笔记1】重构:第一个案例

    [<重构 改善既有代码的设计>学习笔记]重构:第一个案例 本篇文章的内容来自<重构 改善既有代码的设计>一书学习笔记整理并且加上自己的浅显的思考总结! 一.简单的例子 一个影片 ...

  9. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

最新文章

  1. 3dsMax插件V-Ray渲染与合成学习课程 3ds Max: Rendering for Compositing in V-Ray Next
  2. 深入浅出话命令(Command)-笔记(-)
  3. Mac下安装的MySQL root账号无法登陆用户解决
  4. python实现搜索之二分查找
  5. [中英对照]The sysfs Filesystem | sysfs文件系统
  6. VMware SD-WAN 修复6个漏洞,可关闭整个企业网络
  7. Java并发(五)线程池使用番外-分析RejectedExecutionException异常
  8. android游戏源码 2048,Android实现2048小游戏
  9. java 外文参考文献_java英文参考文献
  10. matlab的gaot在哪里,最权威遗传算法工具箱GAOT(gaot)安装方法
  11. 工程图字体宋体仿宋_Windows自带的宋体、黑体、楷体、仿宋体等能免费商用吗?...
  12. NS3:FlowMonitor设计讲解
  13. GaN制备Micro-led(二)——光子晶体倒装 Micro-LED 制备的关键工艺(纳米压印光刻、干法刻蚀、介质薄膜沉积、物理气相沉积)
  14. 实现1.1、1.1.1的多级编号文档排版
  15. 【js】js获取今日和昨日0点和23点59分59秒
  16. 抖音变现模式?80%的人都不知道的秘密,三类更适合玩私域的产品
  17. 【CSS3】CSS3动画——我离前端的炫酷又近了一步
  18. SSOP48的定位尺寸
  19. 众筹大家的年度阅读与分享计划啦
  20. mysql中输入没反应_mysql数据库插入无反应问题

热门文章

  1. 输给“深蓝”20年后,卡斯帕罗夫撰文呼吁对人工智能抱持乐观心态
  2. linux内网编译源码包,Netkeeper For Linux(含源码)
  3. 中烟新商盟杨大勇:助力发展小店经济
  4. Gen8服务器系统安装,Gen8安装Esxi系统教程
  5. 使用Nessus进行漏洞扫描
  6. openface搭建
  7. 【快速入门并掌握shell脚本编程】
  8. Linux下文件和文件夹同名冲突,为什么出现两个一模一样的同名文件或文件夹?
  9. npm gyp ERR问题
  10. nRF2401无线模块接收_FPGA实现~~