计算机组成原理-Part5——中央处理器

[TOC]

CPU 的功能和结构

CPU 的功能

  1. 指令控制:完成取指令分析指令执行指令的操作,即程序的顺序控制。
  2. 操作控制:CPU 产生并管理一条指令中的若干操作信号,从而控制相应的部件按指令要求进行动作。
  3. 时间控制:为每条指令按时间顺序提供应有的控制信号。
  4. 数据加工:对数据进行算术和逻辑运算
  5. 中断处理:管理总线输入输出;处理异常情况特殊请求
  • 运算器:数据加工
  • 控制器:操作控制时间控制指令控制中断处理

运算器的基本结构

  • 运算器结构:
    • 算术逻辑单元:进行算术/逻辑运算。
    • 通用寄存器组:如 AX、BX、CX、DX、SP 等。用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。
    • 暂存寄存器:用于暂存从主存读来的数据,这个数据不能立即存放在通用寄存器中,否则会破坏其原有内容。
    • 累加寄存器:是一个通用寄存器,用于暂时存放 ALU 运算的结果信息,用于实现加法运算。
    • 程序状态字寄存器(PSW):保留由算术逻辑运算指令或测试指令的结果的各种状态信息,如溢出标志(OP)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。这些位参与并决定微操作的形成
    • 移位器:对运算结果进行移位运算。
    • 计数器:控制乘除运算的操作步数。
image-20211023104243472
  • 专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接线路。
    • 特点:性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现。
  • 针对问题:
    • 如果 ALU 与寄存器组直接用导线连接,相当于多个寄存器同时并且一直向 ALU 传输数据
  • 改进方向:
    • 解决方法1:使用多路选择器根据控制信号选择一路输出
    • 解决方法2:使用三态门可以控制每一路是否输出
image-20211023105644925
  • CPU 内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共的通路上。
    • 特点:结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低。
  • 针对问题:
    • ALU 的计算结果会在电流不稳定时直接传回 CPU 内部总线,破坏寄存器信息
  • 改进方向:
    • 在 ALU 后加入暂存寄存器三态门来等待稳定之后再将结果写入寄存器
    • 通常会把 ALU 后的寄存器添加移位功能

控制器的基本结构

image-20211023121447512

  1. 程序计数器:存放下一条指令在主存中的地址。CPU 会根据 PC 的内容去主存中取指令。通常 PC 有自增功能,有的也会交给 ALU 进行加一。
  2. 指令寄存器:用于保存当前正在执行的指令。
  3. 指令译码器:仅对操作码字段进行译码,向控制器提供特定的操作信号。
  4. 微操作信号发生器:根据 IR 的内容(指令)、PSW 的内容(状态信息)及时序信号(时序脉冲),产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型存储逻辑型两种。
  5. 时序系统:用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到。
  6. 存储器地址寄存器:用于存放所要访问的主存单元地址。
  7. 存储器数据寄存器:用于存放向主存写入的信息或从主存中读出的信息。

总结

image-20211023122455417

  • 用户可见寄存器:通用寄存器组、程序状态字寄存器 PSW、程序计数器 PC
  • 用户不可见寄存器:MAR、MDR、IR、暂存寄存器

指令执行过程

指令周期

  • image-20211023123259434image-20211023123229871
  • 指令周期:CPU 从主存中每取出并执行一条指令所需的全部时间。
    • 指令周期常常用若干机器周期CPU 周期)来表示。
    • 一个机器周期又包含若干时钟周期(也称为节拍T 周期主频的倒数CPU 时钟周期,它是 CPU 操作的最基本单位)。
  • 每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等
    • image-20211023124356581

