引言

It is quite a three-pipe problem.
-- Sir Arthur Conan Doyle

所以就分三部分说吧。

虽然,指令级并行(ILP)的潜能已经开发殆尽(intel已经在2004年宣布,停止高性能单处理器的研发),流水线技术也已经很成熟了,但是了解流水线,是学习和了解计算机体系结构绕不开的内容。本小节就从三个方面说一下流水线。

5.1 什么是流水线

Pipelining is an implementation technique whereby multiple instructions are overlapped in execution; it takes advantage of parallelism that exists among the actions needed to execute an instruction.

流水线是利用执行指令所需的操作之间的并行性,实现多条指令并行执行的一种技术。

其实,流水线本身,跟计算机没关系。最早流水线是福特发明的,那时福特汽车公司生产效率很低,正是福特本人引进流水线,是生产效率大增。其原理就是把生产一辆完整的汽车分成若干工序,然后从第一个零件开始,依次流过整个流水线,然后一辆完整的汽车就被生产出来了。如果你在生产工厂呆过的话,理解流水线就很容易了。我想,工厂里的生产线,应该就是所谓的流水线。

特殊的,对于计算机体系结构来说,原理和汽车流水线一样,将一条指令的完成分成若干部分(流水节拍或流水段),然后指令依次流过这些流水段,就完成了这条指令。对于经典的5级流水线,如下:

1,IF(指令取得)

需要完成的工作:

Send the program counter (PC) to memory and fetch the current instruction from memory. Update the PC to the next sequential PC by adding 4 (since each instruction is 4 bytes) to the PC.

根据PC(程序计数器)指示的地址,从存储器中取指令,并装入到IR(指令寄存器),同时PC+4。当然假设每条指令占4个字节。

2,ID(指令译码)

需要完成的工作:

Decode the instruction and read the registers corresponding to register source specifiers from the register file。

对指令进行译码,并且访问寄存器堆读出相应寄存器的内容。

3,EX(执行)

需要完成的工作:

The ALU operates on the operands prepared in the prior cycle, performing one of three functions depending on the instruction type.

Memory reference

Register-Register ALU instruction

Register-Immediate ALU instruction

ALU对上一个周期准备好的操作数进行运算,根据指令类型执行下面三种操作之一。

访问存储器

寄存器-寄存器ALU指令

寄存器-立即数ALU指令

4,MEM(访问存储器)

需要完成的工作:

If the instruction is a load, memory does a read using the effective address computed in the previous cycle. If it is a store, then the memory writes the data from the second register read from the register file using the effective address.

LOAD:从存储器中读取数据。STOR:把寄存器内容写到存储器。

5,WB(写回)

需要完成的工作:

寄存器-寄存器ALU指令,LOAD指令会经过这个流水段。

Write the result into the register file, whether it comes from the memory system (for a load) or from the ALU (for an ALU instruction).

将结果(来自LOAD指令或来自ALU)写入寄存器堆。

5.2流水线带来的影响

引进流水线,肯定是有好处的,会提高效率,这个先不说,天下没有完美的事,有好处就有坏处,就是会引进一些问题。哪些问题呢?如下:

1,Pipeline Hazards(流水线遇险)

1》Structural hazards(结构遇险)就是硬件资源不够用或者硬件资源使用冲突。

2》Data hazards(数据遇险)就是指令间有数据依赖关系造成的问题。

3》Control hazards(控制遇险)转移指令或修改PC造成的遇险。

2,Dealing with Exceptions(处理异常)

1》I/O中断

2》系统调用

3》执行跟踪指令

4》断点

5》定点运算溢出

6》浮点运算异常

7》页面异常

8》访问存储器时使用错误地址

9》存储保护违例

10》硬件故障

11》断电

3,Instruction Set Complications(指令集本身的复杂性)

有些体系结构的指令集用流水线实现起来就比较复杂。

这些问题,可以仔细看一下上面的两张图,好好想一下就能推断会出现这些问题,这一点很重要。

5.3 解决技术

先说一个式子:

Pipeline CPI = Ideal pipeline CPI + Structural stalls + Data hazard stalls + Control stalls

这些技术无外乎就是想方设法减小右边的4项内容其中的一项或几项。

5.4小结

流水线,在各行各业都有体现,想像一下,大学食堂,如果把卖豆浆,油条,咸菜,粥,米饭,馒头,。。。这些窗口都合成一个窗口,会是什么景象。

这就是流水线的魅力。

