Skip to content

CPU 的功能和基本结构

CPU 的功能

中央处理器(CPU)由运算器和控制器组成:

  1. 控制器负责协调并控制计算机各部件执行程序的指令序列,包括取指令、分析指令、执行指令

  2. 运算器的功能是对数据进行加工

CPU 的具体功能包括:

  1. 指令控制:完成取指令、分析指令、执行指令的操作,即程序的顺序控制

  2. 操作控制:一条指令的功能由若干控制信号的组合来实现,控制信号控制这些部件按指令的要求进行动作

  3. 时间控制:对各种操作加以时间上的控制,时间控制要为每条指令按时间顺序提供应有的控制信号

  4. 数据加工:对数据进行算术和逻辑运算

  5. 中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理

选择题:CPU 的位数是指 CPU 一次能处理数据的位数,即数据总线的位数

应用题:CPU 包含 PC、IR、MDR、MAR、PSW 专用寄存器

额外:CPU 的构成(相对于运算器和控制器来说更细):

  1. 组合逻辑电路 ALU:负责数据处理

  2. 时序逻辑电路 CU:负责整个系统控制

  3. 寄存器:负责存放中间结果

  4. 中断系统:负责处理异常情况

考点追踪:CPU 如何区分指令与数据(2009)

虽然指令和数据都以二进制形式存放在存储器中,但 CPU 根据 指令周期的不同阶段 来区分:取指阶段 取出的是指令,执行阶段 取出的是数据。注意:不是根据译码结果区分,因为只有确定是指令后才会送去译码。

CPU 的基本结构

运算器

运算器接收从控制器送来的命令并执行相应的动作,是对数据进行加工和处理的中心

主要有算术逻辑单元 ALU、暂存寄存器、累加寄存器 ACC、通用寄存器组、程序状态字寄存器 PSW、移位器、计数器 CT

  1. 算术逻辑单元:主要功能是进行算术/逻辑运算

  2. 暂存寄存器:可以用于暂存从主存读来的数据,避免破坏原有寄存器的数据,对应用程序员是透明的

    以及:ALU 的两个输入端连接总线的,一次总线输入会两端都修改,所以需要使用暂存寄存器进行过渡,第一次总线读入暂存寄存器,第二次总线的输入 ALU 和暂存寄存器的输入 ALU 进行计算

    思考:只有寄存器等才有存储的作用,而 ALU 的两个输入端需要同时输入数据才能计算出正确的结果

  3. 累加寄存器:一个通用寄存器,用于暂时存放 ALU 运算的结果信息,可以作为累加运算的一个输入端

  4. 通用寄存器组:如 AX、BX、CX、DX、SP 等,用于存放操作数和各种地址信息等,SP 是堆栈指针,用于指示栈顶的地址

  5. 程序状态字寄存器:根据算术逻辑运算指令或测试指令的结果建立的各种状态信息

    如溢出标志 OF、符号标志 SF、零标志 ZF、进位标志 CF 等,PSW 中的这些位参与并决定微操作的执行

  6. 移位器:对操作数或运算结果进行移位运算

  7. 计数器:控制乘除运算的操作步数

控制器

它是整个系统的指挥中枢,在它的控制下运算器、存储器和输入/输出设备等构成一个整体,根据指令,指挥全机协调工作

控制器的基本功能是执行指令,每条指令的执行是由一组微操作实现的,控制器有硬布线控制器和微程序控制器两种类型

程序计数器 PC、指令寄存器 R、指令译码器、存储器地址寄存器 MAR、存储器数据寄存器 MDR、时序系统和微操作信号发生器

  1. 程序计数器:指出下一条指令在主存中的存放地址,CPU 根据 PC 的内容去主存中取指令,PC 有自增功能

  2. 指令寄存器:保存当前正在执行的那条指令

  3. 指令译码器:仅对操作码字段进行译码,向控制器提供特定的操作信号

  4. 存储器地址寄存器:用于存放要访问的主存单元的地址

  5. 存储器数据寄存器:用于存放向主存写入的信息或从主存读出的信息

  6. 时序系统:用于产生各种时序信号,它们都由统一时钟 CLOCK 分频得到

  7. 微操作信号发生器:根据 IR 的内容、PSW 的内容、时序信号,产生各种控制信号,有组合逻辑型存储逻辑型两种

控制器的工作原理是,根据指令操作码、指令的执行步骤(微命令序列)、条件信号形成各部件要用到的控制信号来控制各硬件系统协同运行,产生预期的执行结果

注意:CPU 内部寄存器大致可分为两类:

  1. 用户可见的寄存器,可对这类寄存器编程,如通用寄存器组、程序状态字寄存器等

  2. 用户不可见的寄存器,不可对这类寄存器编程,如存储器地址寄存器、存储器数据寄存器、指令寄存器等

核心结论:用户可见 vs 程序员不可见寄存器

| 类型 | 典型寄存器 | 说明 |

| :--- | :--- | :--- |

| 用户可见 | 通用寄存器 (EAX等)、PC、PSW、基址/变址寄存器 | 程序员可在汇编代码中直接操作 |

| 用户不可见 | MAR、MDR、IR、暂存寄存器、微地址寄存器 | 硬件自动使用,软件无法直接读取 |

指令执行过程

指令周期

指令周期:CPU 从主存中取出并执行一条指令的时间,常用若干机器周期来表示

机器周期:通过一次总线事务访问一次主存或 I/O 的时间,包含若干时钟周期,也称 CPU 周期

时钟周期:也称节拍或 T 周期,它是 CPU 操作的最基本单位

每个指令周期可以不等,指令周期内机器周期数可以不等,每个机器周期内的节拍数可以不等

image-20211020193433549

一个完整的指令周期包括取指、间址、执行、中断 4 个周期,但不是每一个周期都有操作,如 JMP 命令的间址周期没有操作

当 CPU 采用中断方式实现主机和 I/O 设备的信息交换时,CPU 在每条指令执行结束前,都要发中断查询信号,若有中断请求,则 CPU 进入中断响应阶段,又称中断周期