指令周期数据流

  • image-20211023130107891
  • 四个工作周期都有CPU访存操作,只是访存的目的不同。

    • 取指周期是为了取指令
    • 间址周期是为了取有效地址
    • 执行周期是为了取操作数
    • 中断周期是为了保存程序断点
  • 取指周期(所有指令都一样)

    • (PC) → MAR:当前指令地址送至存储器地址寄存器
    • 1 → R:CU 发出控制信号,经控制总线传到主存,这里是给读信号接口输送一个高电平
    • M(MAR) → MDR:将 MAR 所指主存中的内容经数据总线送入 MDR
    • (MDR) → IR:将 MDR 中的内容(此时是指令)送入 IR
    • OP(IR) → ID:将指令(IR 中的操作码部分)传入指令译码器(Instruction Decoder,ID)
    • (PC)+1 → PC:CU 发出控制信号,形成下一条指令地址
  • 间址周期(所有指令都一样)

    • Ad(IR/MDR) → MAR:将指令的地址码送入 MAR
    • 1 → R:CU 发出控制信号,启动主存做读操作
    • M(MAR) → MDR:将 MAR 所指主存中的内容经数据总线送入 MDR
    • (MDR) → Ad(IR):将最终的有效地址(IR 中的地址码部分)送至指令的地址码字段
  • 执行周期(各不相同)

    • 执行周期的任务是根据 IR 中的指令字的操作码和操作数通过 ALU 操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。
    • CLA:clear ACC(ACC清零)
      • 0 → AC
    • LDA X:load ACC(把X所指内容取到ACC)
      • Ad ( IR ) → MAR
      • 1 → R
      • M ( MAR ) → MDR
      • MDR → AC
    • JMP X:(无条件转移)
      • Ad(IR) → PC
    • BAN X:Branch ACC Negative(当ACC为负时转移)
      • A0 • Ad (IR) + (!A0) • (PC) → PC
  • 中断周期

    • 中断:暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。一般使用堆栈来保存断点,假设 SP 指向栈顶元素(低地址部分)。进栈操作是先修改指针,后存入数据。
    • 中断周期三个任务:
      • 保存断点
      • 形成中断服务程序的入口地址
      • 关中断
    • (SP)-1 → SP,(SP) → MAR:CU 控制 SP 减1,修改后的地址送入 MAR
    • 1 → W:CU 发出控制信号,启动主存做写操作
    • (PC) → MDR:将断点(PC 内容)送入 MDR
    • 向量地址 → PC:CU 控制将中断服务程序的入口地址(由向量地址形成部件产生)送入 PC

指令执行方案

  • 一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
  • 单指令周期
    • 所有指令都选用相同的执行时间来完成,指令之间串行执行。
    • 指令周期取决于执行时间最长的指令的执行时间。对于可以在更短时间内完成的指令,要使用等待至最长的周期,会降低系统的运行速度。
  • 多指令周期
    • 对不同类型的指令选用不同的执行步骤来完成 ,指令之间串行执行。
    • 可选用不同个数的时钟周期来完成不同指令的执行过程 。需要更复杂的硬件设计。
  • 流水线方案
    • 在每一个时钟周期启动一条指令,让多条指令处在不同的执行步骤同时运行,指令之间并行执行。

数据通路(大题高频)

  • 数据通路:数据在功能部件之间传送的路径。
    • 寄存器-寄存器
    • 寄存器-主存
    • 寄存器-ALU
  • 数据通路的基本结构:
    • CPU 内部单总线方式(ALU 必须配合暂存寄存器使用)
    • CPU 内部多总线方式(相比单总线成本更高,但是数据传输更有效率)
    • 专用数据通路方式

单总线结构

  • image-20211023141239720
  • 寄存器之间数据传送
    • (PC)→Bus:PCout 有效(PC 内容送总线)
    • Bus→MAR:MARin 有效(总线内容送 MAR)
  • 主存与CPU之间的数据传送
    • (PC)→Bus→MAR:PCout 和 MARin 有效(现行指令地址→MAR)
    • 1→R:CU 发读命令
    • MEM(MAR)→MDR:MDRinE 有效
    • MDR→Bus→IR:MDRout 和 IRin 有效(现行指令→IR)
  • 执行算术或逻辑运算
    • Ad(IR/MDR)→Bus→MAR:MDRout 和 MARin 有效
    • 1→R:CU 发读命令
    • MEM(MAR)→数据线→MDR:MDRin 有效
    • MDR→Bus→Y:MDRout 和 Yin 有效(操作数→Y)
    • (ACC)+(Y)→Z:ACCout 和 ALUin 有效(CU 向 ALU 发送加命令)
    • Z→ACC:Zout 和 ACCin 有效(结果→ACC)

