十二、微指令的格式:水平行微指令和垂直型微指令
微指令的两种主要格式:水平型微指令 和 垂直型微指令。
微指令是微程序控制器的基本控制单位,它直接控制CPU内部的数据通路(如ALU操作、寄存器选择、总线开关等)。微指令的格式设计直接影响着控制器的灵活性、执行速度和硬件复杂度。
1. 水平型微指令
水平型微指令的设计理念是提供高度的并行性和直接的控制能力。
核心特征:
- 长指令字:一条水平微指令通常包含大量的位(bit)。
- 每一位或每一字段直接控制一个硬件部件:微指令中的每一个二进制位都直接对应一个具体的微操作(如“打开ALU输入A的门”、“将PC值加1”)。或者,指令被划分为多个字段,每个字段独立控制一个功能单元(如ALU、移位器、总线等)。
- 高并行性:由于控制信号是独立的,一条水平微指令可以在同一个CPU周期内同时启动多个并行的微操作(例如,同时进行寄存器读取、ALU运算和结果写回)。
- 硬件密集型:微程序控制器(微码存储器)需要很宽的存储字长,并且与控制信号之间的连接逻辑相对简单直接(通常只需简单的解码或甚至无需解码)。
格式示例:
假设一个简单的CPU,其水平微指令可能长这样(每一位代表一个控制信号):
| 位位置 | 31 | 30 | 29 | 28 | 27 | 26 | 25 | ... | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 含义 | RegA_Out |
RegB_Out |
ALU_Add |
ALU_Sub |
Shifter_En |
Mem_Read |
Mem_Write |
... | RegC_In |
CarryIn_En |
Next_Addr |
- 执行过程:要执行
RegA + RegB -> RegC这个操作,一条微指令可能会将RegA_Out、RegB_Out、ALU_Add和RegC_In这几个位同时置为1,其他位置0。这样,在同一个时钟周期内,数据就从RegA和RegB流出,经ALU相加,结果被写入RegC。
优点:
- 执行速度快:极高的并行性使得完成一个机器指令所需的微指令条数很少。
- 控制灵活:可以对数据通路进行非常精细和直接的控制。
缺点:
- 微指令字很长:浪费了微码存储空间,因为很多位在大多数情况下是
0(未激活)。 - 编程复杂:微程序员(或编译器)需要深入了解硬件细节,手动优化并行操作,编写微程序难度大。
2. 垂直型微指令
垂直型微指令的设计理念是模仿传统机器指令,通过编码和解码来减少微指令的字长。
核心特征:
- 短指令字:一条垂直微指令的位宽较窄,类似于普通的机器指令。
- 高度编码的字段:微指令由几个字段组成(如操作码字段、源寄存器字段、目的寄存器字段),每个字段需要经过解码器翻译后才能产生最终的控制信号。
- 低并行性:一条垂直微指令通常只指定一个或少数几个微操作。要完成一个复杂的操作,需要多条垂直微指令顺序执行。
- 软件友好型:编写垂直微程序更像是在用一套专用的汇编语言编程,无需过多关心底层硬件信号。
格式示例:
一个垂直微指令可能看起来像这样:
| 字段 | 操作码 (Opcode) | 源寄存器1 (Src1) | 源寄存器2 (Src2) | 目的寄存器 (Dest) |
|---|---|---|---|---|
| 位宽 | 4位 | 3位 | 3位 | 3位 |
-
操作码 (Opcode):定义要执行的操作类型,如
0001表示加法,0010表示减法,0100表示从内存加载等。 -
寄存器字段:指定操作涉及的寄存器编号。
-
执行过程:同样要执行
RegA + RegB -> RegC。- 微指令的内容可能是:
Opcode=ADD (0001),Src1=RegA (001),Src2=RegB (010),Dest=RegC (011)。 - 这条微指令被送入解码电路。
- 解码器根据操作码
0001产生ALU_Add=1的信号;根据Src1=001产生RegA_Out=1的信号;以此类推。 - 最终,和水平微指令一样,所有必需的控制信号被激活。但关键在于,这条垂直微指令本身并不直接包含这些控制信号,而是通过解码间接生成的。
- 微指令的内容可能是:
优点:
- 微指令字长短:极大地节省了微码存储空间(控制存储器)。
- 编程简单:微程序更紧凑,易于编写和维护,抽象层次更高。
缺点:
- 执行速度慢:并行性低,完成一个机器指令需要更多的微指令条数,从而需要更多的时钟周期。
- 灵活性差:控制信号经过了解码器,不如水平微指令直接,灵活性较低。
对比总结
| 特性 | 水平型微指令 | 垂直型微指令 |
|---|---|---|
| 字长 | 长(可能上百位) | 短(通常16-64位) |
| 并行性 | 高(一条指令多个操作) | 低(一条指令一个操作) |
| 硬件复杂度 | 控制存储器宽,解码逻辑简单 | 控制存储器窄,但需要复杂的解码器 |
| 编程难度 | 高(需懂硬件细节) | 低(类似汇编) |
| 执行速度 | 快(指令条数少) | 慢(指令条数多) |
| 代码密度 | 低(存储空间利用率低) | 高(存储空间利用率高) |
| 控制方式 | 直接控制 | 间接编码控制 |
现代应用与发展
在现代处理器中,纯粹的水平或垂直微指令已不多见。通常采用折衷方案:
- 纳米码 (Nanocode):采用两级微程序设计。
- 第一级(垂直型):使用较短的垂直微指令(称为微码),负责复杂的流程控制(如分支、异常处理)。这节省了主控存储器的空间。
- 第二级(水平型):第一级的微码输出指向一个纳米存储器的地址。纳米存储器中存放的是真正的高度并行化的水平型纳米指令,它们直接驱动硬件。这结合了两者的优点。
此外,动态微代码更新也成为现代CPU的一个特征,允许制造商通过微代码补丁来修复CPU设计中的错误(幽灵、熔断等漏洞的部分修复就依赖于此)。
总而言之,水平型微指令追求性能极致,而垂直型微指令追求设计紧凑。在实际中,根据不同的设计目标和应用场景,往往会采用混合或分层的策略。
Do not communicate by sharing memory; instead, share memory by communicating.

浙公网安备 33010602011771号