额外:当设置开中断时,才会有中断周期,如果设置了关中断,就没有中断周期

image-20211020194139822

上述 4 个工作周期都有 CPU 访存操作,只是访存的目的不同:

  1. 取指周期是为了取指令

  2. 间址周期是为了取有效地址

  3. 执行周期是为了取操作数

  4. 中断周期是为了保存程序断点

为了区别不同的工作周期,在 CPU 内设置 4 个标志触发器 FE、IND、EX、INT 它们分别对应取指、间址、执行、中断周期,并以 1 状态表示有效,如 1,0,0,0 是取址周期,0,1,0,0 是执行周期

选择题:采用 DMA 方式传递数据时,每传送一个数据就要占用一个存储周期

考点追踪:单周期、多周期与流水线 CPU(2016、2020、2025)

  1. 单周期 CPU:每条指令都在一个时钟周期内完成(CPI=1)。时钟频率由最慢指令决定,硬件利用率低。不能采用单总线结构
  1. 多周期 CPU:不同指令占用不同数量时钟周期(CPI>1)。时钟频率较高,资源可复用。
  1. 流水线 CPU:每个周期启动一条新指令,理想情况下 CPI=1。时钟频率由最耗时的流水段决定。

核心结论:访存次数与指令周期

  • 取指 (IF): 必访存 (RAM)。
  • 间址 (ID): 访存 (RAM) 获取有效地址。
  • 执行 (EX): 访存 (RAM) 获取操作数或存结果。
  • 中断 (INT): 访存 (RAM) 保存断点 PC。

指令周期的数据流

数据流是根据指令要求依次访问的数据序列,这里的任务仅指取数据的任务(可能有更多任务),如取址阶段有取址和译址

取址周期

取指周期的任务是根据 PC 中的内容从主存中取出指令代码并存放在 IR 中,取指令的同时,PC 加 1

image-20211020200001136

取指周期的数据流向如下:

  1. PC → MAR → 地址总线 → 主存

  2. CU 发出读命令 → 控制总线 → 主存

  3. 主存 → 数据总线 → MDR → IR(存放指令)

  4. CU 发出控制信号 → PC 内容加 1

间址周期

间址周期的任务是取操作数有效地址

将指令中的地址码送到 MAR 并送至地址总线,此后 CU 向存储器发读命令,以获取有效地址并存至 MDR

image-20211020202902736

间址周期的数据流向如下:

  1. Ad(IR)(或 MDR)→ MAR → 地址总线 → 主存

  2. CU 发出读命令 → 控制总线 → 主存

  3. 主存 → 数据总线 → MDR(存放有效地址)

其中,Ad(IR) 表示取出 IR 中存放的指令字的地址字段

执行周期

执行周期的任务是根据 IR 中的指令字的操作码和操作数通过 ALU 操作产生执行结果

不同指令的执行周期操作不同,因此没有统一的数据流向

中断周期

中断周期的任务是处理中断请求

假设程序断点存入堆栈中,并用 SP 指示栈顶地址,而且进栈操作是先修改栈顶指针,后存入数据

image-20211020203728011

中断周期的数据流向如下:

  1. CU 控制将 SP 减 1,SP → MAR → 地址总线 → 主存

  2. CU 发出写命令 → 控制总线 → 主存

  3. PC → MDR → 数据总线 → 主存(程序断点存入主存)

  4. CU(中断服务程序的入口地址)→ PC

指令执行方案

一个指令周期通常要包括几个执行步骤,每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能

出于性能和硬件成本等考虑,可以选用 3 种不同的方案来安排指令的执行步骤

单指令周期

每一个指令都使用相同的执行时间来完成,称为单指令周期方案,指令之间串行执行,前一条执行完后才能执行后一条

指令周期是执行时间最长的指令的执行时间,让需要更短时间的指令也要使用这个周期来完成,降低系统的运行速度

多指令周期

不同类型的指令选用不同的执行步骤来完成,称为多指令周期方案,指令之间串行执行,前一条执行完后才能执行后一条

可选用不同个数的时钟周期来完成不同指令的执行过程,而不再要求所有指令占用相同的执行时间

流水线方案

指令之间可以并行执行,称为流水线方案,其追求的目标是力争在每个时钟脉冲周期完成一条指令的执行过程

这种方案通过在每个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中

例如:第一条指令在间址操作时,取址机器闲着不行,第二条指令启动,进行取址操作,这样每个部件都会在运行

数据通路的功能和基本结构

数据通路的功能

数据在功能部件之间传送的路径称为数据通路路径上的部件称为数据通路部件,数据通路中专门进行数据运算的部件称为执行部件或功能部件

数据通路描述了信息从什么地方开始,中间经过哪个寄存器或多路开关,最后传送到哪个寄存器,这些都需要加以控制

数据通路由控制部件控制,控制部件根据每条指令功能的不同生成对数据通路的控制信号,并正确控制指令的执行流程

数据通路的功能是实现 CPU 内部的运算器与寄存器及寄存器之间的数据交换

数据通路的基本结构

数据通路的基本结构主要有以下几种:

  1. CPU 内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共通路上

    这种结构比较简单,但数据传输存在较多的冲突现象,性能较低;有两条总线就构成双总线结构,更多就是多总线结构

  2. CPU 内部三总线方式:将所有寄存器的输入端和输出端都连接到多条公共通路上

    采用多总线方式,同时在多个总线上传送不同的数据,提高效率

  3. 专用数据通路方式:根据指令执行过程中的数据和地址的流动方向连接线路避免使用共享的总线,性能较高,硬件量大

规定各部件用大写字母表示,字母加 in 表示该部件的允许输入控制信号;字母加 out 表示该部件的允许输出控制信号

注意:内部总线是指同一部件内部部件之间的总线;系统总线是指同一台计算机系统的各部件之间的总线

image-20211021181127350

寄存器之间的数据传送

寄存器之间的数据传送可通过 CPU 内部总线完成,寄存器 AX 的输出和输入分别由 AXoutAXin 控制