专用通路结构

  • image-20211023145547590
  • 取指周期
    • (PC)→MAR:C0有效
    • (MAR)→主存:C1有效
    • 1→R:控制单元向主存发送读命令
    • M(MAR)→MDR:C2有效
    • (MDR)→IR:C3有效
    • (PC)+1→PC
    • Op(IR)→CU:C4有效

数据通路是计组大题高频考点!一定要做题巩固!

控制器的功能和工作原理

基本原理

  • 硬布线控制器:使用纯硬件的方式来实现控制器的功能
  • 微程序控制器:使用软硬件结合的方式来实现控制器的功能
  • image-20211023185221891
  • CPU 会在每个时钟周期内发出一个微命令,即完成一个对应微操作的控制信号。
    • 如,微命令1 使得 PCout、MARin 有效,从而完成对应的微操作1 (PC)->MAR。
    • 微命令与微操作是相互对应的
    • 特点:
      1. 多个相容的微操作是可以在一个节拍内并行的。比如使用专用通路结构就可以提高微命令的并行数量
      2. 同一个微操作可能在不同的指令阶段中重复使用
      3. 在定长机器周期中,通常以访存所需节拍数作为参考
      4. 若实际所需节拍数较少,可将微操作安排在机器周期末尾进行
  • 根据指令操作码当前的机器周期节拍信号机器状态条件,即可确定现在这个节拍下应该发出哪些“微命令”
  • CPU 所处的周期由四个不同的触发器确定。

