控制器

需熟练掌握 CPU 在执行指令时是如何控制信号控制各个部件的,这个过程偶尔会在大题中考察。还需了解硬布线控制器和微程序控制器的概念,可能在选择题中考察。

主要功能

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

  • 指令解码:CPU 从存储器取出一个指令后,控制器负责解码这个指令,以确定要执行的操作和涉及的操作数。
  • 生成控制信号:基于解码的指令,控制器生成一系列的控制信号,这些信号会驱动其他计算机部分(如算术逻辑单元、寄存器和存储器)按预期执行相应的操作。
  • 时序控制:通过先后发出不同的控制信号,确保指令的逻辑正确被执行,

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

组成

31
OP 码
地址码
指令
译码器
时序发生器
操作控制器
控制信号
C1
C2
C3
地址寄存器
地址寄存器
MAR
PC
30
40
···
···
10
77
7
66
6
100
5
70
地址
数据
107
106
AND
105
JMP
104
STO
103
ADD
102
LAD
101
MOV
地址
数据
R1, R3
101
R2, (R3)
R1, 2
R1, 6
R0, R1
地址码
ALU
数据缓冲寄存器
状态字寄存器
R1
R2
R3
R4
MDR
PSW
数据
cache
指令
cache
数据总线 DBUS
指令总线 IBUS
运算器
运算器
控制器

要理解控制器的组成,就要从其功能出发,大体来说,控制器的组成也可以分为三个组件:

  • 指令控制器:负责取指和译码,并且形成下一条指令的地址。
  • 时序控制器:产生计算机运行所需的各种时序信号。控制指令的执行节奏,确保各个部件协调工作。
  • 控制信号发生器:根据指令译码器的输出,产生具体的控制信号。这些控制信号用于控制计算机各个部件的微操作。

指令控制器

CS
IP
地址加法器
输入/输出
控制电路
指令寄存器
指令译码器
B8
01
23
BB
00
03
D8
89
D8
01
· · ·
· · ·
内存
地址总线
数据总线
mov ax, 0123H
mov bx, 0003H
mov ax, bx
add ax, bx
指令控制器

指令控制器由 CS:IP 获取当前要执行的指令地址。 其中 CS 为程序段寄存器,标记了进程代码段(.code)的开始,IP 为指令指针寄存器,标记了当前指令在代码段内的偏移。

获取当前指令地址后,输入输出控制电路从内存中读取指令放入指令寄存器中。 然后修改 IP 寄存器的值,使 CS:IP 指向下一条指令的地址。

时序控制器

时序控制器的作用是为每条指令按时间顺序提供控制信号。时序控制器包括时钟发生器和倍频定义单元,其中时钟发生器由石英晶体振荡器发出非常稳定的脉冲信号,就是 CPU 的主频;而倍频定义单元则定义了 CPU 主频是存储器频率(总线频率)的几倍。

晶体振荡器利用石英晶体的压电效应,当施加电压时,晶体在特定频率下可以产生稳定的振荡。 晶体振荡器产生精确的频率信号,作为电子设备的时钟源。这个时钟信号就像一个“节拍器”,控制着设备内部各个部件的协调运作。

晶体振荡器产生的频率信号直接决定了电子设备的时钟周期。一个指令周期中包含 取指令 和 执行指令 这两个 CPU 周期,而 CPU 周期又由多个时钟周期组成。


假设当前要执行 MOV R1, [addr] 这条指令,其功能就是找到内存中 addr 地址的数据,并且将其传输到寄存器 R1 中,这条指令的执行包含以下几个步骤:

  1. 将地址传入 MAR 中。
  2. 存储器从 MAR 中读取地址,并且读取数据,存入 MDR。
  3. 从 MDR 中取出数据,通过 CPU 内的数据总线传输到寄存器 R1 中。

上述过程的执行需要保证严格的时序关系,先后关系不可颠倒,否则会导致指令执行的出错。

通过这个简单的例子是为了说明这样一个原理:在 CPU 内部,一条指令的执行也会被拆分为若干的子过程,这些子过程需要满足严格的时序关系,而这种时序关系就是由时序控制器进行控制的。