数字集成电路设计-5-pipelining(流水线)相关推荐

  1. 【笔记】 数字集成电路设计(一)

    [笔记] 数字集成电路设计 书籍:<数字集成电路--电路.系统与设计>(第二版) 第一章 引论 1. 数字设计中需解决的问题 摩尔定律 技术突破才能推动摩尔定律 特征尺寸 28nm是传统制 ...

  2. VerilogHDL(1)数字集成电路设计方法概述

    一.数字集成电路设计方法概述 2.什么是硬件描述语言,其主要的作用是什么? 硬件描述语言是一种用形式化方式来描述数字电路和系统的语言. 它的主要作用是:数字电路系统的设计者利用这种语言可以从上层到下层 ...

  3. 数字集成电路设计中------各种工程师职责

    数字集成电路设计实现流程是个相当漫长的过程,拿手机基带芯片为例,对于3G, 4G, 5G, 工程师最初见到的是无数页的协议文档. 架构师要根据协议来确定:协议的哪些部分可以用软件实现,哪些部分需要用硬 ...

  4. 入门数字集成电路设计系列(一)——Modelsim安装及破解过程记录

    入门数字集成电路设计系列(一) #Modelsim破解教程(记录) Modelsim是由 Mentor Graphics 公司开发的软件,它是世界最优秀的Verilog HDL语言仿真工具,是FPGA ...

  5. 数字集成电路设计简介及设计方法

    简介 数字集成电路(Digital Integrated Circuits,DIC)是一种能够处理数字信号的电路.它由多个数字逻辑电路元件组成,包括逻辑门.寄存器.计数器.加法器.乘法器等.数字集成电 ...

  6. 数字集成电路设计(一、Verilog HDL数字集成电路设计方法概述)

    文章目录 集成电路发展 HDL产生 HDL分类 Verilog HDL的发展 Verilog HDL与VHDL Verilog HDL在数字集成电路设计中的优点 组合逻辑电路原理图设计和Verilog ...

  7. 数字集成电路设计的流程1

    数字集成电路设计的流程 芯片验证属于前端 每个阶段的工作 使用的EDA工具,Linux系统(lincense) 三家软件公司,Mentor(questasim).Synopsys(VCS).Caden ...

  8. 数字集成电路设计入门书籍

    本文介绍的是有关数字集成电路的基础入门书籍,涵盖全流程,主要是外文书. 基础概念书籍 <数字集成电路设计基础>(Fundamentals of Digital Logic Design): ...

  9. 学以致用深入浅出数字信号处理 pdf_Robei |《数字集成电路设计》正式出版啦

    原标题:Robei |<数字集成电路设计>正式出版啦 1.背景 <数字集成电路设计>作为电子信息.自动化.微电子.计算机.通信.电子工程等学科专业必修的数字电路技术课程 ,自2 ...

最新文章

  1. 做游戏开发需要具备那些知识或技能?
  2. setTimeOut与 setInterval区别
  3. Java之String,StringBuffer,StringBuilder
  4. java sqlldr导入_使用SQL*LOADER将TXT或CSV数据导入ORACLE(转)
  5. JS运行机制(浏览器内核)
  6. 如何在运行时使用SAP Commerce Cloud backoffice直接给类型增添新属性
  7. 生成configDataContextRefres失败:Error creating bean with name ‘configDataContextRefresher‘
  8. layui多级联动下拉框的实现_简单三级联动的实现
  9. android中viewpager+fragment,Android开发之ViewPager+Fragment
  10. 计算机网络聚合怎么设置,交换机的端口聚合如何配置
  11. 互联网前景如何,还值得进入嘛?
  12. c语言将数据写入文件后乱码_html文件的下载,如何使用字节流,如何使用转换流...
  13. Linux 开机报 or type Control-D to continue
  14. OpenARK:惊艳的增强现实、虚实交互开源库
  15. 人文社科开放数据库汇总
  16. 关于Aegisub的视频滤镜插件和字幕滤镜插件
  17. 公开课:拉筹伯大学:新闻人的网络编辑和发布
  18. Element-UI 上传图片到达一定数量后隐藏图片上传按钮
  19. oracle账集和账薄,转载-Oracle R12 总账与子账的关系
  20. 鸿蒙华为畅享10plus,华为畅享10 Plus四配色曝光 款款都是高颜值

热门文章

  1. 在AutoCAD2015如何设置栅格的显示与设置
  2. R-VQA: Learning Visual Relation Facts with Semantic Attention for Visual Question Answering
  3. mysql查姓_mysql查询
  4. 使用Prometheus监控web站点及证书过期
  5. js 格式化,过万转换成万(W),过亿转化成亿(M)
  6. 基于FFmpeg的视频播放器之十三:抓图
  7. 用c语言计算运费.c
  8. STM32笔记 (七)中断系统与NVIC嵌套向量中断控制器
  9. Docker搭建+项目实训(多次的作业的综合)
  10. android开发笔记之sh脚本