
目录1 CPU的功能和基本结构1.1 CPU基本功能1.2 运算器和控制器的功能1.2.1 运算器的基本结构1.2.1.1 专用数据通路方式使用多路选择器使用三态门CPU内部单总线方式最常用总线也称为BUS1.2.2 控制器的基本结构1.3 CPU总结构2 指令执行过程2.1 指令类型2.2 指令周期流程取指周期间址周期执行周期中断周期2.3 指令执行方案单指令周期多指令周期流水线方案3 数据通路的功能和基本结构3.1 CPU内部单总线3.2 专用数据通路4 控制器的功能和工作原理4.1 控制器如何工作4.2 控制单元控制器CU的输入和输出4.3 硬布线控制器4.3.1 CPU的控制方式同步控制方式异步控制方式联合控制方式4.3.2 安排微操作时许安排微操作时许的原则4.3.3 电路设计4.4 微程序控制器4.4.1 微程序的基本思想4.4.2 微程序控制器的基本结构4.4.3 微指令的格式4.4.4 微指令的编码方式1.直接编码直接控制方式2.字段直接编码方式3.字段间接编码隐式编码4.4.5 微指令的地址形成方式1.微指令的下地址字段指出2.根据机器指令的操作码形成3.增量计数法不常用4.分支转移不常用5.测试网络不常用6.硬件产生微程序入口地址不常用4.4.6 微程序控制器的基本概念总结4.4.7 微程序控制单元的设计5 指令流水线5.1 指令流水的定义5.2 流水线的表示方法5.2.1 指令执行过程图5.2.2 时空图5.3 流水线的性能指标5.4 指令流水线的影响因素5.4.1 结构相关资源冲突5.4.2 数据相关数据冲突5.4.3 控制相关控制冲突5.5 流水线的分类5.6 流水线的多发技术5.6.1 超标量技术5.6.2 超流水技术5.6.3 超长指令字本文很长且内容相当琐碎本文很长且内容相当琐碎本文很长且内容相当琐碎1 CPU的功能和基本结构CPU可以看作是算数逻辑单元ALU寄存器时序逻辑电路CU和中断系统组成的。1.1 CPU基本功能指令控制完成取指令、分析指令和执行指令的操作即程序的顺序控制操作控制一条指令的功能往往是若干操作信号组合实现。CPU管理并产生这些由内存取出的每条指令的操作信号把各种操作信号送往相应的部件从而控制这些部件按指令的要求进行动作时间控制对各种操作加以时间上的控制时间控制要为每条指令按时间顺序提供应有的控制信号数据加工对数据进行算数和逻辑运算中断处理对计算机运行过程中出现的异常情况和特殊请求进行处理1.2 运算器和控制器的功能CPU可以拆分为运算器和控制器逻辑上运算器对数据进行加工控制器协调并控制计算机各部件执行程序的指令序列基本功能包括取指令分析指令执行指令中断处理1.2.1 运算器的基本结构由算术逻辑单元和寄存器组成算数逻辑单元ALU的主要功能是进行算数/逻辑运算通过外部信号对传入的数据进行相加或者相减等操作通用寄存器一般我们可以用R0,R1,R2这样的符号表示也可以用AX,BX,CX,SP等表示AX这样的表示方式一般是用于区别高低地址的AH是寄存器A中的高地址AL是低地址AX表示整个寄存器。通用寄存器用于存放操作数包含源操作数目的操作数和中间结果和各种地址信息等。SP是堆栈指针用于指示栈顶地址累加寄存器ACC它本质上也是通用寄存器在ALU进行累加的时候暂存ALU的运算结果用于加法实现程序状态字寄存器PSW保留由算数逻辑运算指令或测试指令的结果而建立的各种状态信息如溢出标志OP、符号标志SF、零标志ZF、进位标志CF等。PSW中的这些位参与并决定微操作的形成暂存寄存器用于暂存从主存读来的数据这个数据不能存放在通用寄存器中否则会破坏其原有内容本质上起一个缓冲的作用不然A和B同时从总线上读数据ALU不能正常工作了算数逻辑单元和寄存器之间的连线可以分为两种专用数据通路方式和CPU内部单总线方式。1.2.1.1 专用数据通路方式像下图根据指令执行过程中的数据和地址的流动方式安排连接线路的称为专用数据通路方式。即每个寄存器单独与算数逻辑单元ALU通信。专用数据通路方式的性能高数据冲突少但结构复杂硬件量大。从上图我们发现算数逻辑单元ALU不能区别数据从哪个寄存器发送过来多个寄存器同时传输于是我们有以下解决方案使用多路选择器使用多路选择器根据控制信号选择一路输出共享开关使用三态门使用三态门可以控制每一路是否输出每个单独开关CPU内部单总线方式最常用总线也称为BUS在系统内部设置公共通路将所有寄存器的输入端和输出端都连接到一条公共的通路上该通路称为CPU内部总线或者ALU总线这样设计的结构简单容易实现但数据传输存在较多冲突的现象性能较低暂存寄存器用于暂存从主存读来的数据这个数据不能存放在通用寄存器中否则会破坏其原有内容本质上起一个缓冲的作用不然A和B同时从总线上读数据ALU不能正常工作了1.2.2 控制器的基本结构1.程序计数器PC用于指出下一条指令在主存中的存放地址。CPU就是根据PC的内容去主存中取指令的。程序中指令一般是顺序执行的所以PC有自增功能PC与指令寻址有关看计算机指令系统-CSDN博客2.指令寄存器IR用于保存当前正在执行的指令3.指令译码器ID仅对操作码字段进行译码向控制器提供特定的操作信号4.微操作信号发生器根据IR的内容指令、PSW的内容状态信息和时许信号产生控制整个计算机系统所需的各种控制信号其结构有组合逻辑型和存储逻辑型两种5.时许逻辑用于产生各种时许信号它们都是由统一时钟CLOCK分频得到6.存储器地址寄存器MAR用于存放所要访问的主存单元的地址7.存储器数据寄存器MDR用于存放向主存写入的信息或者从主存中读出的信息1.3 CPU总结构其中橙色的表示用户可见可编程或者可以辅助用户进行编程操作灰色代表机器自动管理用户不可见2 指令执行过程指令周期CPU从主存中每取出并执行一条指令所需的全部时间。指令周期常常用若干机器周期来表示机器周期又叫CPU周期。一个机器周期又包含若干时钟周期也称为节拍、T周期或CPU时钟周期CLKCLOCK缩写时钟周期是CPU操作的基本单位。每个指令周期内机器周期可以不等每个机器周期内的节拍数也可以不等。2.1 指令类型空指令NOP空指令只包含取指令的时间加法指令ADD指令周期可以拆分为取指周期和执行周期乘法指令MUL指令周期拆分为取指周期和执行周期由于乘法本质上是多次加法所以执行周期比加法长具有间接寻址的指令指令周期分为取指周期间址周期和执行周期带有中断周期的指令指令周期分为取址周期间址周期执行周期和中断周期………………由于每个指令的任务和操作不同就导致了定长和不定长的机器周期出现2.2 指令周期流程我们可以用触发器来表示系统目前的状态在四个工作周期中都有CPU访存操作只是访存的目的不同。取指周期是为了取指令间址周期是为了取有效地址执行周期是为了取操作数中断周期是为了保存程序断点。取指周期1.当前指令地址送至存储器地址寄存器PC-MAR2.CU发出控制信号经控制总线传到主存这里是读信号1-R3.将MAR所指主存中的内容经数据总线送入MDRMMAR-MDR4.将MDR中的内容指令送入IRMDR-IR5.CU发出控制信号形成下一条指令地址PC1-PC间址周期1.将指令的地址码送入MARAd(IR)-MAR或者Ad(MDR)-MAR2.CU发出控制信号启动主存做读操作1-R3.将MAR所指主存中的内容经数据总线送入MDRM(MAR)-MDR4.将有效地址送到指令的地址码字段MDR-Ad(IR)或者MDR-MAR这里主要看机器如何设计部分认为送到IR中转没有必要这也是第一步出现差异的原因执行周期对不同操作数和地址码进行操作根据具体指令内容完成对它们的操作可以看计算机指令系统-CSDN博客https://blog.csdn.net/eighth_antidote/article/details/163250192?spm1001.2014.3001.5502中断周期中断的目的是暂停当前任务去做其他任务所以回来时原状态应该保存即保存断点一般使用堆栈来保存断点假设SP指向栈顶元素。1.CU控制SP减1修改后的地址送入MAR(SP)-1-SP (SP)-MAR本质上是将断点存入存储单元假设其地址为a可以记作a-MAR2.CU发出控制信号启动主存做写操作1-W3.将断点PC中地址送入MDR(PC)-MDR4.CU控制将中断服务程序的入口地址由向量地址形成部件产生送入PC向量地址-PC2.3 指令执行方案由于每条指令执行所需时间不同所以导致CPU在执行指令的时候会有许多方法单指令周期固定每条指令的执行时间即使该指令所需时间短于该固定时间对所有指令选用相同的执行时间来完成。这导致指令之间串行执行即指令周期取决于执行时间最长的指令的执行时间对于哪些本来可以在更短时间内完成的指令要使用这个较长的周期来完成会降低系统运行速度这样设计非常简单但运行效率比较低因为指令是一条执行的多指令周期对不同类型的指令选用不同的执行步骤来完成单独处理每条指令的执行时间本质上是对单指令周期的优化指令之间串行执行可选用不同个数的时钟周期来完成不同指令的执行过程这样设计会比单指令周期复杂一点执行效率比单指令周期高一点流水线方案在每一个时钟周期启动一条指令尽量让多条指令同时运行但各自处在不同的执行步骤中对于每一条指令它所需要的硬件是不同的而那些空闲的硬件可以用来执行其他指令。指令之间并行执行3 数据通路的功能和基本结构对于数据通路我们进行分类讨论但这里的内容以理解为主不需要特别记忆。重在理解逻辑3.1 CPU内部单总线这里我们假设CPU为单总线的结合前面来解释数据通路指的是数据在部件之间的路径即数据流如下图为CPU内部结构假设和上面的CPU总结构那里面的结构类似我们取运算器的那部分控制器那部分先忽略。在此之前先解释一下总线总线也叫Bus可以简单分为内部总线和系统总线。内部总线指的是同一部件内部的总线如CPU总线系统总线指的是计算机系统各部件之间的总线如CPU内存I/O接口之间的总线CPU内部的数据通路也可以分为三类本质上一样人为稍微区分一下不区分也没事此处以上面的结构为例看图不方便开两个网页1.寄存器之间的数据传送比如在MAR和PC或者ACC之间的操作如将PC内容送到MAR(PC)-Bus PCout有效PC内容送达总线Bus-MAR MARin有效总线内容送到MAR2.CPU与主存之间的数据传送先读进来再完成第一类数据传送的过程如CPU从主存读取指令实现传送操作的流程及控制信号(PC)-Bus-MAR PCout和MARin有效将指令从PC送到MAR中暂存1-R CU向主存发读命令主存读内容MEM(MAR)-MDR MDRin有效这个MDRin指的是和主存之间的数据线MDR-Bus-IR MDRout和IRin有效当前指令送往IR3.执行算数或逻辑运算如一条加法指令微操作序列及控制信号为假设两个加法数一个在主存中一个在ACC中Ad(IR)-Bus-MAR 因为IR没有out线所以只能使用MDR中存放的地址码来寻找MEM(MAR)-数据线-MDR 将加法数读入CPU中的MDR暂存MDR-Bus-Y MDRout和Yin有效操作数移到Y中准备加法运算(ACC)(Y)-Z 在ALU中完成加法运算存放到Z寄存器中3.2 专用数据通路此处逻辑和CPU专用线路一样只是其中结构变了就不废话了取址周期过程如下4 控制器的功能和工作原理4.1 控制器如何工作控制器指挥整个系统的工作控制器的结构作为计算机系统的指挥中心控制器的主要功能有1.从主存中取出一条指令并指出下一条指令在主存中的位置2.对指令进行译码或测试产生相应的操作控制信号以便启动规定的动作3.指挥并控制CPU主存输入和输出设备之间的数据流动方向4.2 控制单元控制器CU的输入和输出输入1.指令寄存器OP(IR)-CU本条指令的操作码部分规定了CU的控制信号2.时钟一个时钟脉冲发送一个命令或者一组需要同时执行的操作命令通过时钟告诉CU时钟周期。本质上是计数叫做计时也行用的3.标志根据标志位决定下一步操作标志主要来自运算器中的程序状态字寄存器标志寄存器4.外部信号系统总线的控制信号比如中断请求信号INTR总线请求信号HRQ输出1.CPU内部的控制信号寄存器之间的数据传输PC的修改控制ALU进行相应的运算2.到控制总线的控制信号到存储器访存控制信号MREQ读命令RD写命令WR到IO设备访问IO设备的控制信号IO中断相应信号INTA总线相应信号HLDA硬布线和微程序是控制单元CU设计的两种方案。4.3 硬布线控制器控制器设计步骤1.分析每个阶段的微操作序列2.选择CPU的控制方式3.安排微操作时许4.电路设计分析微操作序列可以看前文的数据通路那里有比较详细的分析所以在此就不进行分析了4.3.1 CPU的控制方式CPU的控制方式产生不同微操作命令序列所用的时许控制方式同步控制方式整个系统所有的控制信号均来自一个统一的时钟信号此模式适用于定长机器周期。通常以最长的微操作序列和最烦的微操作作为标准采取完全统一的具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令。以偏概全用最长的机器周期来替代所有的机器周期。当然也有不定长的同步控制方式的控制电路简单但运行速度慢。不管是定长还是不定长它们的节拍都一样由时钟周期统一控制异步控制方式异步控制不存在基准时标信号。即类似上面标准的T0节拍不存在。异步控制是按照每个部件各自的固有工作速度工作通过应答方式进行联络异步虽然运行速度快但是它的控制电路比较复杂联合控制方式对各种不同指令的微操作实行大部分同步小部分异步。4.3.2 安排微操作时许安排微操作时许的原则1.微操作的先后顺序不得随意更改2.被控对象不同的微操作尽量安排在一个节拍内完成3.占用时间短的微操作尽量安排在一个节拍内完成并允许有先后顺序用一句话来总结就是在先后顺序不改变的情况下尽可能多地完成微操作4.3.3 电路设计对于硬布线来说电路设计就是组合逻辑设计可以分为以下三步1.列出操作时间表2.写出微操作命令的最简表达式3.画出逻辑图4.4 微程序控制器微程序分类我看的课把微程序的分类放最后面不理解为什么。1.静态微程序设计和动态微程序设计静态 微程序无需改变采用ROM动态 通过改变微指令和微程序改变机器指令有利于仿真采用EPROM2.毫微程序设计微程序设计 用微程序解释机器指令毫微程序设计 用毫微程序解释微程序和套娃一样硬布线的工作原理是通过组合逻辑电路根据当前的指令码、状态和时许即时产生的而微程序控制器的工作原理是实现将微操作控制信号存储在一个专门的存储器中将每一条机器指令编写成一个微程序微程序和机器指令类似存在微操作码操作控制微地址码顺序控制所以你可以将微程序和机器指令等价起来看。用控制存储器存储这些微程序用寻址用户程序机器指令的办法来寻址每个微程序中的微指令4.4.1 微程序的基本思想基本概念机器指令由微命令组成而微操作是微命令的执行过程。相容性微命令可以同时产生、共同完成某些操作的微命令如 PC-MAR 和 1-R )互斥性微命令在机器中不允许同时出现的微命令所以我们可以将相容的微操作编写为微指令互斥的单独编写为微指令。于是这些概念之间的连接就显现出来微操作命令微命令-微指令-微程序机器指令4.4.2 微程序控制器的基本结构微指令控制器主要由以下部件组成控制存储器CM地址译码微地址寄存器CMAR微指令寄存器CMDR顺序逻辑和微地址形成部件它们的功能分别为地址译码接受微地址寄存器CMAR中的微地址将地址码转化为存储单元控制信号本质为译码器控制存储器CM用于存放各指令对应的微程序控制存储器可用只读存储器ROM构成可以理解为存放的是指令集微地址寄存器CMAR接收其他部件送来的微地址暂时存放微指令寄存器CMDR用于存放控制寄存器CM中取出来的微指令位数一般与微指令字长相等微地址形成部件产生初始微地址和后继微地址让微指令可以连续执行顺序逻辑顺序逻辑接入时钟和标志来判断当前微地址是初始微地址还是后继微地址保证其连续整体的工作流程为OP-微地址形成部件-顺序逻辑-CMAR-地址译码-CM-CMDR-顺序逻辑-……外部向微程序控制器中传入操作码字段OP微地址形成部件产生初始微地址传入顺序逻辑顺序逻辑判断其为初始微地址传入CMARCMAR将地址码暂存转移到地址译码地址译码将地址码解析在控制寄存器CM中找到微指令控制存储器CM将找到的微指令存放到微指令寄存器CMDR中微指令寄存器CMDR将微指令中下一条指令的地址转移到顺序逻辑中继续下一条指令。微指令运行后产生的结果通过CMDR传输到CPU内部或系统总线4.4.3 微指令的格式1.水平型微指令——一次能定义并执行多个并行操作将多个操作集成在操作控制中微程序短并且执行速度快。但微指令长并且编写微程序麻烦2.垂直型微指令——类似机器指令操作码的方式由微操作码字段规定微指令的功能微指令较短简单规整便于编写微程序。但由于每条微指令单独编写微程序长执行速度慢工作效率低。3.混合型微指令——将前面两个混起来在垂直型的基础上增加一些不太复杂的并行操作结合上面两个的优点4.4.4 微指令的编码方式微指令的编码方式又称微指令的控制方式指如何对微指令的控制字段进行编码形成控制信号。编码的目标是在保证速度的情况下尽量缩短微指令字长。微命令组成微指令微命令组成微指令微命令组成微指令以水平型微指令为例1.直接编码直接控制方式在微指令的操作控制字段中每一位代表一个微操作命令某位为“1”表示该控制信号有效。即控制字段与微操作一一映射。该编码方式简单直接执行速度快并且操作的并行性好。但这样会导致微指令字长过长n个微命令就要求微指令的操作字段有n位造成控存容量极大。2.字段直接编码方式将微指令的控制字段分成若干“段”每段经过译码后发出控制信号微命令字段分段原则1.互斥性微命令分在同一段内相容性微命令分在不同段内2.每个小段中包含的信息位不能太多否则将增加译码线路的复杂性和译码时间3.一般每个小段还要留出一个状态表示本字段不发出任何微命令。如字段长度为3最多表示7个互斥微命令000表示不操作直接编码的方式可以缩短微指令的字长。但需要通过译码电路后发出微命令因此比直接编码方式慢3.字段间接编码隐式编码当一个字段的某些微命令需要另一个字段的某些微命令来解释时这种方法就称为字段间接编码又称隐式编码简单来说就是在直接译码的基础上再套一层译码。两层译码。通常作为辅助手段在直接编码不能胜任的时候会辅助使用间接编码4.4.5 微指令的地址形成方式编码方式是微指令的内容编码和解读微指令的地址形成方式关乎微指令能否连续执行。1.微指令的下地址字段指出微指令格式中设置一个下地址字段由微指令的下地址字段直接指出后继微指令的地址这种方式又称为断定方式。2.根据机器指令的操作码形成当机器指令取至指令寄存器后微指令的地址由操作码经微地址形成部件形成。即存储在机器指令的操作码中译码后自动取得3.增量计数法不常用类似于 (PC)1-PC机器自动计数加一。(CMAR)1-CMAR4.分支转移不常用直接将分支做到微指令中微指令由操作控制字段转移方式和转移地址组成转移方式指明判别条件转移地址指明转移成功后的去向5.测试网络不常用微指令的不同字段规定了不同的作用类似上面分支转移通过一定的硬件来产生下地址6.硬件产生微程序入口地址不常用如第一条微指令地址由专门硬件产生中断周期由硬件产生中断周期微程序首地址4.4.6 微程序控制器的基本概念总结下图为CPU的大概结构将控制单元CU放大在4.4微程序控制器中我们提到了以下内容1.微命令与微操作微命令是微操作的控制信号微操作是微命令的执行过程2.微指令与微周期微指令是若干微命令的集合微周期通常指从控制存储器中读取一条微指令并执行相应的微操作所需的时间3.主存储器与控制存储器主存储器用于存放程序和数据在CPU外部用RAM实现控制存储器CM用于存放微程序在CPU内部用ROM实现4.程序与微程序程序是指令的有序集合用于完成特定的功能微程序是微指令的有序集合一条指令的功能由一段微程序来实现4.4.7 微程序控制单元的设计设计步骤1.分析每个阶段的微操作序列2.写出对应机器指令的微操作命令及节拍安排3.确定微指令格式4.编写微指令码点写不动了这块不写了。写这么多我真的会看吗 :(到这里已经8000字了啊还有个知识图tm的这么多给人学的啊看完后面忘记前面没事还差一个流水线CPU这块就差不多了5 指令流水线5.1 指令流水的定义一条指令的执行过程可以分成多个阶段或过程。根据计算机的不同具体的分发也不同我们可以简单分为三个阶段取指分析执行。取指根据PC内容访问主存储器取出一条指令送到IR中。分析对指令操作码进行译码按照给点的寻址方式和地址字段中的内容形成操作数的有效地址EA并从有效地址EA中取出操作数。执行根据操作码字段完成指令规定的功能即把运算结果写道通用寄存器或主存中我们可以发现三个阶段用到的硬件不一样于是我们可以有不同的指令执行方式1.顺序执行方式取指k-分析k-执行k-取指k 1-分析k 1-执行k 1即传统冯诺依曼机采用顺序执行方式又称串行执行方式优点控制简单硬件代价小缺点执行指令的速度较慢在任何时刻处理机中只有一条指令在执行各功能部件的利用率很低总耗时T3nt假设取指分析和执行都为t的时间共n条指令2.一次重叠执行方式一次重叠就是在执行的时候同时进行下一轮指令的取指两条指令之间存在一次重叠优点程序的执行时间缩短了1/3部件利用率提高缺点硬件开销变大同时执行过程变复杂总耗时T(1 2n)t3.二次重叠方式两条指令之间存在两次重叠与一次重叠相比再次减少1/3。二次重叠是一种较理想的指令执行方式在正常情况下会有3条指令同时执行优点.........缺点..........总耗时T(2 n)t5.2 流水线的表示方法我们观察发现指令执行存在多种方式即流水线不同。同一条流水线存在不同的表示方式和同一组数据可以用直方图折线图等等来表示一样5.2.1 指令执行过程图和上面的图片的表示方式类似即类似这样的图例表示方式但是会在此基础上加上一些坐标表示如指令序列时间等指令执行过程图一般用于分析指令执行过程以及影响流水线的因素5.2.2 时空图时空图的y轴表示不同阶段所对应的不同硬件资源可以简单理解为物理元件的占用情况或者某阶段是否发生时空图一般用于分析流水线的性能为什么可以用于分析性能可以看下面5.3 流水线的性能指标判断指令流水线的性能主要看三点吞吐率加速比效率。人话就是工作效率吞吐率和之前相比效率提升多少加速比设备被压榨的占比处于工作状态设备占比效率。吞吐率吞吐率指的是在单位时间内流水线所完成的任务数量或是输出结果的数量假设任务数为n处理n个任务所用的时间为则计算流水线吞吐率TP的最基本公式为在理想情况下流水线的时空图为下图一条指令的执行分为k个阶段每个阶段耗时,一般取一个时钟周期得到的计算公式带入上式得到TP计算公式可以看出当n-∞的时候得到最大吞吐率为加速比完成同样一批任务不使用流水线所用的时间与使用流水线所用时间之比假设为不使用流水线的执行时间即顺序执行所用的时间表示使用流水线时的执行时间则计算流水线加速比S的基本公式,在理想情况下计算,带入S的公式得到同样当n-∞的时候最大加速比效率流水线的设备利用率称为流水线的效率效率被定义为完成n个任务占用的时空区有效面积与n个任务所用的时间与k个流水段所围成的时空区总面积之比。则流水线效率的定义就为这样讲起来非常抽象可以看下图本质上就是两个面积之比当连续输入任务n-∞时最高的效率为即空闲的面积可以忽略不计5.4 指令流水线的影响因素流水线可以分为五个流水带指令的执行阶段取指阶段译码阶段执行阶段访存阶段写回阶段。每一个阶段所消耗的时间是不同的为了方便流水线的设计将每个阶段的耗时取成一样以最长耗时为基准。为了保证各阶段耗时相同会在每个功能段部件后面设置一个缓冲寄存器锁存器其作用是保存本流水段的执行结果提供给下一流水段使用本质就是加一个延迟器统一所有流水段的时间。5.4.1 结构相关资源冲突多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。产生原因假设上图中的取指和访存阶段使用的为同一寄存器。就会产生资源冲突解决方式1.对后一相关指令暂停一个周期。即先来先得后来排队2.重复配置资源。即多设置一些存储器让资源充足5.4.2 数据相关数据冲突数据相关指在一个程序中存在必须等前面指令完成以后才可以执行后一条指令的情况则这两条指令数据相关。产生原因前一条指令的数据后一条指令也要用如下图r1在多条指令中都需要。比如第一条和第二条指令r1不能同时存在于ALU和Reg中导致指令流水线运行错误当然如果是指令的顺序执行是可以正常执行的解决办法1.将遇到数据相关的指令和后续指令都暂停一至几个时钟周期直到数据相关问题消失后再继续执行。具体方法分为硬件阻塞stall和软件插入”NOP“插入空指令两种办法。2.使用数据旁路技术。即不等待r1回到寄存器中而是想办法直接从ALU中把r1取出来半路拦截回寄存器的r1让它直接到下一条指令中3.编译优化通过编译器调整指令顺序来避免指令数据冲突。本质上是软件层面的优化5.4.3 控制相关控制冲突当流水线遇到转移指令和其他改变PC值的指令而造成断流时会引起控制相关产生原因比如下图当前运行的指令需要进行跳转直接跳转到第五条指令。但是按照流水线的顺序操作中间的第二到四条指令就报废了粉色部分因为中途插入了第五条指令。解决办法1.提前判断转移是否发生尽早生成转移目标地址看看当前指令有没有跳转2.预取转移成功和不成功两个控制流方向上的目标指令顺序情况和转移的指令都保存这块我不太理解3.加快和提前形成条件码和第一种方式类似但有优化4.提高转移方向的猜准率通过统计学来预测该指令是转移还是不转移从而判断下一条指令是否执行前面已经将流水线的定义图例表示性能指标和影响流水线工作的因素介绍完成了。下面算是一个总结和补充5.5 流水线的分类没啥用处了解即可部件功能级处理机级和处理机间级流水线根据流水线使用的级别的不同流水线可分为部件功能级流水线处理机级流水线和处理机间流水线很拗口部件功能级流水将复杂的算术逻辑运算组成流水线工作方式。如将浮点加法操作分成求阶差、对阶、尾数相加以及规格化等四个子过程这四步组成流水线处理机级流水把一条指令解释过程分成多个子过程。如取指、译码、执行、访存和写回处理机间流水是一种宏流水其中每一个处理机完成某一专门任务各个处理机得到的结果存放在与下一个处理机共享的存储器中单功能流水线和多功能流水线按流水线可以完成的功能分为单功能和多功能单功能流水线只能实现一种固定的专门功能的流水线多功能流水线通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线和工厂流水线类似可以产面包也可以产无人机的流水线动态流水线和静态流水线按同一时间内各段之间的连接方式流水线可分为静态流水线和动态流水线静态指单一任务的流水线动态指单流水线多任务静态流水线同一时间内流水线各段只能按照同一种功能的连接方式工作动态流水线同一时间内当某些段正在实现某种运算时另一些段在进行另一种运算。流水线效率较高但控制复杂线性流水线和非线性流水线按流水线的各个功能段之间是否有反馈信号分为线性和非线性线性流水线从输入到输出每个功能段只经过一次不存在回路单向非线性流水线存在反馈回路某些功能段将数次通过流水线该流水线适合进行线性递归运算存在回路5.6 流水线的多发技术通过一些方法提高流水线的运行效率5.6.1 超标量技术解释黑色部分代表执行部件这个我不确定有疑问的查一下横着每四块为一条指令。通过超标量技术我们可以在每个周期内并发多条独立指令。同时我们发现在t0的时候存在三条指令同时运行所以需要配置多个功能部件具体看需求。由于同时运行多条指令调整指令执行顺序变得异常复杂所以不能调整指令的执行顺序。若想要优化需要通过编译优化技术把可并行执行的指令搭配起来。5.6.2 超流水技术通过在一个时钟周期内再分段让一个功能部件在一个时钟周期内多次使用如上图流水线的效率为正常流水线的三倍。但这样也有坏处即不能调整指令的执行顺序只能靠编译程序解决优化问题5.6.3 超长指令字这个可能比较难理解。由编译程序挖掘出指令间潜在的并行性将多条能并行操作的指令组合成一条最后组成具有多个操作码字段的超长指令字几百位。如上图第一条指令运行到一半的时候发现第一条和第二条之间存在关联于是将他们并行运行将第一条的运行结果暂存给第二条使用以此类推…………