1. 微程序设计逻辑和基本思想
硬布线设计的本质是想一个办法来产生这个控制信号。
那么是不是可以选择不用电路来产生它,而是直接将这些信号存下来。这就是微程序的设计逻辑。
就是将所需要的这些信号存在一个专门的存储器中(控制存储器,直接做在 CPU 里面的),
既然涉及到把一些东西存到存储器中,这个就类似于之前存储程序的思想,只不过之前是把一个程序分解一些指令,现在是把一条机器指令编写成一个程序,这个程序叫做微程序。
这样把一个一个的微指令存储到存储器中,就可以使用之前执行指令的思路来执行每一个微程序,那么每一条指令的作用就相当于定位到这个微程序。
将可相容的两个微操作同一编写成一条微指令,互斥的微操作可单独编写成一条微指令。
编写的方法可以是:一串二进制数据,每一个二进制位对应一个微操作。(将对应为1的微操作命令执行)
互斥的不能写在一起,所以只有一个1。(结合图中 00010000 思考)
这样的一系列微指令排列起来就是一个微程序,通过执行这个微程序就能完成这条微程序。要实现这个效果需要将这个微程序写好并存放到一个地方,多采用只读存储器(ROM,看上了非易失性)。也就意味着在这个只读存储器中,每一条机器指令都能找到对应它的微程序。这就是微程序设计的一个基本思想:把微操作组织成微指令,一系列微指令组织成一个微程序。一条机器指令对应一个微程序。
微指令基本格式:分为了操作控制字段和顺序控制字段。因为一条微指令除了要完成自己的任务之外,还要能指出下一条微指令所在的位置。这样才能让整个系统不断地取微指令,执行这些微指令,最终完成这个微程序。(类似之前机器指令的设计),所以操作控制字段又叫做微操作码,顺序控制字段又叫做微地址码。
而在设计的过程中,每条机器指令实际上它对应的取指周期所要做的操作一样的。所以常用的一个设定就是:将取指令操作的微命令统一编程一个微程序,而每条机器指令所对应的具体操作再单独编写一个对应的微程序。
这样就不用每条指令都要重复一遍取指周期的操作了,所以每条机器指令实际上对应的是它后面3个阶段具体的那些操作。
下面介绍要具有上面结构的控制单元要具备怎样的结构。
2. 微程序控制器的基本结构
过程描述:
一条指令取到指令寄存器中之后,操作码会传到控制单元的微地址形成部件,微地址形成部件产生的初始地址需要通过顺序逻辑来判断是否按照这个地址去取这条指令微程序(主要涉及到转移指令的情况)。如果是按照这个地址取微程序,就将该地址传到微地址寄存器,微地址寄存器中存放的是一个二进制编码形式的地址,需要通过地址译码转化成相应的存储单元控制信号。这样才能定位到控制存储器中的某个存储单元。定位到该单元之后,将里面的内容放到 CMDR(相当于取出了这条微指令,)该微指令分为操作控制字段和顺序控制字段(简单理解为可以指出下一条微指令的地址),然后这个下一条微指令的地址通过顺序逻辑判断是按照这里的下一条微指令地址来继续执行还是按照微地址形成部件新形成的终止地址来执行。
最后,执行这条指令的结果是给外部提供一些控制信号。
控制存储器里面存的是什么东西?如下图:
间址周期和中短周期做成一个微程序是不常见的。
取指周期微程序作用:实现一条指令取指周期所需要完成的那一系列微操作。如何让这个微程序按照顺序执行? ==> 在顺序控制字段存放下一条微指令所在地址即可。 特别的, M+2 微指令结束后(即整个取指周期结束)具体怎么转,要看整体的这个顺序逻辑怎么控制。
对应到某一条具体的指令,和取指周期类似(第一条微指令指向第二条,第二条指向第三条)。最后这条微指令执行结束后,有一个特点就是每一个具体的指令它的执行结束后会自动定位到取指周期这个微程序。这样整个控制单元就会自动的在执行完一条指令之后转入新的一个取指周期。这也是能够不断取入新的指令的原理
如果间址和中断也做成微程序(情况不常见),那么就至少是 n+3 个。
3. 微指令的格式和编码
重点(经常考察):
对于水平型的微指令,它的操作控制字段如何来进行编码?