粗略讨论硬布线和微程序控制器引入

下图是单总线cpu的示意图:

我们从宏观到微观看,如何取出一条指令这个问题。

  • PC存放着待取指令的地址,将地址送进MAR,进行访存操作后,指令被送进MDR

    那怎么实现的上面这些操作呢?答案就是控制器在发出控制信号,如下

  • 以cpu单总线的方式来探讨

    将指令地址送进MAR ==> (PC)->MAR ==> PCout有效、MARin有效

    访存操作,指令被送进MDR ==> M(MAR)->MDR ==> MARout有效、MemR有效、MDRinE有效

    从上面可以看出,是通过一连串控制信号实现的取出一条指令

    同时这里可能有人会有疑惑,那其他数据通路方式呢?数据通路包括单总线cpu、多总线cpu、专用数据通路。那其实它们也都是一样的,通过一连串控制信号实现这些操作,只是信号序列不同。

    那这些控制信号由谁发出,怎么发出呢?答案就是由CU,Control Unit控制单元发出。至于怎么发出,就涉及到这次讨论的内容,硬布线和微程序两种模式了。

怎么发出控制信号


回看上面的图,我们认为控制器包括:PC、IR、CU。其中CU包括了时序系统、指令译码器ID、微操作信号发生器。

发出控制信号的宏观视角(模拟心跳过程):cpu执行是有节拍的,而这个节拍就是时序系统给出的。当送入节拍、操作码、标志后,cpu就会处理然后泵出一组控制信号。每送入一次信息就泵出一组控制信号,一条指令就这样通过不断泵出一组组控制信号而完成。

微程序设计方式

概念辨析:

  • 微命令:控制部件向执行部件发出的某个控制信号,如打开某个电位信号。

  • 微操作:微命令的执行过程,和微命令一一对应。和微命令的关系就像,妈妈让你去扫地(微命令),你拿扫帚在扫地(微操作)。

  • 微指令:cpu在一个节拍内做出的全部微操作构成一条微指令。不一定是一个节拍只做一个微操作,只要硬件不冲突,一个节拍可以同时做多个微操作。

  • 微程序:很多微指令构成一个微程序,每一个微程序对应一条指令(注意不是微指令)

    总结:我们要执行一条指令,就等于执行一个微程序,就等于执行了许多微指令,每个微指令包含了几个微操作。结合上面的宏观视角,每一条微指令就对应了一次心跳。

微操作信号发生器怎么知道指令a要对应执行哪些微操作,也就是要泵出什么控制信号呢?所以它要有一个存储器,存储指令a对应那些控制信号序列,b又对应了哪些。因此看如下的结构图:

上面说的存储器也就是控制存储器CM,它存放不同指令对应的微指令序列。而每个指令都是由取指、间指、执行、中断四个周期组成,对于所有指令而言,取指、间指、中断这三个周期的微指令序列是一样的,因此为了节省空间,CM只存放了这三组微指令序列各一份。因此不难理解,CM中总共就存放了,取指、间指、中断这三个周期的微指令序列,以及不同指令的执行周期微指令序列,这些都是cpu出厂的时候就写好的了。而且CM不能是易失性的,因此是ROM。

下面举一个例子演示整个过程:

  • 执行LDA
  • 操作码送入微地址形成部件,产生初始微地址(取指周期第一条微指令)和后续微地址
  • 经过顺序逻辑,送入CMAR(也叫微PC,微地址寄存器),存放接下来执行的微指令的地址
  • 将微指令地址经过地址译码转化为存储单元控制信号
  • CM取出微指令地址对应的微指令送到CMAD(也叫微IR)
  • CMAD送出控制信号,并将下地址送到顺序逻辑,结合标志(是否间指、中断等)确定下一条微指令的地址并送往CMAR
  • 循环执行直到指令结束

问题解释:

  1. CMAD怎么实现送出控制信号?分为水平型微指令和垂直型微指令。水平型的控制信号为0101101010….。每一位对应一个信号如MDRin。具体两种类型的区别之后讨论。
  2. 为什么初始微地址是取指周期第一条微指令地址?因为所有指令都从取指开始,因此第一条微指令是不需要指明的,一定是取指第一条。
  3. 顺序逻辑的作用?可以结合标志判断下一条微指令是否需要跳转。如需要寻址的话,下一条微指令就变为间指周期的第一条。否则就按照CMDR送来的下地址继续执行。

硬布线设计方式

硬布线也是同样的,我们要实现根据输入的节拍、操作码和标志泵出一组组控制信号。但是是通过电路直接实现的。

我们需要为每一位输出的控制信号设计专门的电路,以下是一个控制信号的例子:

可以通过这个电路实现,当输入的特定操作码、节拍、标志后,输出的是0或1。所以可以看到,如何设计这个电路才是实现硬布线的重点。

可以与微程序对比一下,微程序是以指令为目标进行设计,硬布线是以控制信号为目标进行设计。硬布线设计需要考虑所有指令在哪个节拍需要当前控制信号有效,从而进行电路设计,因此每一位控制信号的输出都涉及所有指令,不难理解,每增加一条指令会导致所有的控制信号的实现电路需要改动。

总结

本文只是简单讨论了硬布线和微程序这两种控制器设计思路,对于许多深入的问题还没有说明,像如何设计硬布线的电路,如何设计指令对于的微指令序列等等。