硬布线控制器
硬布线控制器时根据指令操作码、目前的时钟周期、节拍信号以及机器状态条件来发出“微命令”。
下方图中FE为取值阶段、IND为间接寻址阶段、EX为执行阶段、INT为中断阶段。
硬布线控制器的设计
设计步骤:
- 分析每个阶段的微操作序列(取值、间址、执行、中断四个阶段),确定指令在什么阶段。
- 选择CPU的控制方式,确定采用定长机器周期还是不定长机器周期,每个机器周期安排几个节拍。
- 安排微操作时序,如何在规定节拍内完成整个机器周期的所有微操作。
- 电路设计
取值周期内的微操作
取值周期所有的指令都是一样的,即
PC -> MAR
1 -> R
M(MAR) -> MDR
MDR -> IR
OP(IR) -> ID(指令译码器,Instruction Decoder)
(PC) + 1 -> PC
间址周期内的微操作
该阶段所有指令都一样
Ad(IR) -> MAR 将IR地址码部分放到MAR中,即形式地址来找有效地址
1 -> R
M(MAR) -> MDR 找到有效地址的数据放入MDR中
MDR -> Ad(IR)
执行周期的微操作
由于该阶段指令所执行的微操作各不相同,就以各些为例:
CLA(clear ACC指令,将ACC清零):
0 -> ACC(也可以写作AC)
LDA X(取数指令,把X所指内容取到ACC中)
Ad(IR) -> MAR
1 -> R
M(MAR) -> MDR
MDR -> AC
JMP X(无条件转移到X的位置)
Ad(IR) -> PC
BAN X (条件转移,Branch ACC Negative,当ACC为负时候转移)
$A_0\cdot Ad(IR) +\overline{A_0}\cdot (PC) \rightarrow PC$
硬布线控制器的特点:
- 指令越多,设计和实现就越复杂,因此一般用RISC
- 如果扩充一条新的指令,则控制器设计需要大改,因此扩充指令比较困难。
- 由于纯硬件实现控制,因此执行速度快,微操作控制信号由组合逻辑电路即时产生。
微程序控制器
微程序设计设计的基本概念:
微命令与微操作。一条机器指令可以分解称一个微操作序列,微操作是计算机中最基本、不可再分解的操作。微命令和微操作时一一对应的。微命令时微操作的控制信号,微操作是微命令的执行过程。
微指令与微周期。微指令是多个微命令的集合,是对指令执行步骤的描述,微周期是从CM(控制器存储器)中取出一条微指令并执行相应微操作所需的时间。
一条微指令的基本由操作控制字段和顺序控制字段(指明下一条微指令的地址)组成。
程序与微程序。程序是由指令序列组成,而微程序是由微指令序列组成,每一种指令对应一个微程序。
微程序的基本组成
图中下地址存放的是下一条要执行的微指令,CM(控制器存储器)是用于存放微指令序列。
微指令的格式
在设计微指令前需要了解的概念:
- 相容性微命令。可以并行完成的微命令。
- 互斥性微命令。不允许并行完成的微命令。
水平型微指令
一条微指令能定义多个可并行的微指令。
优点是微指令条数少,微程序短,执行速度快;缺点是微指令长,编写微程序较麻烦。
垂直型微指令
一条微指令只能定义一个微命令,由微操作码字段规定具体功能。
优点是微指令短、简单、规整,便于编写微程序;缺点是微程序长,微指令条数多,执行速度慢,工作效率低。
微指令的编码方式
微指令的编码方式主要对水平型微指令进行探讨。目的是保证速度的情况下,尽量缩短微指令字长。
直接编码(直接控制)方式
在微指令的操作控制字段中,每一位代表一个微操作命令。
某位为“1”表示该控制信号有效,如下图所示。
优点是简单、直观,执行速度快,操作可并行;
缺点是微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控存容量极大。
字段直接编码方式
将微指令的控制字段分成若干“段”,每段经译码后发出控制信号。
微命令字段分段原则:
- 互斥性微命令分在同一段内,相容性微命令分在不同段内。
- 每小段包含信息位不能太多
- 每小段应留出一个状态,表示本字段不发出任何微命令,当字段长度为3时,只能表示7个互斥的微命令,通常用000表示不操作。
优点:可以缩短微指令字长。
缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢。
字段间接译码方式
一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接译码,又称隐式编码。
优点:可进一步缩短微指令字长。
缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段。
微指令的地址形成方式
微指令的下地址字段指出
微指令格式中设置一条下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式又称为断定方式。
根据机器指令的操作码形成
当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。
增量计数器法
像CPU中CP一样,即 (CMAR)+1 -> CMAR
分支转移
通过测试网络
由硬件产生微程序入口地址
微程序控制单元的设计
设计步骤:
分析每个阶段的微操作序列
写出对应机器的微操作命令及节拍安排
写出每个周期所需的微操作(参照硬布线)
补充微程序控制器特有的微操作:
a.取指周期:
Ad(CMDR) -> CMAR
OP(IR) -> CMAR
b.执行周期:
Ad(CMDR) -> CMAR
确定微指令格式
根据微操作个数决定采用何种编码方式,以确定微指令的操作控制字段的位数。
根据CM中存储的微指令总数,确定微指令的顺序控制字段的位数。
最后按操作控制字段位数和顺序控制字段位数就可以确定微指令字长。
编写微指令码点
根据操作控制字段每一位代表的微操作命令,编写每一条微指令的码点。
例:
取指周期-微程序控制器的节拍安排
假设取指周期为三个节拍
T_0 PC->MAR 将PC中指令放到MAR中
T_0 1-> R 向主存发送读信号
T_1 (PC) + 1 -> PC PC加“1”来指向下一个要执行的指令
T_1 M(MAR) -> MDR 将主存中地址MAR中的数据放入MDR中
T_2 MDR -> IR 将MDR存一份到IR中
T_2 OP(IR)-> 微地址形成部件 将IR的操作码发送给微地址形成部件
此时取指操作用三个微指令即可完成
而每执行完一条微指令的命令后要在最后用一个节拍实现Ad(CMDR) -> CMAR
来将CMDR的下地址信息送给CMAR,使CMAR有下一条地址的信息。取指周期内最后还要执行指令:OP(IR)->微地址形成部件->CMAR
微程序设计分类
静态微程序设计和动态微程序设计
- 静态。微程序无需改变,采用ROM实现。
- 动态。通过改变微指令和微程序改变机器指令,有利于仿真,采用EPROM
毫微程序设计
毫微程序设计就是用毫微程序解释微程序。对微程序的更深一层的套娃。