控制信号发生器

指令译码器
数据总线
地址总线
控制总线
输入设备
主存
输出设备
控制信号发生器
CPU 内的控制信号
至系统总线的控制信号
CPU

控制信号发生器负责接收指令译码器的结果,并且在每个时钟周期内产生 控制信号

其中控制信号可以是 CPU 内的控制信号,通过 CPU 内总线传输至 CPU 内其他部件。 也可以是 CPU 外的控制信号,发送至系统的控制总线,用于协调计算机其他设备与 CPU 的交互。

控制信号

控制信号是由控制信号发生器生成和发出的电信号,这些信号用于指挥 CPU 内部的各种操作。例如,控制信号可以指示算术逻辑单元(ALU)执行加法还是减法,或者指示寄存器进行读写操作。

类型

其实控制信号的种类很多,但就目前阶段而言,会考察的可以被总结为三类控制信号:

  • 内存读写信号:对内存或 IO 设备进行读写,比如 MemRMemW 分别表示对内存进行读和写。
  • 寄存器选择信号:选择特定的寄存器进行读写操作,比如 RinRout 分别表示读寄存器和写寄存器。
  • ALU 操作码信号:选择算术逻辑单元(ALU)执行哪种运算,如加法、减法、与、或等,比如 ALUop = Add 表示让 ALU 执行加法操作。
R4
R3
R2
R1
Internal Bus
T1
ALU
MAR
MDR
Control Unit
IR
External Bus
MARout
PC
MARin
MDRout
MDRin
PCout
PCin
Memory
MemOp
ALUop (such as add, sub)
IRin
MUX
Word Length
MUXop
T2
T1out
T1in
T2out
T2in
0
1

寄存器传送语言

控制信号决定了计算机指令的执行顺序和数据流动。计算机内部组件根据控制信号执行相应操作,数据流动通常用寄存器传输语言(Regsiter Transfer Language, RTL)描述。

RTL 有多种表示方式,试题中会考察的是伪代码表示,这种表示方式常用于体系结构的教学。

这节先说明一下 RTL 伪代码表示的常见符号以及基本语法结构,下一节会以一个实际的例子说明一下 RTL 和控制信号的编写。

常见元件和符号

RTL 中用一些符号来表示 CPU 中的基本元件:

元件/符号含义
R1, R2, ...通用寄存器
PC程序计数器
IR指令寄存器
MAR内存地址寄存器
MDR内存数据寄存器
M[x]内存中地址为 x 的数据单元
数据从右边到左边
,并行操作
if条件执行

基本语法结构

赋值符号

表示寄存器传送,区别于一般的编程语言中的 = 右边为源寄存器, 左边为目标寄存器。

// 将 R2 和 R3 的加和结果送入寄存器 R1(即执行加法后写入 R1)。
R2 ← R1
补充

有的 RTL 伪代码中对于源寄存器的读取用 () 包围起来:R2 ← (R1),这种表示和 R2 ← R1 具有相同的含义。 具体采用哪种写法需要具体情况具体分析,根据题目给出的条件。

并行操作

用逗号表示多个操作同时发生(在同一时钟周期)。

// 在一个时钟周期内执行两个操作:
// 1) 将 PC 的值 +4,使其指向下一条指令的地址。
// 2) 将当前指令的地址读取到
PC ← PC + 4, MAR ← PC
顺序操作

使用多行,每一行一个时钟周期:

// 在连续三个时钟周期分别执行
MAR ← PC
MDR ← M[MAR]
IR ← MDR
存储器访问

存储器访问需要用 MAR 指定地址,用 MDR 存储输入输出的数据。

// 读存储器:
MAR ← PC
MDR ← M(MAR)

// 写存储器:
MAR ← R1, MDR ← R2
M(MAR) ← MDR

指令执行的控制信号

指令的执行包含取指、译码、执行、写回阶段,在这四个阶段中控制单元会发出不同的控制信号,以实现指令的执行。

