写在前面:
- 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
一、微指令序列地址的形成
1、直接由微指令的下地址字段指出
微指令的下地址字段直接指出了后续微指令的地址。这种方式又称为断定方式。
2、根据机器指令的操作码形成
当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。微地址形成部件实际是一个编码器,其输入为指令操作码,输出就是对应该机器指令微程序的首地址。
3、增量计数器法
在很多情况下,后续微指令的地址是连续的,对于顺序地址,微指令可采用增量计数法,即(CMAR)+1→CMAR来形成后续微指令的地址。
4、分支转移
当遇到条件转移指令时,微指令出现了分支,此时必须根据各种标志来决定下一条微指令的地址。
微指令中包括转移方式和转移地址,其中转移方式指明判别条件,转移地址指明转移成功后的去向,若不成功则顺序执行。也有的转移微指令中设两个转移地址,条件满足时选择其中一个转移地址,条件不满足时选择另一个转移地址。
5、通过测试网络形成
微指令的地址还可通过测试网络形成,如下图所示。图中微指令的地址分两部分,高段H为非测试地址,由微指令的H段地址码直接形成;低段I为测试地址,由微指令的L段地址码通过测试网络形成。
6、由硬件产生微程序入口地址
当电源加电后,第一条微指令的地址可由专门的硬件电路产生,也可由外部直接向CMAR输入微指令的地址,这个地址即为取指周期微程序的入口地址。
当有中断请求时,若条件满足,CPU响应中断进入中断周期,此时需中断现行程序,转至对应中断周期的微程序。由于设计控制单元时已安排好中断周期微程序的入口地址,故响应中断时,可由硬件产生中断周期微程序的入口地址。
当出现间接寻址时,也可由硬件产生间址周期微程序的入口地址。
二、微指令格式
1、水平型微指令
水平型微指令的特点是一次能定义并执行多个并行操作的微命令。下图所示的就是典型的水平型微指令。
从编码方式看,直接编码、字段直接编码、字段间接编码以及直接和字段混合编码都属于水平型微指令,其中直接编码速度最快,字段编码要经过译码,故速度受影响。
2、垂直型微指令
垂直型微指令的特点是采用类似机器指令操作码的方式,在微指令字中,设置微操作码字段,由微操作码规定微指令的功能。
通常一条微指令有1~2个微命令,控制1~2种操作,这种微指令不强调其并行控制功能(换句话说,它和水平型微指令的差别就是它不能一次定义并执行多个并行操作的微命令)。
3、两种微指令格式的比较
(1)水平型微指令比垂直型微指令并行操作能力强、效率高、灵活性强。
(2)水平型微指令执行一条机器指令所需的微指令数目少,因此速度比垂直型微指令的速度快。
(3)水平型微指令用较短的微程序结构换取较长的微指令结构,垂直型微指令正相反,它以较长的微程序结构换取较短的微指令结构。
(4)水平型微指令与机器指令差别较大,垂直型微指令与机器指令相似。
三、静态微程序设计和动态微程序设计
1、静态微程序设计
通常指令系统是固定的,对应每一条机器指令的微程序是计算机设计者事先编好的,因此一般微程序无须改变(也不能改变),这种微程序设计技术即称为静态微程序设计,其控制存储器采用ROM。
2、动态微程序设计
如果采用EPROM作为控制存储器,人们可以通过改变微指令和微程序来改变机器的指令系统,这种微程序设计技术称为动态微程序设计。
四、毫微程序设计
微程序可看作是解释机器指令的,毫微程序可看作是解释微程序的,而组成毫微程序的毫微指令则是用来解释微指令的。采用毫微程序设计计算机的优点是用少量的控制存储器空间来达到高度的并行。
毫微程序设计采用两级微程序的设计方法。
①第一级微程序为垂直型微指令,并行功能不强但有严格的顺序结构,由它确定后续微指令的地址,当需要时可调用第二级。
②第二级微程序为水平型微指令,具有很强的并行操作能力,但不包含后续微指令的地址。
③第二级微程序执行完毕后又返回到第一级微程序。两级微程序分别放在两级控制存储器内。
上图是毫微程序控制存储器的基本组成,图中为第一级控存地址寄存器,存放从第一级控制存储器中读出的微指令,如果该微指令只产生一些简单的控制信号,则可以通过译码,直接形成微操作命令,不必调用第二级。如果需调用第二级控制存储器时,则将毫微程序的地址送至,然后由从第二级控制存储器中读出的微指令去直接控制硬件。
五、串行微程序控制和并行微程序控制
与机器指令一样,完成一条微指令也分两个阶段——取微指令和执行微指令。取微指令和执行微指令的操作是在两个完全不同的部件中完成的。
(1)取微指令和执行微指令的操作串行执行,这就是串行微程序控制。
(2)将取微指令和执行微指令这两部分操作并行进行,以缩短微指令周期,这就是并行微程序控制。
六、微程序设计举例
1、写出对应机器指令的微操作及节拍安排
(1)取指阶段的微操作及节拍安排:
(2)执行阶段的微操作及节拍安排:
①CLA指令:
②COM指令:
③SHR指令:
④CSL指令:
⑤STP指令:
⑥ADD指令:
⑦STA指令:
⑧LDA指令:
⑨JMP指令:
⑩BAN指令:
2、确定微指令格式
(1)根据微操作个数决定采用何种编码形式,以确定微指令的操作控制字段的位数。上述微操作数不多,可采用直接编码方式,由微指令控制字段的某一位直接控制一个微操作。
(2)选择后续微指令地址的形成方式。根据上述分析,可采用由指令的操作码和微指令的下地址字段两种方式形成后续微指令的地址。
(3)按操作控制字段位数和顺序控制字段(下地址字段)位数确定微指令字长。根据直接编码方式,20个微操作对应20位操作控制字段,根据38条微指令,对应6位下地址字段(),这样,微指令字长至少取26位。
在38条微指令中有19条微指令是为了控制将后续微指令的地址打入CMAR的操作(其中18条是微指令下地址字段Ad(CMDR)→CMAR,另一条是指令操作码OP(IR)→微地址形成部件→CMAR),因此实际上是每两个时钟周期才能取出并执行一条微指令,如果能做到每一个时钟周期取出并执行一条微指令,将大大提高微程序控制的速度。
如果将CMDR的下地址字段Ad(CMDR)直接接到控制存储器的地址线上,并由下一个时钟周期的上升沿将该地址单元的内容(微指令)读到CMDR中,便能做到在一个时钟周期内读出并执行一条微指令,这就好比将Ad(CMDR)当作CMAR使用,从而省略CMAR。同理,也可将指令寄存器的操作码字段OP(IR)经微地址形成部件形成的后续微指令的地址,直接送到控制存储器的地址线上。这两路地址可通过一个多路选择器,根据需要任选一路。