『计算机组成原理』跟着博主玩转计算机组成结构--中央处理器CPU(不知道CPU干啥的小伙伴看过来)

『计算机组成原理』跟着博主玩转计算机组成结构–中央处理器 CPU(不知道 CPU 干啥的小伙伴看过来)

写在前面: 全文借鉴白中英唐朔飞老师的书,是对老师的书中所讲的知识按照考研大纲(一般校考的重点也相同)的重点形式来排序进行二次创作。

本文面向对象:计算机系考研学生,计算机系在读学生,学习计算机组成原理的本科生
本文写作背景:博主也在学习计算机组成原理,并对计算机组成原理通透理解,一是为了自己复习考研时能够有所依赖,二是为了造福所有读者。
本文构成:大的框架是五大部件,也会穿插一些小节,去两本书中优秀之处和互为补充,最后通过自己的理解给大家以便于接受和理解的方式,用精炼的语言给大家描述,以及文中自己有特殊理解的也会在文中体现。本文也绝非照抄全书,而是按照全书的行文方式和内容给大家经过自己的理解后的讲解。所以不能替代原书,希望大家能够在学有余力的基础上,购买原书。(一般我应该写的比书上要全一点,有侧重点,所以要想看原本的知识,或者我有什么讲错了的,建议参考原书,相互补充。==而且我之所以把考研大纲放在这里,是怕不同的年份具体的考研大纲不同,所以一定要跟当年的考研大纲作比较==,基本不变)
注意两本经典是:唐朔飞老师和白中英老师的书,不是其他任何人的书。
本文的图大部分是博主自己画的,有使用老师 PPT 进行制作的,也有在百度图片上找的,如果是图片的作者,请私信本人,本人将在文章开头公示您的名字,因为百度图片,作者不详,所以冒昧的先使用,多多见谅,如不能使用,本立即删除。
> 最后:2021 年考研加油

@[toc]

考研大纲要求:

  1. 中央处理器(CPU)的功能和基本结构
  2. 指令执行过程
    1. ==给出数据通路,写出 取指周期、间址周期、执行周期和中断周期的微操作流程==
  3. 数据通路的功能和基本结构
  4. 控制器的功能和工作原理
    1. 硬布线控制器(组合逻辑控制器)
    2. 微程序控制器
      1.==微程序、微指令和微命令(微操作) ,微指令格式,微命令的编码方式,微地址的形成方式。==
  5. 指令流水线
    1. ==指令流水线的基本概念==
    2. ==指令流水线的基本实现==
    3. 超标量和动态流水的基本概念
  6. 中断系统


一、CPU 的功能

1.控制器的功能:

  1. 控制器的能自动的形成指令的地址,并能发出取指令的命令,将对应此地址的指令取到控制器中,成为指令控制
  2. 取到指令之后,要产生完成每条指令的控制命令。称为操作控制
  3. 控命令产生后,需要对各条控制命令加以时间上的控制,称为时间控制
  4. 处理异常情况和特殊请求称为中断处理
  5. 总线管理功能

2.运算器的功能

  1. 实现算术运算和逻辑运算 称为数据加工

3.功能执行顺序

在这里插入图片描述

4.计算机其他功能

CPU 的工作过程就是不停的执行指令,计算机各个部分的所进行的工作可以说都是由 CPU 根据指令来启动的(指的是进入操作系统之后,纯硬件的话还是有南北桥)。因为 CPU 的速度太快,为了使 CPU 减少等待时间,甚至不参与计算机输入输出过程(等待时间太久),采取程序中断的方式和 DMA 的方式。这两种方式下,外部设备需要向 CPU 提出中断请求或 DMA 请求,因此在执行指令过程中,CPU 还要按时通过采样相应的引脚来查询有没有中断请求或 DMA 请求。一般, 在一个机器 周期结束时,查询是否有 DMA 请求,如果有,则 CPU 脱离总线,由 DMA 控制器控制使用总线。在一个指令周期结束时,查询是否有中断请求,如果有,则进入中断响应机器周期,相当于执行了一条中断响应隐指令。在中断响应过程中,得到中断服务程序的入口地址,并送程序计数器(PC)中,下个指令周期开始时,取出中断服务程序的第一条指令 执行。