把 PC 内容送至 MAR,实现传送操作的流程及控制信号为:

  • PC → Bus;PCout 有效,PC 内容送总线

  • Bus → MAR;MARin 有效,总线内容送 MAR

主存与 CPU 之间的数据传送

主存与 CPU 之间的数据传送也要借助 CPU 内部总线完成

CPU 从主存读取指令为的传送过程,实现传送操作的流程及控制信号为:

  • PC → Bus → MAR;PCoutMARin 有效,现行指令地址 → MAR

  • 1 → R;CU 发读命令

  • MEM(MAR) → MDRMDRin 有效

  • MDR → Bus → IR;MDRoutIRin 有效,现行指令 → IR

执行算术或逻辑算术

ALU 没有内部存储功能的组合电路,执行加法运算时,相加的两个数必须在 ALU 的两个输入端同时有效

暂存器 Y 即用于该目的,先把一个操作数读入 Y,Y 的内容在 ALU 的左输入端始终有效

再读一个操作数到 ALU 的右输入端,这样两个操作数都送入了 ALU,运算结果暂存在暂存器 Z 中

  • Ad(IR) → Bus → MAR;MDRoutMARin 有效

  • 1 → R;CU发读命令

  • MEM → 数据线 → MDR;操作数从存储器 → 数据线 → MDR

  • MDR → Bus → Y;MDRout 和 Yin 有效,操作数 → Y

  • (ACC) + (Y) → ZACCoutALUin 有效,CU 向 ALU 发加命令,结果 → Z

  • Z → ACC;ZoutACCin 有效,结果 → ACC

数据通路结构直接影响 CPU 内各种信息的传送路径,数据通路不同,指令执行过程的微操作序列的安排也不同,它关系着微操作信号形成部件的设计

综合应用题

某计算机字长 16 位,采用 16 位定长指令字结构,部分数据通路结构如下图所示。图中所有控制信号为 1 时表示有效,为 0 时表示无效。例如,控制信号 MDRinE 为 1 表示允许数据从 DB 打入 MDR,MDRin 为 1 表示允许数据从总线打入 MDR。假设MAR 的输出一直处于使能状态。加法指令 ADD (R1), R0 的功能为 (R0) + ((R1)) → (R1),即将 R0 中的数据与 R1 的内容所指主存单元的数据相加,并将结果送入 R1 的内容所指主存单元中保存

image-20211021185147136

下表给出了上述指令取指和译码阶段每个节拍(时钟周期)的功能和有效控制信号,请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号

image-20211021185232450

解答:

image-20211021185419810

思考:控制信号同时可以给多个,但是要注意不要让总线发生冲突,以及时间顺序要合适

控制器的功能和工作原理

控制器的结构和功能

这是计算机硬件系统的五大功能部件及其连接关系,通过数据总线、地址总线、控制总线连接在一起,框内的是控制器部件

image-20211022194718489

现对其主要连接关系简单说明如下:

  1. 运算器部件通过数据总线与内存储器、输入设备传送数据

  2. 输入设备和输出设备通过接口电路与总线相连接

  3. 内存储器、输入输出设备,从地址总线接收地址信息,从控制总线得到控制信号,从数据总线与其他部件传送数据

  4. 控制器部件从数据总线接收指令信息,从运算器部件接收指令转移地址,送出指令地址到地址总线,还要向系统中的部件提供运行所需要的控制信号

控制器是计算机系统的指挥中心,控制器的主要功能有:

  1. 从主存中取出一条指令,并指出下一条指令在主存中的位置

  2. 对指令进行译码或测试,产生相应的操作控制信号

  3. 指挥并控制 CPU、主存、输入和输出设备之间的数据流动方向

根据控制器产生微操作控制信号的方式的不同,控制器可分为硬布线控制器微程序控制器

选择题:计算机可以分为控制部件和执行部件,而控制器就是控制部件

硬布线控制器

硬布线控制单元图

硬布线控制器的就是根据指令的要求、当前的时序、外部和内部的状态按时间的顺序发送一系列微操作控制信号

硬布线控制器由复杂的组合逻辑门电路和一些触发器构成,因此又称组合逻辑控制器

image-20211022200902165

CU 的输入信号来源如下:

  1. 经指令译码器译码产生的指令信息:操作码决定 CU 要发送的操作信号集,与时钟配合产生不同的控制信号

  2. 时序系统产生的机器周期信号和节拍信号:让 CU 按一定的顺序发送信号,一个时钟脉冲 CU 可以发送一个或一组命令

    节拍发生器产生各机器周期中的节拍信号,使不同的微操作命令 Ci(控制信号)按时间的先后发出

  3. 来自执行单元的反馈信息即标志:CU 有时需要根据当前 CPU 状态来产生控制信号,如条件跳转指令

CU 的输入:操作码译码电路 ID、节拍发生器、状态标志;输出:CPU 内部或外部控制总线上

注意:控制单元还接收来自系统总线(控制总线)的控制信号,如中断请求、DMA 请求

额外:操作码译码器和地址译码器差不多,根据操作码选择特定的一条线输出

硬布线控制器的时序系统及微操作

硬布线控制器的时序系统

  1. 时钟周期:时钟信号控制节拍发生器产生节拍,每个节拍的宽度对应一个时钟周期,每个节拍完成多个并行或一个的操作

  2. 机器周期:机器周期可视为所有指令执行过程中的一个基准时间

    通常以存取周期(存储周期固定)作为基准时间,在存储字长与指令字长等长的前提下,取指周期也可视为机器周期

    在一个机器周期里可完成若干微操作,每个微操作都需一定的时间,用时钟信号控制产生每个微操作命令

  3. 指令周期:CPU 从主存中取出并执行一条指令的时间,详见这里

  4. 微操作命令分析:控制单元具有发出各种操作命令(控制信号)序列的功能

    这些命令与指令有关,而且必须按一定次序发出,才能使机器有序地工作

指令的微操作

