(截图来自MOOC平台华中科技大学计算机组成原理课程)
微指令的设计应当要遵循如下的原则。
根据以上原则,我们发现水平微指令的长度太长,控存容量大,如何去压缩微指令的长度?
途中给出了三条解决思路,我们一一分析。
1.编码表示
在微指令的操作控制字段,有很多字位是相斥的,即在给出一个控制信号的同时,其他的控制信号都无法给出。如上图中的前七个out输出控制信号,以及最后三个运算控制信号。
呢么我们可以考虑将这些互斥的命令用编码方式表示,7个out字位可以用一个3位编码表示,一共8种状态,剩下的1个状态表示不给出任何控制信号。3个运算字位同样可以用2位编码表示。
这样一条微指令即可以缩短5位。
2.去掉下址字段
将下址字段去掉,改用一个自加器,每当前一条指令执行完,地址就+1,顺序执行下一条指令。
3.垂直型微指令
由水平型微指令的编码表可可以看到,表中置1的位是很少的,这说明水平型微指令的编码效率是很低的。
根据单总线CPU架构的数据通路,我们可以将其分为以下三类:
寄存器传输,即操作数由源寄存器到目标寄存器,而寄存器的个数为8,可用3位编码表示,将这类指令命名为MOV;
运算类型,如INC类型是没有操作数的,而ADD只需要给出源寄存器的编号即可;
访存类型,给出是读还是写命令即可,用Mem表示。
除上所述,因为没有了判别字,我们需要Branch指令来表示顺序控制。
LOAD指令的垂直型微指令格式如下:
原本T1节拍中的一条水平微指令,需要用两条垂直微指令来实现。
MOV AR,PC 将(PC)送入AR;
MOV X,PC 将(PC)送入X。
T2节拍,通过LOAD微指令去读内存。
T3节拍,将(Z)送入PC。
T4节拍,将(DR)送入IR,同时执行跳转指令Branch P1,即P1置1。
…………
如此我们发现,垂直型微指令在使用时所需的数量大于水平型微指令,但相较于各种情况而言,整体所需要的控存还是比较小的。
垂直型微指令的问题在于原本可以同时给出的控制信号无法并行给出,并且还需要增加额外的逻辑。虽然其节省了容量,但在硬件大幅度降价的今天,垂直型微指令已经被淘汰。
(创作不易,请点赞收藏~)