控制器
控制器是计算机系统的指挥中心,控制器的主要功能有:
- 指令解码:CPU从存储器取出一个指令后,控制器负责解码这个指令,以确定要执行的操作和涉及的操作数。
- 生成控制信号:基于解码的指令,控制器生成一系列的控制信号,这些信号会驱动其他计算机部分(如算术逻辑单元、寄存器和存储器)按预期执行相应的操作。
- 指令执行的顺序和时序:通过先后发出不同的控制信号,确保指令的逻辑正确被执行,
根据控制器产生微操作控制信号方式的不同,控制器可以分为硬布线控制器和微程序控制器。
控制信号
概念
控制信号是由控制单元(Control Unit)生成和发出的电信号,这些信号用于指挥CPU内部的各种操作。例如,控制信号可以指示算术逻辑单元(ALU)执行加法还是减法,或者指示寄存器进行读写操作。
类型
其实控制信号的种类很多,但就目前阶段而言,会考察的可以被总结为三类控制信号:
- 读写信号:对内存或IO设备进行读写,比如
MemR
和MemW
- 寄存器选择信号:选择特定的寄存器进行读写操作,比如
PCin
和PCout
- 操作码信号:示算术逻辑单元(ALU)执行哪种运算,如加法、减法、与、或等。
指令的不同执行阶段对应的控制信号
指令的执行包含取指、译码、执行、写回阶段,在这四个阶段中控制单元会发出不同的控制信号,以实现指令的执行。
以指令ADD R0, (R1)
为例,说明一下指令执行阶段四个阶段的控制信号。
取指和译码阶段
时钟 | 功能 | 控制信号 | 解释 |
---|---|---|---|
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 | 指令译码 | 无 | 由指令译码器件完成 |
执行和写回阶段
时钟 | 功能 | 控制信号 | 解释 |
---|---|---|---|
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添加另一个数据。
硬布线控制器
定义:硬布线控制器是通过组合逻辑电路来实现的,通常使用逻辑门、多路复用器、解码器等组合电路元件。
特点:
- 性能:因为是硬件实现,所以通常速度较快。
- 固定功能:一旦设计和实现完成,修改它就比较困难,需要改变物理电路。
- 设计复杂性:对于复杂的控制逻辑,硬布线控制器可能会变得非常复杂,难以设计和验证。
微程序控制器
定义:微程序控制器基于存储的微指令集来实现控制逻辑。它使用一块称为“控制存储器”或“微指令存储器”的特殊存储器来存储微指令。每一个微指令定义了一系列的控制信号。
特点:
- 灵活性:由于控制逻辑是存储在存储器中的,所以更改控制逻辑只需要更改存储的微指令,而无需更改硬件。
- 简化设计:对于复杂的控制逻辑,使用微指令可能会简化设计和验证过程。
- 性能:通常比硬布线控制器慢,因为它需要从控制存储器中读取微指令。
- 易于修改和扩展:添加新的指令或修改现有的指令相对容易。
指令、微指令、微命令
微命令是计算机硬件控制的基础指令,用于控制某些硬件单元完成某种操作。
一条机器指令对应一个微程序,一个微程序由数条微指令构成,每个微指令可以包含数个微命令。
微指令编码方式
- 直接编码方式
微指令中的微命令字段中每位都代表一个微命令。
- 字段直接编码方式
将微指令的微命令字段分为若干小段,把互斥行微命令组合在同一字段中,把相容性微命令组合在不同字段中,每个字段独立编码,每种编码代表一个微命令且各字段编码含义单独定义。