==不是很重要,为了方便理解的补充== DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。
DMA 传输将数据从一个地址空间复制到另外一个地址空间。当 CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统算法和网络是很重要的。
在实现 DMA 传输时,是由 DMA 控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即 DMA 传输前,CPU 要把总线控制权交给 DMA 控制器,而在结束 DMA 传输后,DMA 控制器应立即把总线控制权再交回给 CPU。一个完整的 DMA 传输过程必须经过 DMA 请求、DMA 响应、DMA 传输、DMA 结束 4 个步骤。
在这里插入图片描述

二、CPU 结构框图

1.CPU 与系统总线

在这里插入图片描述

2.CPU 内部结构

在这里插入图片描述

3.运算器中的寄存器

  • 暂存寄存器:
    用于暂时存放从主存中读取来的数据,这个数据不能放在通用寄存器中,否则会破坏其原有的内容。
  • 累加寄存器(ACC)
    累加寄存器通常简称累加器,他是一个通用寄存器。功能是:当运算器的 ALU 单元执行算数或逻辑运算时,为 ALU 提供一个工作其,累加寄存器也暂存 ALU 运算的结果。
    一般通用寄存器的数量在 16 个以上,因此需要在指令格式中对寄存器号加以编址。·
  • 通用寄存器
    可以作为某种寻址方式的专用寄存器,主要用于放操作数(源操作数和,目的操作数,以及中间结果)常见的通用寄存器有 AX、BX、CX、DX、以及堆栈指针 SP(指示栈顶地址)等。
  • 状态条件寄存器(PSW)
    状态条件寄存器,也叫程序状态字寄存器,保存由算术指令和逻辑指令运行和测试的结果建立的各种条件码内容,如运算结果进位标志 C,运算结果溢出标志 V,运算结果为 0 标志 Z,运算结果为负的标志 N,这些标志通常分别由一位触发器保存。

4.控制器中的寄存器

  • 程序计数寄存器(PC)
    为了能够保证程序能够持续不断地执行,CPU 必须采取程序计数器这一手段,通常程序计数器又称为指令计数器。在程序开始前,必须将它的起始地址,及程序的第一条指令的所在内存单元的地址送入 PC。当执行指令时 CPU 会自动修改 PC 的内容,以便使其保存的总要是将要执行的下一条指令地址。但是要注意 JUMP 类指令取出时,PC 仍是先加 1,因为此时 JUMP 指令还未执行,当加 1 后在执行跳转命令。因此程序计数器是具有寄存信息和计数两种功能。
  • 指令寄存器(IR)
    指令寄存器用来保存当前正在执行的指令(内容不可变),当执行一条指令时,先把它从内存取到数据缓冲寄存器中,然后传至指令寄存器。指令划分为操作码和地址码字段(参见指令系统章节),是以二进制形式存储。 为了执行任何给定的指令,必须对操作码进行测试,以便识别所要求的操作。指令译码器就是做这项工作的。指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码后,即可向操作控制器发出具体操作的特定信号。
  • 存储器数据寄存器(MDR)
    主存数据寄存器(MDR),与主存地址寄存器(MAR)帮助完成 CPU 和主存储器之间的通信,MDR 暂存要被写入地址单元或者从地址单元读出的数据。即暂存从主存读入一条指令或数字,反之,写入前也要有 MDR 暂存。
    作用: 1. 作为 CPU、内存和外部设备之间信息传送的中转站。 2. 补偿作为 CPU、内存和外部设备之间在操作速度上的差别。 3. 在单累加器结构的运算器中,MDR 还可作为操作数寄存器。
  • 储存器地址寄存器(MAR)
    用于存放将被访问的存储单元的地址。