硬布线控制器

  • image-20211023190651176
  • 设计步骤
    1. 分析每个阶段的微操作序列(哪些指令在什么阶段什么条件下会使用到什么微操作
    2. 选择 CPU 的控制方式(定长/不定长周期,每个周期的节拍数)
    3. 安排微操作时序
    4. 电路设计(逻辑表达式与电路设计)
      • 列出操作时间表
      • 写出微操作的最简表达式
      • 画出逻辑图
  • 安排微操作时序的原则
    1. 微操作的先后顺序不得随意更改
    2. 被控对象不同的微操作尽量安排在一个节拍内完成
    3. 占用时间较短的微操作尽量安排在一个节拍内完成,允许有先后顺序
  • 取指周期:
    • image-20211023194220430
    • M ( MAR ) -> MDR:从主存取数据,用时较长,因此必须一个时钟周期才能保证微操作的完成
    • MDR -> IR:是 CPU 内部寄存器之间的数据传送,速度很快,因此在一个时钟周期内可以紧接着完成第二个微命令 OP ( IR ) -> ID。
  • 间址周期:
    • image-20211023194429655
  • 执行周期:
    • image-20211023194744913
  • 缺点:
    • 指令越多,设计、实现就越复杂,因此一般用于 RISC(精简指令集系统)
    • 如果扩充一条新的指令,则控制器的设计就需要大改,因此扩充指令较困难
  • 优点:
    • 由于使用纯硬件实现控制,因此执行速度很快
    • 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即时产生

微程序控制器(考点)

基本原理

微程序的概念
  • image-20211024094522115
  • 基本思想:采用“存储程序”的思想,CPU 出厂前将所有指令的“微程序”存入“控制器存储器”中
  • 层次结构:
    • 程序:由指令序列组成
    • 微程序
      • 微指令序列组成,每一种指令对应一个微程序
      • 取指、间指、执行、中断周期微程序段,共同组成一个微程序
    • 指令:是对程序执行步骤的描述
      • 指令/微程序是对微指令功能的“封装”
      • 是一个微指令序列
    • 微指令:是对指令执行步骤的描述
      • 微指令中可能包含多个微命令
      • 每一个微命令对应一个微操作每一个微命令对应一条输出控制线
微程序控制器基本结构
  • image-20211024180509785
  • 微地址形成部件:产生初始微地址和后继微地址,以保证微指令的连续执行。
  • CMAR:又称 μPC,微地址寄存器,接收微地址形成部件送来的微地址,为在 CM 中读取微指令作准备。
  • 地址译码:将地址码转化为存储单元控制信号。
  • 控制存储器 CM:简称控存,用于存放各指令对应的微程序,控制存储器是由只读存储器 ROM 构成。
  • CMDR:别名:μIR,用于存放从 CM 中取出的微指令,它的位数同微指令字长相等。
  • 顺序逻辑
    • 根据指令地址码的寻址特征位判断是否要跳过间址周期
    • 根据中断信号判断是否进入中断周期
  • 所有指令的取指周期间址周期中断周期所对应的微指令序列都一样,可以共享使用
  • 取指周期微程序:(常考)
    • 通常是公用的,故如果某指令系统中有 n 条机器指令,则 CM 中微程序(段)的个数至少是 n+1
    • 一些早期的 CPU、物联网设备的 CPU 可以不提供间接寻址和中断功能,因此这类 CPU 可以不包含间址周期、中断周期的微程序段
  • 有的选择题中,虽然取指周期、执行周期在物理上是两个微程序,但逻辑上应该把它们看作一个整体。即,一条指令对应一个微程序

微指令的设计

微指令的格式
  • 水平型微指令:一条微指令能定义多个可并行的微命令。
    • 优点:微程序短,执行速度快;
    • 缺点:微指令长,编写微程序较麻烦。
    • image-20211024182849406
  • 垂直型微指令:一条微指令只能定义一个微命令由微操作码字段规定具体功能
    • 优点:微指令短、简单、规整,便于编写微程序;
    • 缺点:微程序长,执行速度慢,工作效率低。
    • image-20211024182907683
  • 混合型微指令:
    • 在垂直型的基础上增加一些不太复杂的并行操作。
    • 微指令较短,仍便于编写;微程序也不长,执行速度加快。
  • 相容性微命令:可以并行完成的微命令。
  • 互斥性微命令:不允许并行完成的微命令。
微指令的编码方式(高频)

微指令的编码方式,又称微指令的控制方式,指如何对微指令的控制字段进行编码,以形成控制信号。目标是在保证速度的情况下,尽量缩短微指令字长。

  1. 直接编码(直接控制)方式
    • 在微指令的操作控制字段中,每一位代表一个微操作命令,某位为 1 表示该控制信号有效
    • 优点:简单、直观,执行速度快,操作并行性好。
    • 缺点:微指令字长过长,n 个微命令就要求微指令的操作字段有 n 位,造成控存容量极大。
    • image-20211024205924843
  2. 字段直接编码方式
    • 将微指令的控制字段分成若干“段”,每段经译码后发出控制信号微命令字段分段的原则:
      • 互斥性微命令分在同一段内相容性微命令分在不同段内。不同段/不同互斥类/相容的微命令可以并行
      • 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间。
      • 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为 3 位时,最多只能表示 7 个互斥的微命令,通常用 000 表示不操作
    • 优点:可以缩短微指令字长。
    • 缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢 。
    • image-20211024210134498
  3. 字段间接编码方式
    • 一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码。
    • 优点:可进一步缩短微指令字长。
    • 缺点:削弱了微指令的并行控制能力。通常作为字段直接编码方式的一种辅助手段。
    • image-20211024210333131
微指令的地址形成方式
  1. 断定方式(常考):微指令的下地址字段直接指出后继微指令的地址。
  2. 根据机器指令的操作码形成:当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。(不常考)
  3. 增量计数器法(常考):(CMAR) + 1 -> CMAR/μPC
  4. 分支转移:操作控制字段+转移方式+转移地址。转移方式,指明判别条件;转移地址,指明转移成功后的去向。(不常考)
  5. 通过测试网络(不常考)
  6. 硬件产生微程序入口地址:
    • 第一条微指令地址:由硬件产生(用专门的硬件记录取指周期微程序首地址)
    • 中断周期:由硬件产生中断周期微程序首地址(用专门的硬件记录)

微程序控制单元的设计

  • image-20211024232747714

  • 设计步骤:

    1. 分析每个阶段的微操作序列

    2. 写出对应机器指令的微操作命令及节拍安排

      • 写出每个周期所需要的微操作(参照硬布线)

      • 补充微程序控制器特有的微操作:

        a. 取指周期:

        • Ad ( CMDR ) -> CMAR(每条微指令结束都要进行)
        • OP ( IR ) -> 微地址形成部件 -> CMAR(取指周期结束,根据指令操作码确定其执行周期的微程序首地址)

        b. 执行周期:

        • Ad(CMDR) -> CMAR(每条微指令结束都要进行,最后一条微指令的下地址是 0)
    3. 确定微指令格式

      • 根据微操作个数决定采用何种编码方式,以确定微指令的操作控制字段的位数
      • 根据 CM 中存储的微指令总数,确定微指令的顺序控制字段的位数
      • 最后按操作控制字段位数和顺序控制字段位数就可确定微指令字长
    4. 编写微指令码点

      • 根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点。
  • 读出微指令:

    • 取指周期的第一条微指令地址由硬件自动给出
    • 用微指令 a 的下地址表示 b 的地址。上一条微指令的下地址部分转到下一条微指令的译码,同样需要消耗一个节拍

微程序设计分类

  1. 静态微程序设计和动态微程序设计
    • 静态:微程序无需改变,采用 ROM
    • 动态:通过改变微指令微程序改变机器指令。有利于仿真,采用 EPROM
  2. 毫微程序设计
    • 微程序设计:用微程序解释机器指令
    • 毫微程序设计:用毫微程序解释微程序
    • 毫微指令与微指令的关系好比微指令与机器指令的关系

硬布线与微程序的比较

对比项目 微程序控制器 硬布线控制器
工作原理 读出微程序 电路即时产生
执行速度
规整性 较规整 繁琐,不规整
应用场合 CISC CPU RISC CPU
易扩充性 易扩充修改 困难

总结

image-20211024235150778

指令流水线(大题考察)

指令流水线的基本概念

定义

  • 指令流水:一条指令的执行过程可以分成多个阶段(或过程)。根据计算机的不同,具体的分法、数量也不同。
    • 取指(Instruction Fetch,IF)、分析(Instruction Decode,ID)、执行(Execute)、Memory、Writeback
    • 分成 5 个阶段的 RISC 是比较常见的考法。

执行方式

  • 顺序执行方式:
    • 总耗时 T = n×3t = 3nt
    • 传统冯·诺依曼机采用顺序执行方式,又称串行执行方式。
    • 优点:控制简单,硬件代价小。
    • 缺点:执行指令的速度较慢,在任何时刻,处理机中只有一条指令在执行,各功能部件的利用率很低。
  • 一次重叠执行方式:
    • 总耗时T = 3t + (n-1)×2t = (1+2n)t
    • 优点:程序的执行时间缩短了1/3,各功能部件的利用率明显提高。
    • 缺点:需要付出硬件上较大开销的代价,控制过程也比顺序执行复杂了。
  • 二次重叠执行方式:
    • 总耗时T = 3t + (n-1)×t = (2+n)t
    • 与顺序执行方式相比,指令的执行时间缩短近2/3。这是一种理想的指令执行方式,在正常情况下,处理机中同时有3条指令在执行。

表示方法(重要)

  • image-20211025092552132
  • 指令执行过程图:主要用于分析指令执行过程以及影响流水线的因素
  • 时空图:主要用于分析流水线的性能

性能指标(重要)

image-20211025093530754

一条指令的执行分为 k 个阶段,每个阶段耗时 Δt ,一般取 Δt=一个时钟周期(应该是机器周期,在理想情况下可以当做时钟周期)

  • 吞吐率:在单位时间内流水线所完成的任务数量。
    • 吞吐率计算公式:$TP = \frac{n}{T_{k}}$
    • 实际吞吐率为:$TP = \frac{n}{(k+n-1)Δt}$
    • 当连续输入的任务 n→∞ 时,最大吞吐率为 TPmax=1/Δt。
  • 加速比:完成同样一批任务,不使用流水线所用的时间使用流水线所用的时间之比。
    • 加速比公式:$S = \frac{T_{0}}{T_{k}}$
    • 实际加速比:$S = \frac{knΔt}{(k+n-1)Δt} = \frac{kn}{(k+n-1)}$
    • 当连续输入的任务 n→∞ 时,最大加速比为 Smax=k。
  • 效率:流水线的设备利用率称为流水线的效率。
    • 在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积n个任务所用的时间与k个流水段所围成的时空区总面积之比。
    • 效率公式:$E = \frac{n个任务占用k时空区有效面积}{n个任务所用的时间与k个流水段所围成的时空区总面积}=\frac{T_{0}}{kT_{k}}$
    • 当连续输入的任务 n→∞ 时,最高效率为 Emax=1。
    • image-20211025095147120

指令流水线的影响因素和分类

影响流水线的因素(重要)

  • 结构相关(资源冲突)
    • 由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
    • 解决办法:
      • 后一相关指令暂停一周期
      • 资源重复配置:数据存储器+指令存储器
    • image-20211025102708962
  • 数据相关(数据冲突)
    • 数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关。
    • 解决办法:
      • 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)软件插 入(NOP)两种方法。
      • 数据旁路技术(转发机制):通过增加电路(数据旁路),将上一步的 ALU 结果直接送入下一步的 ALU
      • 编译优化:通过编译器调整指令顺序来解决数据相关。
    • image-20211025102758077
  • 控制相关(控制冲突)
    • 当流水线遇到改变 PC 值的指令(如转移指令、CALL、中断)而造成断流时,会引起控制相关。
    • 解决办法:(由转移指令发生)
      • 转移指令预测。简单预测(永远猜true或false)动态预测(根据历史情况动态调整)
      • 预取转移成功和不成功两个控制流方向上的目标指令(需要增加至能够支持两个方向的寄存器数量)
      • 加快和提前形成条件码(类似于全加器并行)
      • 提高转移方向的猜准率
    • image-20211025103223036