一条指令分为 3 个工作周期:取指周期、间址周期、执行周期,下面分析各个子周期的微操作命令:

  1. 取指周期的微操作命令,每个指令取址周期指令一样

    PC → MAR;现行指令地址 → MAR

    1 → R;命令存储器读

    M(MAR) → MDR;现行指令从存储器中读至 MDR

    MDR → IR;现行指令 → IR

    OP(IR) → CU;指令的操作码 → CU 译码

    (PC) + 1 → PC;形成下一条指令的地址

  2. 间址周期的微操作命令,完成取操作数地址的任务,微操作命令通常为:

    Ad(IR) → MAR;将指令字中的地址码(形式地址)→ MAR

    1 → R;命令存储器读

    M(MAR) → MDR;将有效地址从存储器读至 MDR

  3. 执行周期的微操作命令,执行周期的微操作命令视不同指令而定

    • 非访存指令

      CLA;清 ACC;0 → ACC

      COM;取反;ACC → ACC

      SHR;算术右移;L(ACC)→R(ACC),ACC0ACC0

      CSL;循环左移;R(ACC)→L(ACC),ACC0ACCn

      STP;停机指令;0 → G

    • 访存指令

      • ADD X;加法指令

        Ad(IR) → MAR

        1 → R

        M(MAR) → MDR

        (ACC) + (MDR) → ACC

      • STA X;存数指令

        Ad(IR) → MAR

        1 → w

        ACC → MDR

        MDR → M(MAR)

      • LDA X;取数指令

        Ad(IR) → MAR

        1 → R

        M(MAR) → MDR

        MDR → ACC

    • 转移指令

      JMP X;无条件转移;Ad(IR) → PC

      BAN X;条件转移(负则转);A0Ad(IR)+A0(PC)PC

CPU 的控制方式

控制单元控制一条指令执行的过程,实质上是依次执行一个确定的微操作序列的过程

由于不同指令所对应的微操作数及复杂程度不同,因此每条指令和每个微操作所需的执行时间也不同

主要有以下 3 种控制方式:

  1. 同步控制方式:取最长的微操作作为节拍,取最多的节拍数作为机器周期

    同步控制方式的优点是控制电路简单,缺点是运行速度慢

  2. 异步控制方式:各部件按自身固有的速度工作,通过应答方式进行联络

    异步控制方式的优点是运行速度快,缺点是控制电路比较复杂

  3. 联合控制方式:联合控制方式是介于同步、异步之间的一种折中

    这种方式对各种不同的指令的微操作实行大部分采用同步控制、小部分采用异步控制的办法

硬布线控制单元设计步骤

微操作时序的原则

原则一微操作的先后顺序不得随意更改,有些微操作会有先后关系

原则二尽量把被控对象不同的微操作安排在一个节拍内完成

原则三占用时间较短的微操作,尽量安排在一个节拍内完成,并允许有先后顺序,如连续的纯寄存器数据流

列出微操作命令的操作时间表

根据微操作节拍安排,列出微操作命令的操作时间表;表中包括各个机器周期、节拍下的每条指令完成的微操作控制信号,表中 FE、IND、EX 为 CPU 工作周期标志,T0T2 为节拍

  • Ⅰ 为间址标志,在取指周期的 T2 时刻,若测得 I = l,则 IND 触发器置 1,标志进入间址周期;若 I = 0,则 EX 触发器置 1,标志进入执行周期

  • 在间址周期的 T2 时刻,若测得 IND = 0 表示一次间接寻址,则 EX 触发器置 1,进入执行周期;若测得 IND = 1 表示多次间接寻址,则继续间接寻址

  • 在执行周期的 T2 时刻,CPU 要向所有中断源发中断查询信号,若检测到有中断请求并满足响应条件,则 INT 触发器置 1,标志进入中断周期

表中第一行对应 10 条指令的操作码,代表不同的指令,若某指令有表中所列出的微操作命令,其对应的单元格内为 1

image-20211022213359481

进行微操作信号综合

根据微操作时间表可写出各微操作控制信号的逻辑表达式并进行适当的简化,简化后就可以使用电路门实现

表达式一般包括下列因素:微操作控制信号 = 机器周期 ^ 节拍 ^ 脉冲 ^ 操作码 ^ 机器状态条件

例如,根据表可写出 M(MAR) → MDR 微操作命令的逻辑表达式:

M(MAR) → MDR,根据表得知当什么时会执行这个操作

=FE·T1IND·T1(ADD+STA+LDA+JMP+BAN)+EX·T1(ADD+LDA)

=T1{FEIND(ADD+STA+LDAJMP+BAN)EX(ADD+LDA)}

式中 ADD、STA、LDA、JMP、BAN 均来自操作码译码器的输出

画出微操作命令的逻辑图

根据逻辑表达式可画出对应每个微操作信号的逻辑电路图

例如,M(MAR) → MDR 的逻辑表达式所对应的逻辑图

image-20211022213618029

微程序控制器

微程序控制的基本概念

微程序的设计思想是将每条机械指令转换成一个微程序,每个微程序包含若干微指令,每条微指令包含一个或多个微操作

微程序存放在控制存储器中,用寻址方式来拿微命令,目前,大多数计算机都采用微程序设计技术

微程序设计技术涉及的基本术语如下:

  1. 微命令与微操作:

    微命令是控制部件向执行部件发出的各种控制命令,它是构成控制序列的最小单位

    微命令是微操作的控制信号,微操作是微命令的执行过程,如 M(MAR) → MDR;微命令的相容性和互斥性:

    • 相容性微命令:可以同时产生、共同完成某一些微操作的微命令

    • 互斥性微命令:在机器中不允许同时出现的微命令

    注意:在组合逻辑控制器中也存在微命令与微操作这两个概念

  2. 微指令与微周期:

    微指令是若干微命令的集合,存放微指令的控制存储器的单元地址称为微地址

    一条微指令通常至少包含两大部分信息:

    1. 操作控制字段:产生某一步操作所需的各种操作控制信号,又称微操作码字段

    2. 顺序控制字段:控制产生下一条要执行的微指令地址,又称微地址码字段

    微周期通常指从控制存储器中读取一条微指令并执行相应的微操作所需的时间

  3. 主存储器与控制存储器:

    主存储器:存放程序和数据,在 CPU 外部,用 RAM 实现

    控制存储器 CM:存放微程序,在 CPU 内部,用 ROM 实现

  4. 程序与微程序:

    程序:指令的有序集合,用于完成特定的功能

    微程序:微指令的有序集合,一条指令的功能由一段微程序来实现