5.用户是否可见(2010 年考研考察)

  • 可见
    即程序员可以通过程序去访问的寄存器:
    • 通用寄存器
    • 数据寄存器
    • 地址寄存器
    • 条件码寄存器 PSW
    • 程序计数器 PC
  • 不可见
    即 CPU 内部工作寄存器:
    •  指令寄存器 IR
      
    • 储存器地址寄存器 MAR
    • 存储器数据寄存器 MDR

三、计算机执行指令的过程

1.指令周期的基本概念

在这里插入图片描述

  1. 指令周期: 一条指令从取指令到执行完成的时间间隔

  2. CPU 周期通常又称时钟周期:
    通常把一条指令周期划分为若干个机器周期,每个机器周期完成一个基本操作。主存的工作周期(存取周期)为基础来规定 CPU 周期,比如,可以用 CPU 读取一个指令字的最短时间来规定 CPU 周期不同的指令,可能包含不同数目的 CPU 周期。一个 CPU 周期中,包含若干个节拍脉冲(T 周期)。
    指令执行方案: - 单周期的 CPU 会在一个时钟周期内完成所有的工作,既从指令取出,到得到结果,全部在一个时钟之内完成。

     - 多周期CPU的设计是将整个CPU的执行过程分成几个阶段,每个阶段用一个时钟去完成。不仅能提高CPU的工作频率,还为组成指令流水线提供了基础。
    
    - 在多周期CPU设计的基础上,利用各阶段电路间可并行执行的特点,让各个阶段的执行在时间上重叠起来,这种技术就是流水线技术。
    
  3. 时钟周期
    在一个 CPU 周期内,要完成若干个微操作。这些微操作有的可以同时执行,有的需要按先后次序串行执行。因而需要把一个 CPU 周期分为若干个相等的时间段,每一个时间段称为一个节拍脉冲或 T 周期。
    时钟周期通常定义为机器主频的倒数。时钟周期不等于 T 周期

补充:详情参见计算机性能指标

时钟周期:一个时钟脉冲所需要的时间。在计算机组成原理中又叫 T 周期或节拍脉冲。是 CPU 和其他单片机的基本时间单位。它可以表示为时钟晶振频率(1 秒钟的时钟脉冲数)的倒数(也就是 1s/时钟脉冲数,比如 1/12MHz),对 CPU 来说,在一个时钟周期内,CPU 仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。时钟频率越高,时钟周期就越短,工作速度也就越快。时钟周期在 CPU 的描述里也叫节拍,即将一个机器周期划分成若干个相等的时间段,每一段仅完成一个基本操作,用一个电平信号宽度对应。举例:(个人理解)工作频率为 100MHZ 的芯片的时钟周期为 10000ns,理解为 1s(10 的 9 次方 ns)内的时钟周期个数为 10 的 8 次方,所以每个时钟周期的时间长为 10 的 9 次方 ns/10 的 8 次方个时钟周期,结果为 10ns。

总线周期:cpu 从内存中读取指令,向内存中存取数据,对外设端口读写数据,执行总线周期,总线周期通常包含 4 个 T 状态:T1,T2,T3,T4。所谓一个 T 状态就是一个时钟周期。它是 CPU 执行操作的最小时间单位。

机器周期:通常用从内存中读取一个指令字的最短时间来规定 CPU 周期(机器周期),也即 CPU 完成一个基本操作所需的时间。通常一个机器周期包含 12 个时钟周期,在 8051 系列单片机的一个机器周期由 6 个 S 周期(状态周期)组成。 一个 S 周期=2 个节拍(P),也就是一个状态周期包含 2 个时钟周期,所以 8051 单片机的一个机器周期=6 个状态周期=12 个时钟周期。又称 CPU 的工作周期或基本周期,总线周期。