image-20211025103334530

流水线的分类

  • 部件功能级、处理机级和处理机间级流水线(流水线使用的级别)
    • 部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
    • 处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回 5 个子过程。
    • 处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
  • 单功能流水线和多功能流水线(流水线可以完成的功能)
    • 单功能流水线指只能实现一种固定的专门功能的流水线
    • 多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线
  • 动态流水线和静态流水线(同一时间内各段之间的连接方式)
    • 静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
    • 动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。
  • 线性流水线和非线性流水线(各个功能段之间是否有反馈信号)
    • 线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
    • 非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。

流水线的多发技术

  • 超标量技术(空分复用)
    • 每个时钟周期内可并发多条独立指令
    • 要配置多个功能部件(多个 ALU、寄存器组)
    • 不能调整指令的执行顺序(乱序发射 CPU 可以调整顺序)
    • 通过编译优化技术,把可并行执行的指令搭配起来
    • image-20211025105329051
  • 超流水技术(时分复用)
    • 一个时钟周期内再分段(3段)
    • 在一个时钟周期(机器周期,理想情况下min机器周期->时钟周期)内一个功能部件使用多次( 3 次)
    • 不能调整指令的执行顺序
    • 靠编译程序解决优化问题
    • image-20211025105518773
  • 超长指令字
    • 编译程序挖掘出指令间潜在的并行性
    • 多条能并行操作的指令组合成 一条
    • 具有多个操作码字段的超长指令字(可达几百位)
    • 采用多个处理部件

