请解释一下简单微序列器的设计和实现?
微程序序列器是微程序控制单元的通用构建块。微程序序列器的主要目标是显示控制存储器的地址,以便读取和执行微指令。序列器的下一个地址逻辑决定了要加载到控制地址寄存器中的特定地址源。下图显示了简单微序列器的布局。

只有两个可能的下一个地址可用,除了操作码映射和绝对跳转。取指周期的最后一个状态 FETCH3 会进入四个执行例程之一。这必须通过映射输入来实现。其余状态必须各自进入一个特定的下一个状态,我们使用绝对跳转来实现。虽然我们可以通过在当前地址上加1来实现其中一些分支,但它无法以这种方式执行从每个执行例程末尾到FETCH1的分支。
选择位由微序列器生成,用于选择正确的下一个地址。对于此CPU,选择是无条件的。在每个状态下,该CPU都绝对确定其下一个地址的来源,但并非所有微序列器都是如此。
它总共包含九个状态,每个状态由一条微指令表示。在这些状态之间进行选择所需的最小位数为4,这是绝对地址的大小。映射硬件也会生成相同大小的地址,其输出也是4位宽。其大小与输入到寄存器的多路复用器输出以及输入到微码存储器地址输入的寄存器输出相同。
主要考虑的是每个执行例程的第一个状态的地址分配,因为这决定了实现映射函数的逻辑。对于此CPU,微序列器将使用与硬连线控制单元相同的映射函数,即 1 IR [1…0]0。
这将为 ADD1、AND1、JMP1 和 INC1 分别生成 1000、1010、1100 和 1110(8、10、12 和 14)的地址。实现映射的硬件只需几根线,这是最简单的映射逻辑。如图所示。

其余状态的地址可以任意分配。它可以将连续的状态分配给微码存储器中连续的位置。最终的分配结果如表所示。
非常简单的微序列器的状态地址
| 状态 | 地址 |
|---|---|
| FETCH1 | 0000 (0) |
| FETCH2 | 0001 (1) |
| FETCH3 | 0010 (2) |
| ADD1 | 1000 (8) |
| ADD2 | 1001 (9) |
| AND1 | 1010 (10) |
| AND2 | 1011 (11) |
| JMP1 | 1100 (12) |
| INC1 | 1110 (14) |