指令周期:执行一条指令所需要的时间,是从取指令、分析指令到执行完指令所需的全部时间,计算机中,常把一条指令的执行过程划分为若干个阶段,每一个阶段完成一项工作。每一项工作称为一个基本操作,完成一个基本操作所需要的时间称为机器周期,所以一个指令周期一般由若干个机器周期组成。指令不同,所需的机器周期也不同,比如一个复杂指令可能需要很多个机器周期才能完成,而每个机器周期又由多个时钟周期完成。

2.完整的指令周期流程

指令周期: 取出并执行一条指令所需的全部时间

  • 取指周期
  • 间址周期
    在这里插入图片描述
    在这里插入图片描述

不同指令的指令周期不同:
在这里插入图片描述

3.数据通路

在这里插入图片描述

4.各个指令执行过程

4.1 MOV 指令

在这里插入图片描述
MOV 指令取指周期
在这里插入图片描述
MOV 指令执行周期
在这里插入图片描述

4.2.LAD 指令

在这里插入图片描述
LAD 执行总过程:
在这里插入图片描述

4.3. STO 指令:

在这里插入图片描述
在这里插入图片描述

4.4.JMP 指令

在这里插入图片描述
在这里插入图片描述

4.5.ADD 指令

ADD 指令的变数真的很多,大致分为以下情况:

  1. ADD R1 , R2 需要两个周期,取指周期,执行周期。
  2. ADD ( R1) , R2需要四个周期,取指周期,间址周期,执行周期,间址周期
  3. ADD R1 ,( R2)需要三个周期,取指周期,间址周期,执行周期
  4. ADD (R1) ,( R2)需要五个周期,取指周期,间址周期,间址周期,执行周期,间址周期

我们这里只给出第一种,剩下对照 STO 的间址方式即可推导。
在这里插入图片描述

5.指令周期的数据信息流

5.1 取指周期数据信息流

在这里插入图片描述

  1. (PC)➡MAR
    将要执行指令的地址放到地址缓冲寄存器
  2. 1➡R
    发出读命令(固定写法),但是这个也可以不写,
  3. M(MAR)➡MDR
    将要执行的指令从存储器中读到数据缓冲寄存器, 其中(MAR)表示地址缓冲寄存器中的内容,所以 M(MAR)就表示在主存中此地址的内容,即欲执行指令本身
  4. (MDR)➡IR
    将要执行的指令打入指令寄存器
  5. OP(IR)➡CU 也写作 OP(PC)➡CU
    (IR)表示指令本身,OP(IR)表示指令的操作码,AD(IR)表示指令的地址码
  6. (PC)+1➡PC
    形成下一条指令的地址
5.2 间址周期数据信息流

在这里插入图片描述

  1. AD(IR)→MAR
    将指令字中的地址码(形式地址)打入地址缓冲寄存器
  2. 1→R
    发出读命令
  3. M(MAR)→MDR
    形成下一条指令地址
5.3 执行周期数据信息流

不同指令的执行周期不同,数据信息流不同。

5.4 中断周期周期数据信息流

在这里插入图片描述
==注:中断周期我们放到终端系统讲解。==

6.指令周期的控制信号举例

6.1 不采用 CPU 内部总线的方式

以 ADD @ X 为例:操作数的地址和操作数本身都在内存中,用内存中的数据与累加器 AC 中的数据相加为例
取指周期:
在这里插入图片描述
间址周期:
在这里插入图片描述
执行周期:
在这里插入图片描述

6.2 采用 CPU 内部总线方式

取指周期:
在这里插入图片描述
间址周期:
在这里插入图片描述

执行周期:
在这里插入图片描述

四、控制器的功能和工作原理

1.前置概念:

为啥把这段提前讲,主要是怕前的指令系统和这里突然一个转变难以理解。

1.1 微命令:

控制部件向执行部件发出的各种控制命令叫作微命令,它是构成控制序列的最小单位。
例如:打开或关闭某个控制门的电位信号、某个寄存器的打入脉冲等。
微命令是控制计算机各部件完成某个基本微操作的命令。

1.2 微操作:

