目录
上篇:第九章、控制单元的功能
第十章 控制单元的设计
10.1 组合逻辑设计
10.1.1 组合逻辑控制单元框图
图示出了控制单元的外特性,其中指令的操作码是决定控制单元发出不同控制信号的关键。
为了简化控制单元的逻辑,将存放在 I R IR IR 的 n n n 位操作码经过一个译码电路产生 2 n 2^{n} 2n 个输出,这样每对应一种操作码便有一个输出送至 CU。
控制单元的时钟输入实际上是一个脉冲序列,其频率即为机器的主频,它使 CU 能按一定的节拍(T)发出各种控制信号。节拍的宽度应满足数据信息通过数据总线从源到目的所需的时间。以时钟为计数脉冲,通过一个计数器,又称节拍发生器,便可产生一个与时钟周期等宽的节拍序列。如果将指令译码和节拍发生器从 CU 中分离出来,便可得简化的控制单元框图。
10.1.2 微操作的节拍安排
假设机器采用同步控制,每个机器周期包含 3 个节拍,而且 CPU 内部结构采用非总线方式,如图所示
其中 MAR 和 MDR 分别直接和地址总线和数据总线相连,并假设 IR 的地址码部分与 MAR 之间有通路。
安排微操作时序的原则:
- ① 微操作的
先后顺序不得
随意更改
- ②
被控对象不同
的微操作尽量安排在一个节拍
内完成 - ③ 占用
时间较短
的微操作尽量安排在一个节拍
内完成,并允许有先后顺序
1. 取指周期微操作的节拍安排
T
0
T_{0}
T0
P
C
→
M
A
R
,
1
→
R
PC→MAR,1→R
PC→MAR,1→R
T
1
T_{1}
T1
M
(
M
A
R
)
→
M
D
R
M(MAR)→MDR
M(MAR)→MDR 和
(
P
C
)
+
1
→
P
C
(PC)+1→PC
(PC)+1→PC
T
2
T_{2}
T2
O
P
(
I
R
)
→
I
D
OP(IR)→ID
OP(IR)→ID
2. 间址周期微操作的节拍安排
T
0
T_{0}
T0
A
d
(
I
R
)
→
M
A
R
,
1
→
R
Ad(IR)→MAR,1→R
Ad(IR)→MAR,1→R
T
1
T_{1}
T1
M
(
M
A
R
)
→
M
D
R
M(MAR)→MDR
M(MAR)→MDR
T
2
T_{2}
T2
M
D
R
→
A
d
(
I
R
)
MDR→Ad(IR)
MDR→Ad(IR)
3. 执行周期微操作的节拍安排
非访存指令:
- ① 清除累加器指令 CLA
该指令在执行周期只有一个微操作,按同步控制的原则,此操作可安排在 T 0 T_{0} T0~ T 2 T_{2} T2的任一节拍内,其余节拍空,如
T
0
T_{0}
T0
T
1
T_{1}
T1
T
2
T_{2}
T2
0
→
A
C
0→AC
0→AC
- ② 累加取反指令 COM
同理,累加取反操作可安排在 T 0 T_{0} T0~ T 2 T_{2} T2的任一节拍中,如
T
0
T_{0}
T0
T
1
T_{1}
T1
T
2
T_{2}
T2
A
C
‾
→
A
C
\overline{AC}→AC
AC→AC
- ③ 算术右移一位指令 SHR
T
0
T_{0}
T0
T
1
T_{1}
T1
T
2
T_{2}
T2
L
(
A
C
)
→
R
(
A
C
)
,
A
C
0
→
A
C
0
L(AC)→R(AC),AC_{0}→AC_{0}
L(AC)→R(AC),AC0→AC0
- ④ 循环左移一位指令 CSL
T
0
T_{0}
T0
T
1
T_{1}
T1
T
2
T_{2}
T2
R
(
A
C
)
→
L
(
A
C
)
,
A
C
0
→
A
C
n
R(AC)→L(AC),AC_{0}→AC_{n}
R(AC)→L(AC),AC0→ACn 即(p-1(AC))
- ⑤ 停机指令 STP
T
0
T_{0}
T0
T
1
T_{1}
T1
T
2
T_{2}
T2
0
→
G
0→G
0→G
非访存指令:
- ⑥ 加法指令 ADD X
T
0
T_{0}
T0
A
d
(
I
R
)
→
M
A
R
,
1
→
R
Ad(IR)→MAR,1→R
Ad(IR)→MAR,1→R
T
1
T_{1}
T1
M
(
M
A
R
)
→
M
D
R
M(MAR)→MDR
M(MAR)→MDR
T
2
T_{2}
T2
(
A
C
)
+
(
M
D
R
)
→
A
C
(AC)+(MDR)→AC
(AC)+(MDR)→AC
- ⑦ 存数指令 STA X
T
0
T_{0}
T0
A
d
(
I
R
)
→
M
A
R
,
1
→
W
Ad(IR)→MAR,1→W
Ad(IR)→MAR,1→W
T
1
T_{1}
T1
A
C
→
M
D
R
AC→MDR
AC→MDR
T
2
T_{2}
T2
M
D
R
→
M
(
M
A
R
)
MDR→M(MAR)
MDR→M(MAR)
- ⑧ 取数指令 LDA X
T
0
T_{0}
T0
A
d
(
I
R
)
→
M
A
R
,
1
→
R
Ad(IR)→MAR,1→R
Ad(IR)→MAR,1→R
T
1
T_{1}
T1
M
(
M
A
R
)
→
M
D
R
M(MAR)→MDR
M(MAR)→MDR
T
2
T_{2}
T2
M
D
R
→
A
C
MDR→AC
MDR→AC
转移指令类:
- ⑨ 无条件转移命令 JMP X
T
0
T_{0}
T0
T
1
T_{1}
T1
T
2
T_{2}
T2
A
d
(
I
R
)
→
P
C
Ad(IR)→PC
Ad(IR)→PC
- ⑩ 有条件转移(负则转)指令 BAN X
T
0
T_{0}
T0
T
1
T_{1}
T1
T
2
T_{2}
T2
A
0
⋅
A
d
(
I
R
)
+
A
0
‾
⋅
(
P
C
)
→
P
C
A_{0} \cdot Ad(IR) + \overline{A_{0}} \cdot (PC)→PC
A0⋅Ad(IR)+A0⋅(PC)→PC
4. 中断周期微操作的节拍安排
在执行周期的最后时刻,CPU 要向所有中断源发中断查询信号,若检测到某个中断源有请求,并且未被屏蔽又被排队选中,则在允许中断的条件下,CPU 进入中断周期,此时 CPU 由中断隐指令完成下列操作(假设程序断点存入主存 0 号地址单元内)
T
0
T_{0}
T0
0
→
M
A
R
,
1
→
W
0→MAR,1→W
0→MAR,1→W
T
1
T_{1}
T1
P
C
→
M
D
R
PC→MDR
PC→MDR
T
2
T_{2}
T2
M
D
R
→
M
(
M
A
R
)
MDR→M(MAR)
MDR→M(MAR)
CPU 进入中断周期,由硬件置 0
允许中断触发器 EINT
,即关中断
10.1.3 组合逻辑设计步骤
- ① 列出微操作命令的操作时间表
- ② 写出操作命令的最简逻辑表达式
- ③ 画出操作命令的逻辑图
10.2 微程序设计
10.2.1 微程序设计思想的产生
微程序设计思想是英国剑桥大学教授 M.V.Wilkes
在 1951
年首先提出的。
Wilkes
提出,将一条机器指令编写成一个微程序,每一个微程序包含若干条微指令,每一条微指令对应一个或几个徼操作命令。然后把这些微程序存到一个控制存储器中,用寻找用户程序机器指令的办法来寻找每个微程序中的微指令。
逐条执行每一条微指令,也就相应地完成了一条机器指令的全部操作。可见,微程序控制单元的核心部件是一个控制存储器,简称 控存
。
10.2.2 微程序控制单元框图及工作原理
1. 机器指令对应的微程序
微程序设计控制单元的过程就是编写每一条机器指令的微程序,它是按执行每条机器指令所需的微操作命令的先后顺序而编写的,因此,一条机器指令对应一个微程序,如图所示,每一条机器指令都与一个以操作性质命名的微程序对应。
由于任何一条机器指令的取指令操作是相同的,因此将取指令操作的命令统一编成一个微程序,这个徼程序只负责将指令从主存单元中取出送至指令寄存器中。
2. 微程序控制单元的基本框图
上图示意了微程序控制单元的基本组成,虚线框内为微程序控制单元,其中控制存储器(简称控存)是微程序控制单元的核心部件,用来存放全部微程序,CMAR 是控存地址寄存器,用来存放欲读出的指令地址,CMDR 是控存数据寄存器,用来存放从控存读出的微指令;顺序逻辑是用来控制微指令序列的。
微指令的基本格式如上图所示,共分两个字段,一个为操作控制字段,该字段发出各种控制信号,另一个为顺序控制字段,它可指出下条微指令的地址,以控制微指令序列的执行顺序。
3. 工作原理
取指阶段:
- ① 获取取指周期程序首地址 M → C M A R M→CMAR M→CMAR
- ② 取微指令,将对应控存 M 地址单元中的第一条微指令读到控存数据寄存器中,记作 C M ( C M A R ) → C M D R CM(CMAR)→CMDR CM(CMAR)→CMDR
- ③ 产生微操作命令
- ④ 形成下一条微指令的地址 M+1,并将 M+1 送至 CMAR
- ⑤ 取下一条指令,即 C M ( C M A R ) → C M D R CM(CMAR)→CMDR CM(CMAR)→CMDR
- ⑥ 产生微操作命令
- ⑦ 形成下一条微指令的地址
- … 以此类推,直到取出取指周期最后一条微指令
执行阶段:
- ① 指令微程序首地址形成
- ② 取微指令
- ③ 产生微操作命令
- ④ 形成下一条微指令的地址
- ⑤ 取下一条指令
- ⑥ 产生微操作命令
- ⑦ 形成下一条微指令的地址
- … 以此类推,直到取出指令微程序的最后一条微指令 P+2
10.2.3 微指令的编码方式
微指令的编码方式又叫微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。
1. 直接编码(直接控制)方式
在微指令的操作控制字段中,每一位代表一个微命令,这种编码方式即为直接编码方式。
2. 字段直接编码方式
将微指令的操作控制字段分成若干段,将一组互斥的微命令放在一个字段内,通过对这个字段译码,便可对应每一个微命令,这种方式因靠字段直接译码发出微命令,故又有显示编码之称。
这种编码方式要求每个字段中的命令都是 互斥
的。
3. 字段间接编码方式
这种方式一个字段的某些微命令还需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出微命令,故称为字段间接编码,又称隐式编码。
该方法虽然可以进一步缩短微指令字长,但因削弱了微指令的并行控制能力,因此通常用作字段直接编码法的一种辅助手段。
4. 混合编码
这种方法是把直接编码和字段编码(直接或间接)混合使用,以便能综合考虑微指令的字长、灵活性和执行微程序的速度等方面的要求。
10.2.4 微指令序列地址的形成
- ① 直接由微指令的下地址字段指出
- ② 根据机器指令的操作码形成
- ③ 增量计数器法
- ④ 分支转移
- ⑤ 通过测试网络形成
- ⑥ 微程序入口地址
10.2.5 微指令格式
微指令格式与微指令的编码方式有关,通常分为水平型微指令和垂直型微指令两种。
1. 水平型微指令
水平型微指令的特点是一次能定义并执行多个并行操作的微命令。
从编码方式看,直接编码、字段直接编码、字段间接编码以及直接和字段混合编码都属水平型微指令。其中直接编码速度最快,字段编码要经过译码,故速度受影响。
2. 垂直型微指令
垂直型微指令的特点是采用类似机器指令操作码的方式,在微指令字中,设置微操作码字段,由微操作码规定微指令的功能。通常一条微指令有 1 ~ 2 个微命令,控制 1 ~ 2 种操作。这种微指令不强调其并行控制功能。
3. 两种微指令格式的比较
- ① 水平型微指令比垂直型微指令并行操作能力强,效率高,灵活性强
- ② 水平型微指令执行一条机器指令所需的微指令数目少,因此速度比垂直型微指令快
- ③ 水平型微指令用较短的微程序结构换取较长的微指令结构,垂直型微指令正相反,它以较长的微程序结构换取较短的微指令结构。
- ④ 水平型微指令与机器指令差别较大,垂直型微指令与机器指令相似。
10.2.6 静态微程序设计和动态微程序设计
类型 | 描述 |
---|---|
静态 | 微程序无须改变,采用 ROM |
动态 | 通过改变微指令和微程序改变机器指令,有利于仿真,采用 EPROM |
10.2.7 毫微程序设计
微程序可看作是解释机器指令的,毫微程序可看作是解释微程序的,而组成毫微程序的毫微指令则是用来解释微指令的。采用毫微程序设计计算机的优点是用少量的控存空间来达到高度的并行。
毫微程序设计采用两级微程序的设计方法。第一级微程序为垂直型微指令,并行功能不强,但有严格的顺序结构,由它确定后继微指令的地址,当需要时可调用第二级。第二级微程序为水平型微指令,具有很强的并行操作能力,但不包含后继微指令的地址。第二级微程序执行完毕后又返回到第一级微程序。两级微程序分别放在两级控制存储器内。
CMAR1 为第一级控存地址寄存器,CMDR1 存放从第一级控存中读出的微指令,如果该微指令只产生一些简单的控制信号,则可以通过译码,直接形成微操作命令,不必调用第二级。如果需调用第二级控存时,则将毫微程序的地址送至 CMAR2 ,然后由从第二级控存中读出的微指令去直接控制硬件。值得注意的是垂直型微指令不是和水平型微指令一条一条地对应,而是由水平型微指令(称作毫微指令)组成的毫徼程序去执行垂直型微指令的操作。
10.2.8 串行微程序控制和并行微程序控制
- 串行操作
- 并行操作
10.2.9 微程序设计举例
1. 写出对应机器指令的微操作及节拍安排
(1)取指阶段的微操作及节拍安排
考虑需要形成后继指令的地址:
T
0
T_{0}
T0
P
C
→
M
A
R
,
1
→
R
PC→MAR,1→R
PC→MAR,1→R
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR
T
2
T_{2}
T2
M
(
M
A
R
)
→
M
D
R
M(MAR)→MDR
M(MAR)→MDR ,
(
P
C
)
+
1
→
P
C
(PC)+1→PC
(PC)+1→PC
T
3
T_{3}
T3
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR
T
4
T_{4}
T4
M
D
R
→
I
R
,
O
P
(
I
R
)
→
MDR→IR,OP(IR)→
MDR→IR,OP(IR)→微地址形成部件(编码器)
T
5
T_{5}
T5
O
P
(
I
R
)
→
C
M
A
R
OP(IR)→CMAR
OP(IR)→CMAR
(1)执行阶段的微操作及节拍安排
非访存指令:
- ① CLA 指令
T
0
T_{0}
T0
0
→
A
C
0→AC
0→AC
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR,取指微程序入口地址
→
C
M
A
R
→CMAR
→CMAR
- ② COM 指令
T
0
T_{0}
T0
A
C
‾
→
A
C
\overline{AC}→AC
AC→AC
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR,取指微程序入口地址
→
C
M
A
R
→CMAR
→CMAR
- ③ SHR 命令
T
0
T_{0}
T0
L
(
A
C
)
→
R
(
A
C
)
,
A
C
0
→
A
C
0
L(AC)→R(AC), AC_{0}→AC_{0}
L(AC)→R(AC),AC0→AC0
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR,取指微程序入口地址
→
C
M
A
R
→CMAR
→CMAR
- ④ CSL 指令
T
0
T_{0}
T0
R
(
A
C
)
→
L
(
A
C
)
,
A
C
0
→
A
C
n
R(AC)→L(AC), AC_{0}→AC_{n}
R(AC)→L(AC),AC0→ACn
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR,取指微程序入口地址
→
C
M
A
R
→CMAR
→CMAR
- ④ STP 指令
T
0
T_{0}
T0
0
→
G
0→G
0→G
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR,取指微程序入口地址
→
C
M
A
R
→CMAR
→CMAR
访存指令:
- ⑥ ADD 指令
T
0
T_{0}
T0
A
d
(
I
R
)
→
M
A
R
,
1
→
R
Ad(IR)→MAR,1→R
Ad(IR)→MAR,1→R
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR
T
2
T_{2}
T2
M
(
M
A
R
)
→
M
D
R
M(MAR)→MDR
M(MAR)→MDR
T
3
T_{3}
T3
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR
T
4
T_{4}
T4
(
A
C
)
+
(
M
D
R
)
→
A
C
(AC)+(MDR)→AC
(AC)+(MDR)→AC
T
5
T_{5}
T5
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR,取指微程序入口地址
→
C
M
A
R
→CMAR
→CMAR
- ⑦ STA 指令
T
0
T_{0}
T0
A
d
(
I
R
)
→
M
A
R
,
1
→
R
Ad(IR)→MAR,1→R
Ad(IR)→MAR,1→R
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR
T
2
T_{2}
T2
A
C
→
M
D
R
AC→MDR
AC→MDR
T
3
T_{3}
T3
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR
T
4
T_{4}
T4
M
D
R
→
M
(
M
A
R
)
MDR→M(MAR)
MDR→M(MAR)
T
5
T_{5}
T5
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR,取指微程序入口地址
→
C
M
A
R
→CMAR
→CMAR
- ⑧ LDA 指令
T
0
T_{0}
T0
A
d
(
I
R
)
→
M
A
R
,
1
→
R
Ad(IR)→MAR,1→R
Ad(IR)→MAR,1→R
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR
T
2
T_{2}
T2
M
(
M
A
R
)
→
M
D
R
M(MAR)→MDR
M(MAR)→MDR
T
3
T_{3}
T3
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR
T
4
T_{4}
T4
M
D
R
→
A
C
MDR→AC
MDR→AC
T
5
T_{5}
T5
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR,取指微程序入口地址
→
C
M
A
R
→CMAR
→CMAR
- ⑨ JMP 指令
T
0
T_{0}
T0
A
d
(
I
R
)
→
P
C
Ad(IR)→PC
Ad(IR)→PC
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR,取指微程序入口地址
→
C
M
A
R
→CMAR
→CMAR
- ⑩ BAN 指令
T
0
T_{0}
T0
A
0
⋅
A
d
(
I
R
)
+
A
0
‾
⋅
(
P
C
)
→
P
C
A_{0} \cdot Ad(IR) + \overline{A_{0}} \cdot (PC)→PC
A0⋅Ad(IR)+A0⋅(PC)→PC
T
1
T_{1}
T1
A
d
(
C
M
D
R
)
→
C
M
A
R
Ad(CMDR)→CMAR
Ad(CMDR)→CMAR,取指微程序入口地址
→
C
M
A
R
→CMAR
→CMAR
2. 确定微指令格式
- (1)微指令的编码方式
- 采用直接控制
- (2)后续微指令的地址形成方式
- 由机器指令的操作码通过微地址形成部件形成
- 由微指令的下地址字段直接给出
- (3)微指令字长
- 由 20 个微操作
- 确定操作控制字段最少 20 位
- 由 38 条微指令
- 确定微指令的下地址字段为 6 位
- 微指令字长可取 20+6=26 位
3. 编写微指令码点
上篇:第九章、控制单元的功能