控制器
主要功能
控制器是计算机系统的指挥中心,控制器的主要功能有:
- 指令解码:CPU 从存储器取出一个指令后,控制器负责解码这个指令,以确定要执行的操作和涉及的操作数。
- 生成控制信号:基于解码的指令,控制器生成一系列的控制信号,这些信号会驱动其他计算机部分(如算术逻辑单元、寄存器和存储器)按预期执行相应的操作。
- 时序控制:通过先后发出不同的控制信号,确保指令的逻辑正确被执行,
根据控制器产生微操作控制信号方式的不同,控制器可以分为硬布线控制器和微程序控制器。
组成
要理解控制器的组成,就要从其功能出发,大体来说,控制器的组成也可以分为三个组件:
- 指令控制器:负责取指和译码,并且形成下一条指令的地址。
- 时序控制器:产生计算机运行所需的各种时序信号。控制指令的执行节奏,确保各个部件协调工作。
- 控制信号发生器:根据指令译码器的输出,产生具体的控制信号。这些控制信号用于控制计算机各个部件的微操作。
指令控制器
指令控制器由 CS:IP 获取当前要执行的指令地址。 其中 CS 为程序段寄存器,标记了进程代码段(.code)的开始,IP 为指令指针寄存器,标记了当前指令在代码段内的偏移。
获取当前指令地址后,输入输出控制电路从内存中读取指令放入指令寄存器中。 然后修改 IP 寄存器的值,使 CS:IP 指向下一条指令的地址。
时序控制器
时序控制器的作用是为每条指令按时间顺序提供控制信号。时序控制器包括时钟发生器和倍频定义单元,其中时钟发生器由石英晶体振荡器发出非常稳定的脉冲信号,就是 CPU 的主频;而倍频定义单元则定义了 CPU 主频是存储器频率(总线频率)的几倍。
晶体振荡器利用石英晶体的压电效应,当施加电压时,晶体在特定频率下可以产生稳定的振荡。 晶体振荡器产生精确的频率信号,作为电子设备的时钟源。这个时钟信号就像一个“节拍器”,控制着设备内部各个部件的协调运作。
晶体振荡器产生的频率信号直接决定了电子设备的时钟周期。一个指令周期中包含 取指令 和 执行指令 这两个 CPU 周期,而 CPU 周期又由多个时钟周期组成。
假设当前要执行 MOV R1, [addr]
这条指令,其功能就是找到内存中 addr 地址的数据,并且将其传输到寄存器 R1 中,这条指令的执行包含以下几个步骤:
- 将地址传入 MAR 中。
- 存储器从 MAR 中读取地址,并且读取数据,存入 MDR。
- 从 MDR 中取出数据,通过 CPU 内的数据总线传输到寄存器 R1 中。
上述过程的执行需要保证严格的时序关系,先后关系不可颠倒,否则会导致指令执行的出错。
通过这个简单的例子是为了说明这样一个原理:在 CPU 内部,一条指令的执行也会被拆分为若干的子过程,这些子过程需要满足严格的时序关系,而这种时序关系就是由时序控制器进行控制的。
控制信号发生器
控制信号发生器负责接收指令译码器的结果,并且在每个时钟周期内产生 控制信号。
其中控制信号可以是 CPU 内的控制信号,通过 CPU 内总线传输至 CPU 内其他部件。 也可以是 CPU 外的控制信号,发送至系统的控制总线,用于协调计算机其他设备与 CPU 的交互。
控制信号
控制信号是由控制信号发生器生成和发出的电信号,这些信号用于指挥 CPU 内部的各种操作。例如,控制信号可以指示算术逻辑单元(ALU)执行加法还是减法,或者指示寄存器进行读写操作。
类型
其实控制信号的种类很多,但就目前阶段而言,会考察的可以被总结为三类控制信号:
- 读写信号:对内存或 IO 设备进行读写,比如
MemR
和MemW
- 寄存器选择信号:选择特定的寄存器进行读写操作,比如
PCin
和PCout
- 操作码信号:示算术逻辑单元(ALU)执行哪种运算,如加法、减法、与、或等。
寄存器传送语言
控制信号决定了计算机指令的执行顺序和数据流动。计算机内部组件根据控制信号执行相应操作,数据流动通常用寄存器传输语言(RTL)描述。
除了控制信号外,常常也需要我们用 RTL 描述数据流动,试题中的 RTL 一般需符合如下规范:
- 用 R 表示寄存器 R 的内容;
- 用 M[addr] 表示读取主存单元 addr 的内容;
- 传送方向用 “←” 表示,传送源在右,传送目的在左;
- 读取主存中的内容
指令执行的控制信号
指令的执行包含取指、译码、执行、写回阶段,在这四个阶段中控制单元会发出不同的控制信号,以实现指令的执行。
以指令ADD R0, (R1)
为例,说明一下指令执行阶段四个阶段的控制信号。
取指和译码阶段
在该阶段中:PC 提供了当前需要读取指令的地址,从相应地址读取指令后,增加 PC 的值,使其指向下一条指令的地址,接着通过译码部件完成译码。
该阶段主要包含如下表所示的控制信号:
时钟 | 功能 | 控制信号 | 解释 |
---|---|---|---|
C1 | MAR ← PC | PCout , MARin | 从 PC 中读取指令地址至 MAR 中 |
C2 | MDR ← M(MAR) | MemR , MDRin | 存储器从 MAR 地址所在的内存单元读取数据 并加载到 MDR 中 |
C3 | MUXop ← PCIncr | PCIncr | 在二路选择器中生成值 1 添加入 ALU 的一端 |
C4 | T2 ← PC + 1 | MARout , T2in , Add | ALU 计算下一条指令的地址 |
C5 | PC ← T2 | T2out , PCin | 将计算得到的地址加载进 PC 中 |
C6 | 指令译码 | 无 | 由指令译码器件完成 |
执行和写回阶段
通过译码得到的控制信号,可以控制指令的执行和写回,对于 ADD R0, (R1)
为例,该阶段包含如下控制信号:
时钟 | 功能 | 控制信号 | 解释 |
---|---|---|---|
C7 | MAR ← R1 | R1out ,MARin | 将 R1 中的内容加载进 MAR |
C8 | MDR ← M(MAR) | MemR , MDRin | 存储器从 MAR 地址所在的内存单元读取数据 并加载到 MDR 中 |
C9 | T1 ← R0 | R0out , T1in | 将 R0 的内容存储在暂存器 T1 |
C10 | T2 ← MDR + T1 | MDRout , MUXop ,Add , T2in | 将MDR 的内容存储进入ALU 另一个入口执行加法操作 并将结果存储进入 T2 |
C11 | R0 ← T2 | T2out , R0in | 将计算结果写回 R0 |
注意
为什么需要暂存器 T1?
采用了单数据总线的系统,无法在一个时钟周期同时将两个不同的数字同时添加到 ALU 的两端,在一个时钟周期内 ALU 两端会接受到相同的数据,所以必须要在当前时钟周期暂存一个数据,在下一个时钟周期再向 ALU 添加另一个数据。
ALU 的输出端也可能有一个暂存器,也是为了避免数据传输时在单总线结构上出现的数据冲突。
种类
控制器的种类分为硬布线控制器和微程序控制器,这里了解即可。简而言之,硬布线控制器就是通过硬件的方式实现控制信号的输出,微程序控制器对指令的 OP 字段进行进一步编码,通过软件的方式实现控制信号的输出。
硬布线控制器
定义:硬布线控制器是通过组合逻辑电路来实现的,通常使用逻辑门、多路复用器、解码器等组合电路元件。
特点:
- 性能:因为是硬件实现,所以通常速度较快。
- 固定功能:一旦设计和实现完成,修改它就比较困难,需要改变物理电路。
- 设计复杂性:对于复杂的控制逻辑,硬布线控制器可能会变得非常复杂,难以设计和验证。
微程序控制器
定义:微程序控制器基于存储的微指令集来实现控制逻辑。它使用一块称为“控制存储器”或“微指令存储器”的特殊存储器来存储微指令。每一个微指令定义了一系列的控制信号。
特点:
- 灵活性:由于控制逻辑是存储在存储器中的,所以更改控制逻辑只需要更改存储的微指令,而无需更改硬件。
- 简化设计:对于复杂的控制逻辑,使用微指令可能会简化设计和验证过程。
- 性能:通常比硬布线控制器慢,因为它需要从控制存储器中读取微指令。
- 易于修改和扩展:添加新的指令或修改现有的指令相对容易。
指令、微指令、微命令
微命令是计算机硬件控制的基础指令,用于控制某些硬件单元完成某种操作。
一条机器指令对应一个微程序,一个微程序由数条微指令构成,每个微指令可以包含数个微命令。
微指令编码方式
- 直接编码方式
微指令中的微命令字段中每位都代表一个微命令。
- 字段直接编码方式
将微指令的微命令字段分为若干小段,把互斥行微命令组合在同一字段中,把相容性微命令组合在不同字段中,每个字段独立编码,每种编码代表一个微命令且各字段编码含义单独定义。