什么是水平微代码?
在水平微代码中,每个微操作在每个微指令中都用一位表示。水平微代码通常包含在一个相当宽的控制存储器中,每个字为 56 位或更多并不罕见。在时序器时钟的每次脉冲下,读取一个微代码字,对其进行解码,并用于控制构成 CPU 的功能部件。微操作及其助记符如表所示。
非常简单的 CPU 的微操作及其助记符
助记符 | 微操作 |
---|---|
ARPC | AR←PC |
ARDR | AR←DR[5….0] |
PCIN | PC←PC+1 |
PCDR | PC←DR[5…0] |
DRM | DR←M |
IRDR | IR←DR[7…6] |
PLUS | AC←AC+DR |
AND | AC←AC ^ DR |
ACIN | AC←AC+1 |
由于有九个微操作,每个微代码字需要 9 位来表示它们,每个微操作 1 位。值为 1 表示微操作将发生,值为 0 表示它不会发生。为了完成微代码,可以简单地填写微操作的值。生成的微代码如表所示。
非常简单的微程序控制器初步水平微代码
状态 | 地址 | SEL | ARPC | ARDR | PCIN | PCDR | DRM | IRDR | PLUS | AND | ACIN | ADDR |
---|---|---|---|---|---|---|---|---|---|---|---|---|
FETCH1 | 0000 (0) | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0001 |
FETCH2 | 0001(1) | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0010 |
FETCH3 | 0010(2) | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | XXXX |
ADD1 | 1000(8) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1001 |
ADD2 | 1001(9) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0000 |
AND1 | 1010(10) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1011 |
AND2 | 1011(11) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0000 |
JMP1 | 1100(12) | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0000 |
INC1 | 1110(14) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0000 |
在生成控制信号之前,它会查看微代码以了解如何对其进行优化。ARDR 和 IRDR 具有相同的值。它不需要两个输出来表示相同的值,它可以使用一个输出推导出这两个微操作,AIDR,它组合了两个微操作 **AR←DR[5….0]** 和 **IR←DR[7…6]**。修改后的微代码如表所示。
非常简单的微程序控制器优化后的水平微代码
状态 | 地址 | SEL | ARPC | ARDR | PCIN | PCDR | DRM | IRDR | PLUS | AND | ACIN | ADDR |
---|---|---|---|---|---|---|---|---|---|---|---|---|
FETCH1 | 0000 (0) | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0001 |
FETCH2 | 0001(1) | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0010 |
FETCH3 | 0010(2) | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | XXXX |
ADD1 | 1000(8) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1001 |
ADD2 | 1001(9) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0000 |
AND1 | 1010(10) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1011 |
AND2 | 1011(11) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0000 |
JMP1 | 1100(12) | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0000 |
INC1 | 1110(14) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0000 |
广告