(三)控制器的功能和工作原理
1. 控制器的设计方式
1.1. 组合逻辑
也称为硬布线逻辑;
基本思想
- 综合化简产生微命令的条件,形成相应逻辑式;
- 根据逻辑式,用组合逻辑电路实现;
- 执行指令时,由组合逻辑电路(微命令发生器)在相应时间发出所需微命令,控制有关操作;
- 微命令发生器:控制器本质是根据输入指令的操作码,按照严格的时序,生成一个或多个微操作命令信号;
- 微操作命令:CPU 执行指令时分解出的最小原子操作,是硬件电路直接支持的基本动作。例如:
- 本质是选通对应寄存器的输入/输出控制信号,并且选通寄存器之间的数据通路;
- 是电路水平的物理操作,直接操作多路选择/复用器的选择线,或寄存器输入/输出的使能线;
- 时序:即一个工作周期内,应按照执行顺序,在不同的节拍内选通对应的微操作信号;
- 微操作命令:CPU 执行指令时分解出的最小原子操作,是硬件电路直接支持的基本动作。例如:
设计步骤
- 1)列出每个信号的时间表;
- 2)列出逻辑表达式并化简;
- 3)根据逻辑式画出逻辑电路图;
信号时间表示意图

优点:速度快,思路清晰,简单明了;
缺点:设计不规整,结构凌乱,修改和扩展的难度较大;
用途:多用于 RISC 系统;
1.2. 微程序控制
- 基本思想
- 引入存储程序的思想,将微操作控制信号按一定规则编码,形成微指令,存放到一个只读存储器里;
- 存放微程序的存储器称为控制存储器(Control Memory,CM,简称控存);
- 基本概念
- 微程序:包含若干微指令,用于解释和执行一条机器指令;
- 每条机器指令和一个微程序对应;
- 微指令:对应完成机器指令的某一步操作,由一个或多个微命令组成;
- 微指令一般是顺序执行;
- 微命令:对微操作信号的直接编码;
- 在一个 CPU 周期内,多个微命令一般是并行执行;
- 例:
RegWrite[R1]微命令,直接对应使能 R1 寄存器的输出控制线;
- 微程序:包含若干微指令,用于解释和执行一条机器指令;
- 通用微程序
- 取指、间址、中断等过程在不同指令执行时都是相同的,因此为其统一编写微程序;
- 若 CPU 系统支持
条指令,则微程序有 或 个; :表示加上取指微程序,考研用; :表示加上取指、间址、中断微程序;
2. 微程序控制器
2.1. 基本结构

- 控存 CM
- 微程序控制器的核心部件;
- 只读存储器 ROM,一经固定不可再修改;
- CMAR (μPC):控存地址寄存器,存放要读出的微指令地址;
- CMDR (μMDR):控存数据寄存器,存放读出的微指令;
- 顺序逻辑器:形成下一条微指令地址,控制微指令的执行流;
- 其输入和微地址形成部件、当前微指令的下地址、时钟信号、外来标志有关;
2.2. 微指令编码
- 基本结构:
操作控制字段 | 下地址;- 操作控制字段:对应微操作命令,决定微指令的功能;
- 下地址:指示如何寻找下一条微指令;
- 直接编码法
- 操作控制字段每一位对应一个微操作命令,为 1 表示有效/选通;
- 优点:速度快;
- 缺点:利用率低,能支持的微操作数量少;
- 字段直接编码法
- 将所有微命令分为若干组,每组内部的微命令为互斥的;
- 互斥:即同一时间只有一个微命令生效,或都不生效(信号无效);
- 每一组用若干位控制字段编码,然后用译码器进行输出;
- 设某一段有
个互斥的微命令,则需要比特数 ; - +1 表示无效信号;
- 优点:缩短微指令字长,提高字段利用率;
- 缺点:增加了译码时间,导致译码速度变慢;
- 将所有微命令分为若干组,每组内部的微命令为互斥的;
- 字段间接编码法
2.3. 微指令格式
水平型微指令:一条微指令可以并行发出多个控制信号。直接编码和字段直接编码都属于水平型。
垂直型微指令:设置了类似于机器指令的操作码字段,一条微指令只能执行一种基本操作。
二者的比较

2.4. 微指令地址
- 断定法:即直接用微指令的下地址字段作为下一条地址;
- 增量计数器:即 CMAR 自增得到;
- 由机器指令的操作码形成;
- 由专有硬件直接产生下一条地址;
- 例:取指、中断、间址指令;
- 控制存储器的大小(容量):
; :CMDR 位数; :下地址字段位数; - 因为下一条地址同时受到 CMAR 位数,下地址字段位数的限制,故要取最小值;
习题
- 微程序控制器采用直接控制编码微指令,后续微指令地址由下地址字段给出。共有 28 个微命令,6 个互斥可判定的外部条件,控制存储器的容量为 512×40 位,设计其微指令格式,并说明理由
- 答案:操作控制字段 28 位,外部条件编码 3 位,下地址字段 9 位;
- 解析:CM 容量为 512×40 位,说明共有 512 种微指令,微指令字长 40 位;
- 直接编码方式,一位对应一条微命令,所以操作控制字段需要 28 位;
- 512 种微指令,需要地址位数
位; - 剩下 3 位给外部命令,排在微命令编码之后,
,所以可以编码全部外部条件;
- 拓展:若外部条件不是互斥的,则外部条件位数不能用
计算,而是一个外部条件对应 1 位,共计 位;