图3.10 Am2910芯片的内部组成

  Am2910是一片能提供12位微指令地址的器件,即它的输入输出的地址位数和器件内的部件位数均为12位,能直接寻址4096条微指令字的空间范围。

  AM2910包括一个四输入的多路地址选择器,用来从寄存器/计数器(R/C),直接输入(D),微程序计数器(mPC)或微堆栈(F)四个输入中,选择其一作为下一条微指令的地址。

  寄存器/计数器由12个D型触发器组成。当它用作寄存器时,主要用于保存一个微地址,用以实现微程序转移;当它用作计数器时,具有减一功能(何时减一,取决于AM2910的命令码),主要用于控制微程序的循环次数,若装入的初值为N,则可能执行N+1次循环。

  微程序计数器由12位的增量器和12位的寄存器mPC组成。当增量器的进位输入C1为高电平时,多路器的输出Y加1后装入mPC (即 mPC←Y+1),用于实现微程序的顺序执行; 而当C1为低电平时,多路器的输出Y直接装入mPC (即 mPC ←Y),用于实现同一条微指令的多次执行。

  微堆栈是由5字×12位的寄存器堆栈和微堆栈指针mSP组成,主要用于保存微子程序调用时的返回地址和微程序循环的首地址。微堆栈指针mSP总是指向最后一次压入的数据,因此,执行微程序循环时,允许不执行弹出操作而直接访问微堆栈的栈顶。当微堆栈中的数据达到5个时,就发出微堆栈已满信号 (/FULL=0),这时,任何压入操作都将覆盖掉栈顶的原有数据。

  AM2910输出3个使能信号: /PL、 /MAP和 /VECT,用以决定直接输入D的来源。

  当 /PL有效时 (即/PL=0),D来源于微指令的下地址字段,用于实现微程序转移;
  当 /MAP有效时 (即/MAP=0),D来源于MAPROM,用于实现从机器指令的操作码找到相应的微程序段首地址的转移;
  当 /VECT有效时,(即/VECT=0),原意来源于中断向量,现用于接收手拨微地址。

  命令译码器接收外部送来的命令码I3~I0,条件输入 /CC和条件允许 /CCEN信号,并对其译码,产生芯片内工作需要的控制信号,和外部要用的三个控制选择信号/PL、/MAP和 /VECT。