即微命令的操作过程。

  • 微命令和微操作是一一对应的。
  • 微命令是微操作的控制信号,微操作是微命令的操作过程。
  • 微操作是执行部件中最基本的操作。
1.3 微指令:

把在同一 CPU 周期内并行执行的微操作控制信息,存储在控制存储器里,称为一条微指令(Microinstruction)

  • 它是微命令的组合,微指令存储在控制器中的控制存储器中
  • 一条微指令通常至少包含两大部分信息:
  • 操作控制字段,又称微操作码字段,用以产生某一步操作所需的各个微操作控制信号。
    • 某位为 1,表明发微指令
    • 微指令发出的控制信号都是节拍电位信号,持续时间为一个 CPU 周期
    • 微命令信号还要引入时间控制
  • 顺序控制字段,又称微地址码字段,用以控制产生下一条要执行的微指令地址。
1.4 微程序:
  • 一系列微指令的有序集合就是微程序。
  • 一段微程序对应一条机器指令。
1.5 微地址 :存放微指令的控制存储器的单元地址

2. 控制方式

2.1 同步控制方式:

任何一条指令或指令中的任一微操作均由 统一基准时标 的时序信号控制。

2.1.1 采用定长的机器周期
最长的微操作序列和最繁的微操作作为标准,而且机器周期内 节拍数相同。
在这里插入图片描述
2.1.2 采用不定长的机器周期:
机器周期内 节拍数不等
在这里插入图片描述
2.1.3 采用中央控制和局部控制相结合的方法
在这里插入图片描述

2.2 异步控制方式
  • 无基准时标信号
  • 无固定的周期节拍和严格的时钟同步
  • 采用 应答方式

==用途: 一般用于主机与 I/O 设备间的传送控制,使高速的主机与慢速的 I/O 设备可以按照各自的需要的设置时序系统。(考过)==

这不是本门学科的重点,一般是操作系统会讲!

2.3 联合控制方式

同步与异步相结合

2.4 人工控制方式
  • Reset
  • 连续 和 单条 指令执行转换开关
  • 符合停机开关

3.控制单元的设计

3.1 组合逻辑控制(硬布线逻辑控制)==不是重点==

由基本的门电路组合实现。这种方式实现的控制器的处理速度快,但电路庞杂,制造周期长,不灵活,可维护性差。

3.1.1 硬布线逻辑控制:
  • 实现方法:
    通过逻辑电路直接连线而产生的,又称为组合逻辑控制方式
  • 设计目标
    使用最少元件(复杂的树形网络)
    速度最高
3.1.2 组合逻辑控制单元框图

在这里插入图片描述
在这里插入图片描述

3.1.3 节拍信号

在这里插入图片描述

3.1.4 设计原则:
  1. 微操作的 先后顺序不得 随意 更改

  2. 被控对象不同 的微操作
    尽量安排在 一个节拍 内完成

  3. 占用 时间较短 的微操作
    尽量 安排在 一个节拍 内完成
    并允许有先后顺序

3.2 微程序控制

仿照程序设计的方法编制每个机器指令对应的微程序,每个微程序由若干条微指令构成,各微指令包含若干条微命令。所有指令对应的微程序放在只读存储器中。当执行到某条指令时,取出对应微程序中的各条微指令,译码产生对应的微命令,送到机器相应的地方,控制其动作。这个只读存储器称为控制存储器(CS)。 微程序控制方式下,控制单元的设计简单,指令添加容易(灵活),可维护性好,但速度较慢。

3.2.1 微命令和微操作
  • 微命令:控制部件向执行部件发出的各种控制命令叫作微命令,它是构成控制序列的最小单位。
    • 例如:打开或关闭某个控制门的电位信号、某个寄存器的打入脉冲等。
    • 微命令是控制计算机各部件完成某个基本微操作的命令。
  • 微操作:是微命令的操作过程。
    • 微命令和微操作是一一对应的。
    • 微命令是微操作的控制信号,微操作是微命令的操作过程。
    • 微操作是执行部件中最基本的操作。