以指令 ADD R0, (R1) 为例,说明一下指令执行阶段四个阶段的控制信号以及相应的功能,功能用寄存器传送语言给出描述。

取指和译码阶段

在该阶段中:PC 提供了当前需要读取指令的地址,从相应地址读取指令后,增加 PC 的值,使其指向下一条指令的地址,接着通过译码部件完成译码。

该阶段主要包含如下表所示的控制信号:

时钟功能控制信号解释
C1MAR ← PCPCout, MARin从 PC 中读取指令地址至 MAR 中
C2MDR ← M(MAR)MemR, MDRin存储器从 MAR 地址所在的内存单元读取数据
并加载到 MDR 中
C3MUXop ← PCIncrPCIncr在二路选择器中生成值 1 添加入 ALU 的一端
C4T2 ← PC + 1MARout, T2in, AddALU 计算下一条指令的地址
C5PC ← T2T2out, PCin将计算得到的地址加载进 PC 中
C6指令译码由指令译码器件完成

执行、访存和写回阶段

通过译码得到的控制信号,可以控制指令的执行和写回,对于 ADD R0, (R1) 为例,该阶段包含如下控制信号:

时钟功能控制信号解释
C7MAR ← R1R1out,MARin将 R1 中的内容加载进 MAR
C8MDR ← M(MAR)MemR, MDRin存储器从 MAR 地址所在的内存单元读取数据
并加载到 MDR 中
C9T1 ← R0R0out, T1in将 R0 的内容存储在暂存器 T1
C10T2 ← MDR + T1MDRout, MUXop, Add, T2inMDR的内容存储进入ALU另一个入口
执行加法操作
并将结果存储进入T2
C11R0 ← T2T2out, R0in将计算结果写回 R0

控制器种类

控制器的种类分为硬布线控制器和微程序控制器,这里了解即可。简而言之,硬布线控制器就是通过硬件的方式实现控制信号的输出,微程序控制器对指令的 OP 字段进行进一步编码,通过软件的方式实现控制信号的输出。

硬布线控制器

定义:硬布线控制器是通过组合逻辑电路来实现的,通常使用逻辑门、多路复用器、解码器等组合电路元件。

特点

  • 性能:因为是硬件实现,所以通常速度较快。
  • 固定功能:一旦设计和实现完成,修改它就比较困难,需要改变物理电路。
  • 设计复杂性:对于复杂的控制逻辑,硬布线控制器可能会变得非常复杂,难以设计和验证。

微程序控制器

定义:微程序控制器基于存储的微指令集来实现控制逻辑。它使用一块称为“控制存储器”或“微指令存储器”的特殊存储器来存储微指令。每一个微指令定义了一系列的控制信号。

特点

  • 灵活性:由于控制逻辑是存储在存储器中的,所以更改控制逻辑只需要更改存储的微指令,而无需更改硬件。
  • 简化设计:对于复杂的控制逻辑,使用微指令可能会简化设计和验证过程。
  • 性能:通常比硬布线控制器慢,因为它需要从控制存储器中读取微指令。
  • 易于修改和扩展:添加新的指令或修改现有的指令相对容易。
指令、微指令、微命令对比

微命令是计算机硬件控制的基础指令,用于控制某些硬件单元完成某种操作。

微命令
(微操作)
微指令
微程序
指令

一条机器指令对应一个微程序,一个微程序由数条微指令构成,每个微指令可以包含数个微命令。

微指令编码方式
下地址
操作控制
控制信号
下地址
操作控制
译码
译码
译码
直接编码方式
字段直接编码方式
  1. 直接编码方式

微指令的微命令字段中每一位代表一个特定的微命令。每个位可以独立控制一个硬件操作,值为 1 表示激活该微命令,值为 0 表示不激活。

  1. 字段直接编码方式

字段直接编码方式将微指令的微命令字段分成若干小段(字段),每个字段包含一组 互斥 的微命令(即同一时刻只能执行该字段中的一个微命令),不同字段之间包含 相容 的微命令(可以同时执行)。每个字段独立编码,编码值对应字段内的一个微命令或空操作。