五段式指令流水线

基本概念

  • image-20211025100227733
  • 为方便流水线的设计,将每个阶段的耗时取成一样,以最长耗时为准。即此处应将机器周期设置为 100ns。
  • 流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。
  • ① IF 取指 -> ② ID 译码&取数 -> ③ EX 执行 -> ④ M 访存 -> ⑤ WB 写回寄存器
  • 考试中常见的五类指令:
    • 运算类指令LOAD 指令STORE 指令条件转移指令无条件转移指令

运算类指令的执行过程

  • IF:根据 PC 从指令 Cache 取指令至 IF 段的锁存器
  • ID:取出操作数至 ID 段锁存器
  • EX:运算,将结果存入 EX 段锁存器
  • M:空段(RISC 指令集不会在运算指令中访问主存,但是这段时间周期是需要消耗的)
  • WB:将运算结果写回指定寄存器
运算类指令举例 指令的汇编格式 功能
加法指令(两个寄存器相加) ADD Rs, Rd (Rs)+(Rd) -> Rd
加法指令(寄存器与立即数相加) ADD #996, Rd 996+(Rd) -> Rd
算数左移指令 SHL Rd (Rd)<<<2 -> Rd
  • Rs 指源操作数(source)
  • Rd 指目的操作数(destination)

LOAD 指令的执行过程

  • IF:根据 PC 从指令 Cache 取指令至 IF 段的锁存器
  • ID:将基址寄存器的值放到锁存器 A,将偏移量的值放到 Imm
  • EX:运算,得到有效地址
  • M:从数据 Cache 中取数并放入锁存器
  • WB:将取出的数写回寄存器
  • LOAD 也需要经过运算,才能得到有效地址