由于数据通路的结构关系,微操作可分为相容的和互斥的两种:

  • 互斥的微操作,是指不能同时或不能在同一个节拍内并行执行的微操作。可以编码
  • 相容的微操作,是指能够同时或在同一个节拍内并行执行的微操作。必须各占一位
3.2.2 微指令、微程序和微地址

微指令:
把在同一 CPU 周期内并行执行的微操作控制信息,存储在控制存储器里,称为一条微指令“Microinstruction”

  • 它是微命令的组合,微指令存储在控制器中的控制存储器中
  • 一条微指令通常至少包含两大部分信息:
    • 操作控制字段,又称微操作码字段,用以产生某一步操作所需的各个微操作控制信号。
      • 某位为 1,表明发微指令
      • 微指令发出的控制信号都是节拍电位信号,持续时间为一个 CPU 周期
      • 微命令信号还要引入时间控制
    • 顺序控制字段,又称微地址码字段,用以控制产生下一条要执行的微指令地址。

微程序:

  • 一系列微指令的有序集合就是微程序。

  • 一段微程序对应一条机器指令。

    微地址 :
    存放微指令的控制存储器的单元地址

3.2.3 微程序控制器原理框图

1 机器指令对应的微程序

2 .工作原理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
微程序控制器的工作过程

  • (1)执行取指令的公共操作。取指令的公共操作通常由一段取指微程序来完成,在机器开始运行时,自动将取指微程序的入口微地址送 μMAR,并从 μCM 中读出相应的微指令送入 μIR。微指令的操作控制字段产生有关的微命令,用来控制实现取机器指令的公共操作。取指微程序的入口地址一般为 μCM 的 0 号单元,当取指微程序执行完后,从主存中取出的机器指令就已存人指令寄存器 IR 中了。
  • (2)由机器指令的操作码字段通过微地址形成部件产生出该机器指令所对应的微程序的入口地址,并送入 μMA
  • (3)从 μCM 中逐条取出对应的微指令并执行之,每条微指令都能自动产生下一条微指令的地址。
  • (4)一条机器指令对应的微程序的最后一条微指令执行完毕后,其下一条微指令地址又回到取指微程序的人口地址,从而继续第(1)步,以完成取下条机器指令的公共操作。
    以上是一条机器指令的执行过程,如此周而复始,直到整个程序的所有机器指令执行完毕。
3.2.4 微指令的编码方式(控制方式)
  1. 直接编码(直接控制)方式
    在微指令的操作控制字段中,每一位代表一个微操作命令,某位为 “1” 表示该控制信号有效(速度最快)
    在这里插入图片描述

  2. 字段直接编码方式(显式编码)
    将微指令的控制字段分成若干 “段”,每段经译码后发出控制信号。(执行速度较慢)

  • 每个字段中的命令是 互斥 的
  • 缩短了微指令字长但增加了译码 时间
    在这里插入图片描述
  1. 字段间接编码方式(隐式编码)
    在这里插入图片描述
  2. 混合编码
    直接编码和字段编码(直接和间接)混合使用
3.2.5 微指令序列地址的形成
  1. 微指令的 下地址字段 指出
  2. 根据机器指令的 操作码 形成
  3. 增量计数器 : ( CMAR ) + 1 ➡ CMAR
  4. 分支转移
    在这里插入图片描述
  5. 通过测试网络
    在这里插入图片描述
  6. 由硬件产生微程序入口地址
  • 第一条微指令地址 由专门 硬件 产生
  • 中断周期 由 硬件 产生 中断周期微程序首地址
  1. 后续微指令地址形成方式原理图

在这里插入图片描述