微程序实际上是机器指令的实时解释器,由计算机设计者事先编制好并存放在控制存储器中,一般不提供给用户(透明)

读者应注意区分以下寄存器:

  1. 地址寄存器 MAR:存放主存的读/写地址

  2. 微地址寄存器 CMAR:存放控制存储器的读/写微指令的地址

  3. 指令寄存器 IR:存放从主存中读出的指令

  4. 微指令寄存器 CMDR 或 μIR:存放从控制存储器中读出的微指令

选择题:微处理器是相对于一些大型处理器而言的,微程序控制器则是相对于 CPU 控制器而言的,它们之间没有必然关系

微程序控制器组成和工作过程

微程序控制器的基本组成

image-20211023131912364

这是一个微程序控制器的基本结构,主要画出比组合逻辑控制器多出的部件,包括:

  1. 控制存储器 CM:微程序控制器的核心部件,存放各指令对应的微程序,控制存储器可用只读存储器 ROM 构成

  2. 微指令寄存器 CMDR:存放从 CM 中取出的微指令,它的位数同微指令字长相等

  3. 微地址形成部件:产生初始微地址和后继微地址,以保证微指令的连续执行

  4. 微地址寄存器 CMAR:接收微地址形成部件送来的微地址,为在 CM 中读取微指令作准备

微程序控制器的工作过程

即在微程序控制器的控制下计算机执行机器指令的过程,描述如下:

  1. 执行取微指令公共操作,每个指令的取指操作是一样的:

    机器开始运行时,把取指微程序首地址放入 CMAR 一般在 CM 的 0 号单元,运行完后机械指令就存入指令寄存器中

  2. 微地址形成部件根据机器指令的操作码字段产生对应的微程序的入口地址,并送入 CMAR

  3. 执行完一条机器指令对应的一个微程序后,回到第 1 步,进行下一条指令的取址,直到整个程序执行完毕

微指令执行过程:根据 CMAR 从 CM 读取微指令到 CMDR 后,微操作码字段用于发送控制信号地址码字段放入 CMAR 指出下一条指令,微程序的最后一条微指令的地址码字段存放的是取指微程序首地址

微程序和机器指令

一条机械指令对应一个微程序多个指令相同的部分也可以编成一个微程序,如取指令操作、间址周期、中断周期微程序

控制存储器中的微程序个数是机械指令数加上公用的微程序数

注意:若指令系统中具有 n 种机器指令,则控制存储器中的微程序数至少是 n + 1(1 为公共的取指微程序)

注意:指令操作微程序是一定有,但题目不说明有间址周期、中断周期微程序就不要计算进去

微指令的编码方式

微指令的编码方式又称微指令的控制方式,编码的目标是在保证速度的情况下,尽量缩短微指令字长

直接编码(直接控制)方式

image-20211023141434408

直接编码法无须进行译码,微指令的微命令字段中每位都代表一个微命令

设计微指令时,选用或不选用某个微命令,只要将表示该微命令的对应位设置成 1 或 0 即可

优点:简单、直观,执行速度快,操作并行性好;缺点:微指令字长过长,造成控制存储器容量极大

字段直接编码方式

将微指令的微命令字段分成若干小字段,互斥性微命令分在同一段内,相容性微命令分在不同段内,每个字段独立编码

image-20211023142139982

缩短了微指令字长,但要通过译码电路后再发出微命令,比直接编码方式慢

微命令字段分段的原则:

  1. 互斥性微命令分在同一段内,相容性微命令分在不同段内

  2. 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间

  3. 一般每个小段还要留出一个状态,表示本字段不发出任何微命令

    当某字段的长度为 3 位时,最多只能表示 7 个互斥的微命令,通常用 000 表示不操作

*字段间接编码方式

image-20211023150405058

一个字段的某些微命令需由另一个字段中的某些微命令来解释;称为字段间接编码,又称隐式编码

优点:可进一步缩短微指令字长;缺点:削弱了微指令的并行控制能力,通常作为字段直接编码方式的一种辅助手段

微指令的地址形成方式

后继微地址的形成主要有以下两大基本类型:、

  1. 直接由微指令的下地址字段指出:由微指令的下地址字段直接指出后继微指令的地址,这种方式又称断定方式

  2. 根据机器指令的操作码形成:机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成

实际上,微指令序列地址的形成方式还有以下几种(了解):

  1. 增量计数器法:即 (CMAR) + 1 → CMAR,适用于后继微指令的地址连续的情况

  2. 分支转移:地址码字段包含:转移方式:指明判别条件;转移地址:转移成功后的去向

  3. 通过网络测试形成:也是把地址码字段分成多个字段,然后通过硬件产生下地址的思路

  4. 由硬件直接产生微程序入口地址:电源加电后,第一条微指令的地址可由专门的硬件电路产生,也可由外部直接向 CMAR输入微指令的地址,这个地址即为取指周期微程序的入口地址

微指令的格式

水平型微指令

从编码方式看,直接编码、字段直接编码、字段间接编码、混合编码都属于水平型微指令

指令字中的一位对应一个控制信号,有输出时为 1,否则为 0,一条水平型微指令定义并执行几种并行的基本操作

image-20211023152819325

优点:微程序短,执行速度快;缺点:微指令长,编写微程序较麻烦

应用题:水平型微指令操作控制字段、判别测试字段、下地址字段三部分组成

垂直型微指令

采用类似机器指令操作码的方式,在微指令中设置微操作码字段,采用微操作码编译法,由微操作码规定微指令的功能

对微操作码编译后就可以发出控制信号(可能要结合那两个地址),一条垂直型微指令只能定义并执行一种基本操作

image-20211023153120438

优点:微指令短、简单、规整,便于编写微程序;缺点:微程序长,执行速度慢,工作效率低

*混合型微指令

在垂直型的基础上增加一些不太复杂的并行操作,即结合两种类型

