10.1 组合逻辑设计
10.1.1 组合逻辑控制单元框图
CU外特性
控制单元的时钟输入实际上是一个脉冲序列,其频率即为机器的主频,它使CU能 按一定的节拍发出各种控制信号 。
节拍信号
节拍的宽度应满足数据信息通过数据总线从源到目的所需的时间。以时钟为计数脉冲,通过一个计数器,又称节拍发生器,便可产生一个与时钟周期等宽的节拍序列。
微操作的节拍安排
安排微操作节拍时应注意以下三点:
- 微操作的先后顺序不得随意更改 ,故安排微操作节拍时 必须注意微操作的先后顺序 。
- 凡是被控制对象不同的微操作, 若能在一个节拍内执行,应尽可能安排在同一个节拍内 ,以节省时间。
- 如果有些微操作所占时间不长,应该将它们安排在一个节拍内完成,并且允许这些微操作有先后次序。
10.1.2 微操作的节拍安排
采用同步控制的方式
一个机器周期内有3个节拍(时钟周期)
决定一个机器周期内包含多少个节拍的因素
- 需要产生的控制信号的数量
- 控制信号的复杂程度
- 控制信号之间是否能够并行
所以不同机器一个机器周器的节拍数不一定是一样的
假设现在机器CPU内部结构采用非总线方式
各微操作的节拍安排
取指周期
间址周期
执行周期
不同的执行指令,它的微操作节拍安排也不一样
CLA(清空ACC)
将累加器(ACC)清空,所以我们可以把这个微操作安排再任何一个节拍中,这边我们放在T2中
COM(取反)
将ACC中的内容每一位按位取反,再把结果存放到ACC中
这条指令和CLA差不多,我们也可以把这个微操作放在任何一个节拍中,这边我们也放在T2中
SHR(右移)
这里的右移指 算术右移, 即符号位不动,这个也需要2个微操作,但是可以并行进行,所以我们还是放在T2中
CSL(循环左移)
和SHR差不多,只不过这里我们要把AC的第0位送到AC的最低位
STP(停机指令)
机器里面都有停机标记,我们只要将停机标记置成相应的值就可以了,同样我们把这个微操作放在T2中
ADD X(加法)
加法操作,把 X这个内存单元保存的内容 和累加器中的内容相加,结果保存在累加器中。由于取指周期我们已经把指令从内存单元取出放入了IR,那么在执行周期我们需要这个操作数在内存单元中取出完成相应的加法操作
STA X(存数)
把累加器中保存的数据存入到给定的内存单元,存储单元的地址就是X
LDA X(取数)
把X对应的内存单元中的内容取出,保存在累加器中
JMP X(跳转指令)
跳转到给定的地址(X),不需要访存,直接把这条指令(X所对应的内存单元的指令在取指周期已送到IR中)送给PC就行,那下一条执行的指令就是它,即跳转。所以我们还是放在T2这个节拍上
BAN X(条件跳转)
如果上一条指令的结果为负数,则跳转到X;为正数则继续按顺序执行
假设上一条指令的结果保存在累加器中,则可以通过累加器的符号位来判断,如果A0为0,为正数,则继续按顺序执行;如果A0为1,为负数,则跳转
这边为什么没有把PC+1送进去呢?
因为我们在取指周期已经将相应的微操作执行了
中断周期
中断期间要做的3件事
- 保存断点
- 形成中断服务程序的入口地址
- 关中断
中断隐指令并不是一条指令,它是硬件要做的微操作,中断隐指令它只完成了一条指令周期当中中断周期这个机器周期要完成的若干个微操作
10.1.3 组合逻辑设计步骤
列出操作时间表
FE(取值周期)
IND(间址周期)
EX(执行周期)
写出微操作命令的最简表达式
以 M(MAR)—>MDR 为例
画出逻辑图
特点:
10.2 微程序设计
10.2.1 微程序设计思想的产生
由于这些微指令是以二进制代码形式表示的,每位代表一个控制信号,因此 逐条执行每一条微指令,也就相应地完成了一条机器指令的全部操作 。微程序控制单元的核心部件是一个 控制 存储器。
这条微指令里的两个1表示相对应的两个微操作,它的控制信号要在这个节拍中产生,并且由这两个1控制相应的部件。所以每一个位置表示了某一种微操作命令
10.2.2 微程序控制单元框图及工作原理
上面我们所一条机器指令对应一个微程序
控制存储器中的微程序个数应为机器指令数再加上对应取指、间接寻址和中断周期三个微程序。
微程序控制单元的基本框图
微指令的基本格式共分为两个字段,一个为 操作控制字段 ,该字段发出各种控制信号;另一个为 顺序控制字段 ,它可指出下条微指令的地址,以控制微指令序列的执行顺序
工作原理
举例:
假设现在用户程序有这几个微程序:LDA、ADD、STA、STP
在内存和控存的分布如下所示
取指阶段
执行阶段
第1条指令是LDA指令,执行LDA微程序
LDA指令经过取指、执行后,下面接着ADD指令,也有取指、执行过程
执行取指微程序
10.2.3 微指令的编码方式
微指令的编码方式 又称为 微指令的控制方式 ,是指对微指令的控制字段进行编码,以形成控制信号。
直接编码方式
在微指令的操作控制字段中, 每一位代表一个微操作命令 ,这种编码方式即为直接编码方式。
这种方式含义清晰,而且只要微命令从控存读出,即刻可由控制字段发出命令, 速度快 。但由于机器中微操作命令甚多,可能造成控存 容量极大 。
字段直接编码
这种方式就是将微指令的操作控制字段分成若干段,将一组互斥的微操作命令放在一个字段内,通过对这个字段译码,便可对应每一个微命令。这种方式因靠字段直接译码发出微命令,故又有显示编码之称
采用字段直接编码方法可用较少的二进制信息表示较多的微操作命令信号。由于增加了译码电路,使微程序的执行速度稍微减慢。
至于操作控制字段应分几段,与需要并行发出的微命令个数有关。每段的长度可以不等,与具体要求互斥的微命令个数有关。
字段间接编码
这种方式一个字段的某些微命令还需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出微命令,故称为字段间接编码,又称为 隐式编码。
这种方法虽然可以 进一步缩短微指令字长 ,但因削弱了微指令的并行控制能力,因此通常用做字段直接编码法的一种辅助手段。
混合编码
这种方法是把 直接编码和字段编码混合使用 ,以便能综合考虑微指令的字长、灵活性和执行微程序的速度等方面的要求。比如将常用微指令用直接编码方式,不常用微指令用字段直接或间接编码
其他
微指令中还可设置常数字段,用来提供常数、计数器初值等。常数字段还可以和某些解释位配合,如解释位为0,表示该字段提供常数;解释位为1,表示该字段提供某种命令,使微指令更灵活。
10.2.4 微指令序列地址的形成
直接由微指令下地址字段指出
大部分微指令的下地址字段直接指出了后续微指令的地址。这种方式又称为 断定方式 。
根据机器指令的操作码形成
当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件。微地址形成部件实际上是一个编码器,其输入为指令操作码,输出就是对应该机器指令微程序的首地址。
它可采用PROM实现,以指令的操作码作为PROM的地址,而相应的存储单元内容就是对应该指令微程序的首地址。
增量计数器法
对于顺序地址,微指令可以使用增量计数法,即( C M A R ) + 1 → C M A R来形成后续微指令的地址。
分支转移
当遇到条件转移指令时,微指令出现了分支,必须根据各种标志来决定下一条微指令的地址。
其中,转移方式指明判别条件,转移地址指明转移成功后的去向,若不成功则顺序执行。
通过测试网络形成
微指令的地址还可以通过测试网络形成。图中微指令的地址分两部分,高段h为非测试地址,由微指令的H段地址码直接形成;地段1为测试地址,由微指令的L段地址码通过测试网络形成。
由硬件产生微程序入口地址
当电源加电后,第一条微指令的地址可由专门的硬件电路产生,也可由外部直接向CMAR输入微指令的地址,这个地址即为取指周期微程序的入口地址。故响应中断时,可由硬件产生中断周期微程序的入口地址。
当出现间接寻址时,也可由硬件产生间址周期微程序的入口地址。
多路选择器可选择以下4路地址:
10.2.5 微指令格式
微指令格式与微指令的编码方式有关,通常分为 水平型微指令 和 垂直型微指令 两种。
水平型微指令
水平型微指令的特点是 一次能定义并执行多个并行操作 。从编码方法看,直接编码、字段直接编码、字段间接编码和字段混合编码都属于水平型微指令。
垂直型微指令
垂直型微指令的特点是 采用类似机器指令操作码的方式 ,在微指令字中,设置微操作码字段,由微操作码规定微指令的功能。通常一条微指令有1~ 2个微命令,控制1 ~ 2种操作。
两种微指令格式的比较
- 水平型未执行比垂直型微指令 并行操作能力 强、效率高、灵活强。
- 水平型微指令执行一条机器指令所需的微指令数目少,因此 速度 比垂直型微指令的速度快。
- 水平型微指令用较短的微程序结构换取较长的微指令结构,垂直型微指令正相反,它以较长的微程序结构换取较短的微指令结构。
- 水平型微指令与机器指令差别较大 ,垂直型微指令与机器指令相似。
10.2.6 静态微程序设计和动态微程序设计
静态微程序设计
通常指令系统是固定的,对应每一条机器指令的微程序是计算机设计者实现编好的,因此一般微程序无需改变,这种微程序设计技术即成为静态微程序设计,其控制存储器采用 ROM 。
动态微程序设计
如果采用 EPROM 作为控制存储器,人们可以通过改变微指令和微程序来改变机器的指令系统,这种微程序设计技术称为动态微程序设计。动态微程序设计由于可以根据需要改变微指令和微程序,因此可以在一台机器上实现不同类型的指令系统,有利于仿真。
10.2.7 毫微程序设计
微程序 可看作是 解释机器指令 的, 毫微程序 可看作是 解释微程序 的,而组成毫微程序设计的优点是用少量的控制存储器空间来达到 高度的并行。
毫微程序设计采用两级微程序的设计方法。
CMAR1为第一级控存地址寄存器,CMDR1 存放从第一级控制存储器中读出的微指令,如果该微指令只产生一些简单的控制信号,则可以通过译码,直接形成微操作命令,不必调用第二级。
如果需调用第二级控制存储器时,则将毫微程序的地址送至CMAR2 ,然后由第二级控制存储器中读出的微指令去直接控制硬件。
垂直型微指令不是和水平型微指令一条一条地对应,而是由水平型微指令(称为毫微指令)组成的毫微程序去执行垂直型微指令的操作。
二级控制存储器虽然能减少控制存储器的容量,但因有时一条微指令要访问两次控制存储器,影响了速度。
10.2.8 串行微程序控制和并行微程序控制
完成一条微指令也分两个阶段:取微指令和执行微指令。由于取微指令和执行微指令的操作是在两个完全不同的部件中完成的,因此可将这两部分操作秉性进行,以缩短微指令周期,这就是并行微程序控制
当采用并行微程序控制时,为了不影响本条微指令的正确执行,需增加一个微指令寄存器来暂存下一条微指令。由于执行本条微指令与取下一条微指令是同时进行的,因此当遇到需要根据本条微指令的处理结果来决定下条微指令的地址时,就不能并行操作,此时可延迟一个微指令周期再取微指令。
在第7章-指令系统中提过:二级流水
10.2.9 微程序设计举例
执行阶段的微操作及节拍安排
微程序设计控制单元的主要任务是编写对应各条机器指令的微程序,具体步骤是首先写出对应机器指令的全部微操作及节拍安排,然后确定微指令格式,最后编写出每条微指令的二进制代码(称为微指令码点)。
在取指微程序中,每一条微指令都需要增加一个将微指令下地址字段送至CMAR的微操作,记作A d ( C M D R ) → C M A R,而这一操作只能由下一个时钟周期T的上升沿将地址打入到CMAR内。至于取指微程序的最后一条微指令,其后续微指令的地址是由微地址形成部件形成的,而且也只能由下一个T的上升沿将该地址打入到CMAR中,即微地址形成部件→ C A M R 。为了反映该地址与操作码有关,故记作O P ( I R ) →微地址形成部件→ C M A R。
微操作指令共20个,微指令共38条。CLA、COM、SHR、CSL、STP为非访存指令,ADD、STA、LDA为访存指令,JMP、BAN为转移类指令。
确定微操作格式
微指令的格式包括微指令的编码方式、后续微指令的地址形成方式、微指令字长等3个方面。
- 微指令的编码方式:可采用直接编码方式,由微指令控制字段的某一位直接控制一个微操作。
- 后续微指令的地址形成方式:可采用由指令的操作码和微指令的下地址字段两种方式形成后续微指令的地址。
- 微指令字长:微指令字长至少取26位。
如果将CMDR的下地址字段Ad(CMDR)直接接到控制存储器的地址线上,并由下一个时钟周期的上升沿将该地址单元的内容(微指令)读到CMDR中,便能做到在一个时钟周期内读出并执行一条微指令。同理,也可将指令寄存器的操作码字段OP(IR)经微地址形成部件形成的后续微指令的地址,直接送到控制存储器的地址线上。这两路地址可通过一个多路选择器,根据需要任选一路。
这样,10条机器指令共对应20-2=18个微操作和38-19=19条微指令。为了便于扩充,操作控制字段取24位,下地址字段取6位。
在确定微指令格式机器字长的过程中,还可将一些微操作命令合用一位代码来控制,这样可大大压缩微指令的操作控制字段,缩短微指令字长。
举例:
假设规定微操作对应的控制码第几位如下:
微指令控制码第0位:PC—>MAR
微指令控制码第1位:1—>R
......
编写微指令码点