3.2.6 微指令格式
  1. 水平型微指令
    一次能定义并执行多个并行操作

    • 直接编码
    • 字段直接编码
    • 字段间接编码
    • 直接和字段混合编码
  2. 垂直型微指令

    • 类似机器指令操作码 的方式
    • 由微操作码字段规定微指令的功能
  3. 两种微指令格式的比较(重要哦)

    • (1) 水平型微指令比垂直型微指令 并行操作能力强 ,
      灵活性强
    • (2) 水平型微指令执行一条机器指令所要的
      微指令 数目少,速度快
    • (3) 水平型微指令 用较短的微程序结构换取较长的
      微指令结构
    • (4) 水平型微指令与机器指令 差别大
3.2.7 微指令和程序指令的关系

在这里插入图片描述

3.2.8 设计微指令应当追求的目标
  • 有利于缩短微指令的长度
  • 有利于缩小 CM 的容量
  • 有利于提高微程序的执行速度
  • 有利于对微指令的修改
  • 有利于提高微程序设计的灵活性

五、指令流水

1.指令流水原理

可以将指令周期简单分为:IF 取指、ID 指令译码、EX 执行 、WD 写回

取指令由取指部件完成,执行指令由执行部件完成,如果采用串行化执行,则在执行指令 1 时,取指部件是空闲的。
在这里插入图片描述

指令的四级流水

在这里插入图片描述

在 ID 阶段,同时将指令 2 进行取指,理想情况,流水线的效率将加倍。

1.1 五级流水:
  • IF:Instruction Fetch,取指令,用到部件:指令存储器,Adder( 全加器,full-adder,是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。常用二进制四位全加器 74LS283)
  • ID:Instruction Decode,译码(应该是取数同时译码的过程),用到部件:指令译码器寄存器堆读口(这里面的寄存器堆的读口和写口可以看作两个不同的部件),这块有大量寄存器,WB 也是从写口将数据写到这块的寄存器中。
  • EX:Exec,执行,计算内存单元地址。用到部件:ALU,扩展器
  • MEM:访存,从数据存储器中读。用到部件:数据存储器。
  • WB:Write Back,写回,将数据写到寄存器中。用到部件:寄存器堆写口。
  • 在这里插入图片描述
1.2 六级流水:
  • 取指 FI 从存储器取出一条指令放入指令部件缓冲区

  • 指令译码 DI 确定操作性质和操作数地址形成方式

  • 计算操作数地址 CO 计算操作有效地址

  • 取操作数 FO 从存储器中取出操作数

  • 执行指令 EI 执行指令,将结果存入目的位置

  • 写操作书 WO 将结果存入寄存器

在这里插入图片描述

2.影响流水线性能因素
2.1 结构相关 资源相关

多条指令进入流水线后在同一时钟周期内争用同一功能部件。

MEM 取数和 IF 取指会发生访存冲突:
在这里插入图片描述

解决方式:

流水线完成前一条指令对数据的存储器访问时,暂停取后一条指令

增设一个功能部件,独立存储器存放操作数和指令

采用指令预取技术,将指令预取到指令队列中,这样取操作数操作便可以独占存储器访问

2.2 数据相关
不同指令重叠操作,可能改变对操作数的读写访问顺序

数据相关冲突有:

  • RAW(Read After Write)
    后面指令用到前面指令所写的数据
  • WAW(Write After Write)
    两条指令写同一个单元
    在简单流水线中没有此类相关,因为不会乱序执行
  • WAR(Write After Read)
    后面指令覆盖前面指令所读的单元
    在简单流水线中没有此类相关
    解决办法:
    可以推后后继指令对相关单元的读操作

解决方式:

  • 后推法:
    遇到数据相关时,停顿后继指令运行,直到前面指令结果已经生成

  • 设置相关的直接通路”Forwarding”:
    定向技术 旁路技术 将某条指令执行结果不送回寄存器而是直接送到其他指令所需的地方
    例:两条指令发生数据相关冲突 RAW(Read After Write)

1
2
3
ADD	R1,	R2,	R3		R2+R3-->R1
SUB R4, R1, R5 R1-R5-->R4
AND R6, R1, R7 R1^R7-->R6

2.3 控制相关
由转移指令引起 若是条件转移指令,则转移目标地址可能发生跳转,影响流水线效率。
在这里插入图片描述