微指令较短,仍便于编写;微程序也不长,执行速度加快

水平型和垂直型的比较

  1. 水平型微指令并行操作能力强、效率高、灵活性强;垂直型微指令则较差

  2. 水平型微指令执行一条指令的时间短;垂直型微指令执行的时间长

  3. 水平型微指令解析的程序,微指令字较长但微程序短;而垂直型微指令,其微指令字较短但微程序长

  4. 水平型微指令用户难以掌握,而垂直型微指令与指令比较相似,相对容易掌握

微程序控制单元的设计步骤

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

    微程序控制单元在取指阶段发出的微操作命令及节拍安排如下:

    • T0 PC → MAR,1 → R

    • T1 M(MAR) → MDR,(PC) + 1 → PC

    • T2 MDR → IR,OP(IR) → 微地址形成部件

    微程序控制单元和硬布线控制单元在取址阶段基本一样,但还是有一点区别:

    • 微程序:将指令的操作码送至微地址形成部件,以形成该条机器指令的微程序首地址

    • 硬布线:将指令的操作码送至指令译码器,以控制 CU 发出相应的微命令

    控制信号来之微指令,而微指令在微存储单元中,要读出微指令要先把微地址放入 CMAR

    所以除了第一条微指令的 CMAR 是硬件指出外,其余的微指令执行前要花一个节拍设置微指令所在的 CMAR

    考虑到需要形成后继微指令地址,上面的微操作命令变为:

    • T0 PC → MAR,1 → R

    • T1 Ad(CMDR) → CMAR;CMAR 由上一条微指令的下地址字段写入

    • T2 M(MAR) → MDR,(PC) + 1 → PC

    • T3 Ad(CMDR) → CMAR;CMAR 由上一条微指令的下地址字段写入

    • T4 MDR → IR

    • T5 OP(IR) → 微地址形成部件 → CMAR;传到 IR 后生成微地址并写入 CMAR

    与硬布线控制单元微操作命令的节拍安排相比,仅多了将下一条微指令地址送至 CMAR 的微操作命令

  2. 确定微指令格式:

    微指令格式包括微指令的编码方式、后继微指令地址的形成方式、微指令字长

    1. 根据微操作个数决定编码方式,再确定操作控制字段的位数

    2. 根据微指令数决定地址码字段的位数

    3. 把操作控制字段和顺序控制字段合在一起得出微指令字长

  3. 编写微指令码点:根据操作控制字段每位代表的微操作命令,编写每条微指令

*动态微程序设计和毫微程序设计

  1. 动态微程序设计:

    假如能根据用户的要求改变微程序,则这台机器就具有动态微程序设计功能

    动态微程序的设计需要可写控制寄存器的支持,否则难以改变微程序的内容

    实现动态微程序设计可采用可擦除可编程只读存储器(EPROM)

  2. 毫微程序设计:

    从主存取出的每条指令是由放在控制存储器中的微程序来解释执行的,通过控制线对硬件进行直接控制

    硬件通过存放在第二级控制存储器中的毫微程序来解释的,这个第二级控制存储器就称为毫微存储器,直接控制硬件的是毫微微指令

硬布线和微程序控制器的特点

  • 硬布线控制器的特点:

    优点:控制器的速度取决于电路延迟,速度快

    缺点:一旦逻辑电路设计完成,就不能通过其他额外修改添加新功能

  • 微程序控制器的特点:

    优点:同组合逻辑控制器相比,微程序控制器具有规整性、灵活性、可维护性

    缺点:每条指令都要从控制存储器中取一次,影响速度

image-20211023165606640

考点追踪:控制器设计对比(高频)

  1. 硬布线(组合逻辑):速度快(纯硬件延迟),设计难,扩充新功能必须重新设计电路。常用于 RISC。
  1. 微程序(存储逻辑):灵活性高(易于修改),速度慢(需频繁访 CM)。常用 n+1 个微程序(n 个指令 + 1 个公共取指)。
  1. 微指令格式水平型(字长长、并行性强、执行快);垂直型(类似机器指令、编写易、执行慢)。

核心结论:微指令字段计算 (2025 必考)

  1. 下地址位:根据 CM 单元总数 N 确定:log2N
  1. 状态调节位:根据互斥条件数 M 确定:log2(M+1)+1 为不跳转状态)。
  1. 微命令字段
  • 直接编码:1位对应1命令。
  • 字段直接编码:各段互斥编码并预留“无操作”。

综合应用题

题目:假设某机器有 80 条指令,平均每条指令由 4 条微指令组成,其中有一条取指微指令是所有指令公用的。已知微指令长度为 32 位,请估算控制存储器 CM 容量

解答:总微命令数 80×(41)+1=241,每条微指令占一个控制存储单元,CM 的容量为 2n 故 CM 容量为 256×32=1KB


题目:某微程序控制器中,采用水平型直接控制(编码)方式的微指令格式,后续微指令地址由微指令的下地址字段给出。已知机器共有 28 个微命令,6 个互斥的可判定的外部条件,控制存储器的容量为 512×40 位。试设计其微指令的格式,并说明理由

解答:水平型微指令操作控制字段、判别测试字段、下地址字段三部分组成。水平直接编码,操作控制字段为 28 位;6 个互斥条件,判断测试字段为 log26=3;存储容量为 512,下地址字段为 log2512=9

注意:如果判断条件互斥就用 log2n,如果没说明是互斥就用 n

指令流水线

流水线的基本概念

指令流水的定义

采用流水线技术只需增加少量硬件就能把计算机的运算速度提高几倍,因此成为计算机中普遍使用的一种并行处理技术

可以把一条指令的执行过程分为取址、分析、执行三个阶段:

  • 取指:根据 PC 内容访问主存储器,取出一条指令送到 IR 中

  • 分析:对指令操作码进行译码,并取出操作数

  • 执行:根据操作码字段,完成指令规定的功能,并写回内存或寄存器