指令的汇编格式 功能
LOAD Rd, 996(Rs) 或 LOAD Rd, mem (996+(Rs)) -> Rd 或 (mem) -> Rd

通常,RISC 处理器只有“取数 LOAD”和“存数 STORE”指令才能访问主存

STORE 指令的执行过程

  • IF:根据 PC 从指令 Cache 取指令至 IF 段的锁存器
  • ID:将基址寄存器的值放到锁存器 A,将偏移量的值放到 Imm。将要存的数放到 B
  • EX:运算,得到有效地址。并将锁存器 B 的内容放到锁存器 Store。
  • M:写入数据 Cache
  • WB:空段
指令的汇编格式 功能
STORE Rs, 996(Rd) 或 STORE Rs, mem Rs -> (996+(Rd)) 或 Rs -> (mem)

条件转移指令的执行过程

  • IF:根据 PC 从指令 Cache 取指令至 IF 段的锁存器

  • ID:进行比较的两个数放入锁存器 A、B;偏移量放入 Imm

  • EX:运算,比较两个数

  • M:将目标 PC 值写回 PC(修改 PC 值不在写回阶段而是访存阶段

  • WB:空段(写回阶段通常是修改通用寄存器

  • 转移类指令常采用相对寻址

  • 很多教材把写回 PC 的功能段称为“WrPC 段”,其耗时比 M 段更短,可安排在 M 段时间内完成。

  • 通常在 IF 段结束止之后 PC 就会自动 +“1”

指令的汇编格式 功能
beq Rs, Rt, #偏移量 若(Rs)==(Rt),则**(PC)+指令字长+(偏移量×指令字长) -> PC;否则(PC)+指令字长 -> PC**
bne Rs, Rt, #偏移量 若(Rs)!=(Rt),则**(PC)+指令字长+(偏移量×指令字长) -> PC;否则(PC)+指令字长 -> PC**

无条件转移指令的执行过程

  • IF:根据 PC 从指令 Cache 取指令至IF段的锁存器
  • ID:偏移量放入 Imm
  • EX:将目标 PC 值写回 PC(这里修改 PC 值不在写回阶段而又是在执行阶段
  • M:空段
  • WB:空段
  • “WrPC段”耗时比 EX 段更短,可安排在 EX 段时间内完成。尽早完成 WrPC 段、修改 PC 值,就越能避免控制冲突。当然,也有的地方会在 WB 段时间内才修改 PC 的值
  • 偏移量通常采用补码表示
指令的汇编格式 功能
jmp #偏移量 (PC)+指令字长+(偏移量×指令字长) -> PC