解决方式:

  • 延迟转移法
  • 转移预测法
3.流水线性能
3.1 吞吐率

单位时间内流水线完成指令或输出结果数量

最大吞吐率:流水线达到稳定状态后可获得的吞吐率
这个值是固定的的:

$T_{max}= \frac{1}{各段流水平均用时 }$

实际吞吐率:流水线完成 n 条指令实际吞吐率

$T_{act}= \frac{某段时间执行指令总条数}{执行所有指令的用时}$

3.2 加速比

m 段流水线速度与等功能非流水线速度之比

$S= \frac{顺序执行所有指令的用时}{流水形式执行所有指令的用时}$

3.3 效率

流水线中各功能段利用率

$E= \frac{流水线各段处于工作时间时空区}{流水线中各段总时空区}$
即在执行一段程序中,对 CPU 的有效利用率。
在这里插入图片描述
效率和吞吐率的关系:
如果每段流水时间都是$⊿T$的话
$E=T
{act}*⊿_T$

和加速比的关系:
$E= \frac{S }{流水级数 }$

4.超级流水线技术

超级流水线(SuperPipeline)又叫做深度流水线,它是提高 cpu 速度通常采取的一种技术。
以四级流水为例:
IF 取指、ID 指令译码、EX 执行 、WD 写回

4.1 超标量技术

超标量(superscalar)是指在 CPU 中有一条以上的流水线,并且每时钟周期内可以完成一条以上的指令,这种设计就叫超标量技术。 其实质是以空间换取时间。而超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至多个操作,其实质是以时间换取空间。

在这里插入图片描述

4.2 超流水线技术

在一个时钟周期内再分段,一个功能部件使用多次
在这里插入图片描述

4.3 超长指令字技术

超常指令字(VLIW:VeryLongInstructionWord)是由美国 Yale 大学教授 Fisher 提出的。它有点类似于超级标量,是一条指令来实现多个操作的并行执行,之所以放到一条指令是为了减少内存访问。通常一条指令多达上百位,有若干操作数,每条指令可以做不同的几种运算。那些指令可以并行执行是由编译器来选择的。通常 VLIW 机只有一个控制器,每个周期启动一条长指令,长指令被分为几个字段,每个字段控制相应的部件。由于编译器需要考虑数据相关性,避免冲突,并且尽可能利用并行,完成指令调度,所以硬件结构较简单。   
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字
在这里插入图片描述


写在最后:
Name:风骨散人,目前是一名双非在校大学生,预计考研,热爱编程,热爱技术,喜欢分享,知识无界,希望我的分享可以帮到你!名字的含义:我想有一天我能有能力随心所欲不逾矩,不总是向生活低头,有能力让家人拥有富足的生活而不是为了生计而到处奔波。“世人慌慌张张,不过是图碎银几两。偏偏这碎银几两,能解世间惆怅,可让父母安康,可护幼子成长 …”
文章主要内容:
Python,C++,C 语言,JAVA,C#等语言的教程
ACM 题解、模板、算法等,主要是数据结构,数学和图论
设计模式,数据库,计算机网络,操作系统,计算机组成原理
Python 爬虫、深度学习、机器学习
计算机系408考研的所有专业课内容
目前还在更新中,先关注不迷路。微信公众号,cnblogs(博客园),CSDN 同名“风骨散人”

如果有什么想看的,可以私信我,如果在能力范围内,我会发布相应的博文!
感谢大家的阅读!😘 你的点赞、收藏、关注是对我最大的鼓励!


『计算机组成原理』跟着博主玩转计算机组成结构--中央处理器CPU(不知道CPU干啥的小伙伴看过来)
https://chiamzhang.github.io/2024/06/29/『计算机组成原理』跟着博主玩转计算机组成结构--中央处理器CPU(不知道CPU干啥的小伙伴看过来)/
Author
Chiam
Posted on
June 29, 2024
Licensed under