当多条指令在处理器中执行时,可以采用以下两种方式:

  1. 顺序执行方式:

    前一条指令执行完后,才启动下一条指令;传统冯·诺依曼机采用顺序执行方式,又称串行执行方式

    image-20211024141117222

    假设取指、分析、执行三个阶段的时间都相等,用 t 表示,顺序执行 n 条指令所用时间 T 为 T = 3nt

    优点:控制简单,硬件代价小;缺点是执行指令的速度较慢,各功能部件的利用率很低

  2. 流水线执行方式:

    按流水线的方式来执行命令,即功能部件之间并行运行,如下图

    image-20211024141550524

    执行 n 条指令所用的时间为 T = (2 + n)t,比顺序执行方式的执行时间缩短近 2 / 3,各功能部件的利用率明显提高

    但为此需要付出硬件上较大开销的代价,控制过程也更复杂

    在理想情况下,每个时钟周期都有一条指令完成,每条指令的时钟周期数都为 1

为了进一步获得更高的执行速度,还可以将流水段进一步细分,细分后指令的时钟周期仍为 1,而时钟周期变短了

注意:不是流水线越多,指令执行速度就越快,因为流水线本身也是需要开销的,而且流水线多还加大了冲突的可能

流水线设计的原则是如下:

  1. 指令流水段个数以最复杂指令所用的功能段个数为准

  2. 流水段的长度以最复杂的操作所花的时间为准

根据第二条原则,流水线执行一条命令时间会比顺序执行慢,但会大大增加整个程序的指令执行的吞吐率

例题:若某计算机最复杂指令的执行需要完成 5 个子功能,分别由功能部件 A~E 实现,各功能部件所需时间分别为 80ps50ps、50ps、70ps 、50ps,采用流水线方式执行指令,流水段寄存器延时为 20ps,则 CPU 时钟周期至少为 80ps + 20ps

为了利于实现指令流水线,指令集应具有如下特征:

  1. 指令长度应尽量一致,有利于简化取指令和指令译码操作

  2. 指令格式应尽量规整,尽量保证源寄存器的位置相同,有利于在指令未知时就可取寄存器操作数

  3. 除 Load/Store 指令,其他指令都不能访问存储器,有利于减少操作步骤

  4. 数据和指令在存储器中对齐存放,有利于减少访存次数

选择题:空间并行:资源重复,有多个相同的功能部件;时间并行:时间重叠,多个功能部件在时间相互错开

流水线的表示方法

通常用时空图来直观地描述流水线的工作过程

image-20211024151710363

  • 横坐标表示时间,即输入流水线中的各个任务在流水线中所经过的时间

    流水线中各个流水段的执行时间都相等时,横坐标就被分割成相等长度的时间段

  • 纵坐标表示空间,即流水线的每个流水段(对应各执行部件)

每经过一个 Δt 时间,便有一条指令进入流水线,从时刻 t4 开始有一条指令流出流水线

t8=8Δt 时,流水线上便有 5 条指令流出,若是串行方式,只能执行 2 条指令,可见流水线成倍地提高了计算机的速度

流水线方式的特点

与传统的串行执行方式相比,采用流水线方式具有如下特点:

  1. 把一个任务分解为几个有联系的子任务并由各个的功能部件来执行,依靠多个功能部件并行工作来缩短程序的执行时间

  2. 每个功能段部件后面都要有一个缓冲寄存器(锁存器),其作用是保存本流水段的执行结果,供给下一流水段使用

    可以调和两个功能段执行时间不相等问题,保留结果在锁存器等另一个功能执行完在传内容过去

  3. 流水线中各功能段的时间应尽量相等,否则将引起堵塞、断流

  4. 只有连续不断地提供同一种任务时才能发挥流水线的效率,所以在流水线中处理的必须是连续任务

  5. 流水线需要有装入时间和排空时间:

    装入时间是指第一个任务进入流水线到输出流水线的时间

    排空时间是指最后一个任务进入流水线到输出流水线的时间

*流水线的分类

按照不同的分类标准,可以把流水线分成多种不同的种类。下面从几个不同的角度介绍流水线的基本分类方法

  1. 根据流水线使用级别的不同,分为部件功能级、处理机级、处理机间级流水线:

    • 部件功能级流水:将复杂的算术逻辑运算组成流水线,可将浮点加法操作分成求阶差、对阶、尾数相加、结果规格化

    • 处理机级流水:把一条指令解释过程分成多个子过程,如取指、译码、执行、访存、写回 5 个子过程

    • 处理机间流水:是一种宏流水,其中每个处理机完成某一专门任务,结果需存放在与下一个处理机共享的存储器中

    部件级是把一个部件任务拆分、处理机级是把一个处理机任务拆分、处理机间级是把处理机群任务拆分

  2. 按可以完成的功能,分为单功能流水线和多功能流水线:

    • 单功能流水线:只能实现一种固定的专门功能的流水线

    • 多功能流水线:通过各段间的不同连接方式可以实现多种功能的流水线

  3. 按同一时间内各段之间的连接方式,分为动态流水线和静态流水线:

    • 静态流水线:在同一时间内,流水线的各段只能按同一种功能的连接方式工作

    • 动态流水线:在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算

      这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂

      注意:动态流水线是同一时间进行多种功能,多功能流水线是通过不同连接方式实现多功能

  4. 按流水线的各个功能段之间是否有反馈信号,分为线性流水线和非线性流水线:

    线性流水线:从输入到输出,每个功能段只允许经过一次不存在反馈回路

    非线性流水线:存在反馈回路,输入到输出的过程中,某些功能段将数次通过流水线,适合于进行线性递归的运算

流水线的每个子过程由专用的功能段实现,各功能段所需的时间应尽量相等,否则时间长的功能段将成为流水线的瓶颈

影响流水线的因素

如果指令 2 的执行需要依赖指令 1 的结果,我们就说这两条指令是相关的,指令相关包括数据相关和控制相关

资源冲突(结构冒险)

多条指令在同一时刻争用同一资源而形成的冲突称为资源冲突,有以下两种解决办法:

  1. 前一指令访存时,使后一条相关指令以及其后续指令暂停一个时钟周期

  2. 单独设置数据存储器和指令存储器,使取数和取指令操作各自在不同的存储器中进行

    现代计算机都引入了 Cache 机制,而 Ll Cache 采用数据和指令分离的方式,避免了资源冲突的发生

