什么是水平微代码?


在水平微代码中,每个微操作在每个微指令中都用一位表示。水平微代码通常包含在一个相当宽的控制存储器中,每个字为 56 位或更多并不罕见。在时序器时钟的每次脉冲下,读取一个微代码字,对其进行解码,并用于控制构成 CPU 的功能部件。微操作及其助记符如表所示。

非常简单的 CPU 的微操作及其助记符

助记符微操作
ARPCAR←PC
ARDRAR←DR[5….0]
PCINPC←PC+1
PCDRPC←DR[5…0]
DRMDR←M
IRDRIR←DR[7…6]
PLUSAC←AC+DR
ANDAC←AC ^ DR
ACINAC←AC+1

由于有九个微操作,每个微代码字需要 9 位来表示它们,每个微操作 1 位。值为 1 表示微操作将发生,值为 0 表示它不会发生。为了完成微代码,可以简单地填写微操作的值。生成的微代码如表所示。

非常简单的微程序控制器初步水平微代码

状态地址SELARPCARDRPCINPCDRDRMIRDRPLUSANDACINADDR
FETCH10000 (0)01000000000001
FETCH20001(1)00010100000010
FETCH30010(2)1010001000XXXX
ADD11000(8)00000100001001
ADD21001(9)00000001000000
AND11010(10)00000100001011
AND21011(11)00000000100000
JMP11100(12)00001000000000
INC11110(14)00000000010000

在生成控制信号之前,它会查看微代码以了解如何对其进行优化。ARDR 和 IRDR 具有相同的值。它不需要两个输出来表示相同的值,它可以使用一个输出推导出这两个微操作,AIDR,它组合了两个微操作 **AR←DR[5….0]** 和 **IR←DR[7…6]**。修改后的微代码如表所示。

非常简单的微程序控制器优化后的水平微代码

状态地址SELARPCARDRPCINPCDRDRMIRDRPLUSANDACINADDR
FETCH10000 (0)01000000000001
FETCH20001(1)00010100000010
FETCH30010(2)1010001000XXXX
ADD11000(8)00000100001001
ADD21001(9)00000001000000
AND11010(10)00000100001011
AND21011(11)00000000100000
JMP11100(12)00001000000000
INC11110(14)00000000010000

更新于: 2021-07-27

544 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告