数据冲突(数据冒险)

下一条指令会用到当前指令计算出的结果,这两条指令即为数据冲突,数据冲突可分为三类:

  1. 写后读 Read After Write,RAW 相关:必须等上一条指令写入才能读

  2. 读后写 Write After Read,WAR 相关:必须等上一条指令读完才能写

  3. 写后写 Write After Write,WAW 相关:必须等上一条指令写入才能写

注意:乱序发射时才会出现 WAR,乱序完成时才会出现 WAW;按序发射,按序完成时只会出现 RAW

解决的办法有以下几种:

  1. 把数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行

    硬件阻塞 stall(由硬件来实现延迟)和软件插入 NOP 指令(由编译器插入 NOP 指令)

  2. 设置相关专用通路,如把前一条指令的 ALU 的计算结果作为自己的输入数据,这称为数据旁路技术

  3. 通过编译器对数据相关的指令编译优化的方法,调整指令顺序来解决数据相关

控制冲突(控制冒险)

当遇到条件转移指令时,无法知道下一个要运行的指令,导致无法取下一个指令,造成断流

解决的办法有以下几种:

  1. 对转移指令进行分支预测,尽早生成转移目标地址

    静态预测:总是预测条件不满足,即继续执行分支指令的后续指令

    动态预测:根据程序执行的历史情况,进行动态预测调整,有较高的预测准确率

  2. 预取转移成功和不成功两个控制流方向上的目标指令

  3. 加快和提前形成条件码

  4. 提高转移方向的猜准率

考点追踪:流水线冒险/冲突处理(2014、2015、2017、2021、2023)

  1. 结构冒险:多条指令争用同一硬件(如访存)。解决:Cache 指令数据分离、暂停。
  1. 数据冒险(RAW/WAR/WAW):
  • RAW(写后读):最常见。解决:数据旁路/转发(不回写寄存器直接传给 ALU)、软件插入 NOP、硬件阻塞(Stall)。
  • 按序发射、按序完成的流水线仅存在 RAW。
  1. 控制冒险:转移类指令导致。解决:分支预测、预取两个方向、提前形成条件码。

核心结论:异常(Exception)与中断(Interrupt)的区分 (2025 新焦点)

  • 异常(内中断):源于 CPU 内部(溢出、缺页、非法指令)。同步发生,必须立即处理。
  • 中断(外中断):源于 CPU 外部(I/O 结束、时钟中断)。异步发生,通常在每条指令执行结束前检测。

流水线的性能指标

流水线的吞吐率

线性流水线为例分析流水线的主要性能指标,其分析方法和有关公式也适用于非线性流水线

在指令级流水线中,吞吐率是指在单位时间内流水线所完成的任务(指令)数量,或输出结果的数量

计算流水线吞吐率 TP 的最基本的公式TP=nTk 其中 n 是任务数,Tk 是处理完 n 个任务所用的时间

image-20211024164618601

这是各段执行时间均相等的流水线时空图,在输入流水线中的任务连续的理想情况下,一条 k 段线性流水线能够在 k + n - 1 个时钟周期内完成 n 个任务,Δt 为时钟周期,得出流水线的实际吞吐率TP=n(k+n1)Δt

连续输入的任务数 n 时,得最大吞吐率为 TPmax=1/Δt

流水线的加速比

完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比,称为流水线的加速比

T0 表示不使用流水线时的执行时间;Tk 表示使用流水线时的执行时间,则计算流水线加速比 S 的基本公式S=T0Tk

继续使用上面的时空图,则一条 k 段流水线完成 n 个任务所需的时间为 Tk=(k+n1)Δt;而不使用流水线,即顺序执行 n 个任务时,所需的时间为 T0=knΔt,代入上式,得实际加速比S=knΔt(k+n1)Δt=knk+n1

连续输入的任务数 n 时,最大加速比Smax=k

流水线的效率

流水线的设备利用率称为流水线的效率

image-20211024182744747

在时空图上,流水线的效率定义为完成 n 个任务占用的时空区有效面积,与 n 个任务所用的时间及 k 个流水段所围成的时空区总面积之比,即红色的框除以蓝色的框

时空区有效面积就是顺序执行的总时间 T0,时空区总面积为 kTk,其中 Tk 是流水线的总时间,因此计算流水线效率的一般公式E=nnk=T0kTk 若各段执行时间相等 E=nk+n1

流水线的各段执行时间均相等,当连续输入的任务数 n 时,最高效率Emax=1

核心结论:流水线性能公式(必考计算)

  1. 执行时间T=(k+n1)Δtk 段,Δt 周期,执行 n 条指令)。
  1. 加速比S=nkk+n1
  1. 时钟周期:至少为“最慢功能段耗时 + 锁存器延时”。
  1. 异常/中断:异常(内中断)在当前指令执行周期内检测,外部中断在当前指令结束前检测。流水线每段都可能发生异常。

超标量流水线的基本概念

超标量流水线技术

每个时钟周期内可并发多条独立指令,即以并行操作方式将两条或多条指令编译并执行,为此需配置多个功能部件

超标量计算机不能调整指令的执行顺序,因此通过编译优化技术,把可并行执行的指令搭配起来,挖掘更多的指令并行性

image-20211024183103430

不能调整指令的执行顺序是指无法把零散的可以并行的指令放在一起

但已经放一起的指令,以集合为单位,是可以使用流水线的动态调度

静态调度:让编译器决定执行什么命令;动态调度:让硬件决定执行什么命令,按什么顺序执行

超流水线技术

在一个时钟周期内再分段,在一个时钟周期内一个功能部件使用多次

不能调整指令的执行顺序,靠编译程序解决优化问题

image-20211024184719694

超长指令字

由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位),为此需要采用多个处理部件

image-20211024184852275

选择题:与超标量流水线相比,超长指令对 Cache 的容量要求更大,以便能实现同时执行多个操作

Released under the MIT License.