计算机组成原理

您所在的位置:网站首页 操作码和地址码是二进制吗 计算机组成原理

计算机组成原理

2024-03-25 00:03| 来源: 网络整理| 查看: 265

 

第二节 微程序设计

一、微程序设计思想的产生

  微程序设计思想是英国剑桥大学教授M.V.Wilkes在1951年首先提出的。为了克服组合逻辑控制单元线路庞杂的缺点,他大胆设想来用与存储程序相类似的办法,来解决微操作命令序列的形成。Wilkes提出,将一条机器指令编写成一个微程序,每一个微程序包含若干条微指令,每一条微指令对应一个或几个微操作命令。然后把这些微程序存到一个控制存储器中,用寻找用户程序机器指令的办法来寻找每个微程序中的微指令。由于这些微指令是以二进制代码形式表示的,每位代表一个控制信号(若该位为1,表示该控制信号有效;若该位为0, 表示此控制信号无效),因此,逐条执行每一条微指令, 也就相应地完成了一条机器指令的全部操作。可见,微程序控制单元的核心部件是一个控制存储器,简称控存。由于执行一条机器指令必须多次访问控制存储器,以取出多条微指令来控制执行各个微操作,因此要求控存的速度较高。可惜在Wilkes那个年代电子器件生产水平有限,因此微程序设计思想并未实现。直到20世纪60年代出现了半导体存储器,才使这个设计思想成为现实。1964年4月, 世界上第一台微程序设计的机器IBM 360研制成功。   微程序设计省去了组合逻辑设计过程中对逻辑表达式的化简步骤,无需考虑逻辑门级数和门的扇入系数,使设计更简便。而且由于控制信号是以二进制代码的形式出现的,因此只要修改微指令的代码,就可改变操作内容,便于调试、修改,甚至增删机器指令,有利于计算机仿真。

二、微程序控制单元框图及工作原理

  1.机器指令对应的微程序   微程序设计控制单元的过程就是编写每一条机器指令的微程序,它是按执行每条机器指令所需的微操作命令的先后顺序而编写的,因此,一条机器指令对应一个微程序,如下图所示。图中每一条机器指令都与一个以操作性质命名的微程序对应。

  由于任何一条机器指令的取指令操作是相同的,因此将取指令操作的命令统一编成一个微程序,这个微程序只负责将指令从主存单元中取出送至指令寄存器中,如上图所示的取指周期微程序。此外,如果指令是间接寻址,其操作也是可以预测的,也可先编出对应间址周期的微程序。当出现中断时,中断隐指令所需完成的操作可由一个对应中断周期的微程序控制完成。这样,控制存储器中的微程序个数应为机器指令数再加上对应取指、间址和中断周期的三个微程序。

  2.微程序控制单元的基本框图   下图示意了微程序控制单元的基本组成。

  图中虚线框内为微程序控制单元,它的输入有指令寄存器、各种标志和时钟,输出是输至CPU内部或系统总线的控制信号。   虚框内的控制存储器(简称控存)是微程序控制单元的核心部件,用来存放全部微程序;CMAR是控存地址寄存器,用来存放欲读出的微指令地址;CMDR是控存数据寄存器,用来存放从控存读出的微指令;顺序逻辑是用来控制微指令序列的,具体就是控制形成下一条微指令(即后继微指令)的地址, 其输入与微地址形成部件(与指令寄存器相连)、微指令的下地址字段以及外来的标志有关。   微指令的基本格式如下图所示,共分两个字段,一个为操作控制字段,该字段发出各种控制信号;另一个为顺序控制字段,它可指出下条微指令的地址(简称下地址),以控制微指令序列的执行顺序。

  3.工作原理   假设有一个用户程序如下所示,它存于以2000H为首地址的主存空间内。   LDA X   ADD Y   STA Z   STP   下面分析一下在运行上述程序时,微程序控制单元的工作原理。   首先将用户程序的首地址送至PC,然后进入取指阶段。   (1)取指阶段。   ①将取指周期微程序首地址M→CMAR ;   ②取微指令,将对应控存M地址单元中的第一条微指令读到控存数据寄存器中,记作CM(CMAR) →CMDR;   ③产生微操作命令;   第一条微指令的操作控制字段中为“1”的各位发出控制信号,如PC→MAR,1→R,命令主存接受程序首地址并进行读操作。   ④形成下一条微指令的地址;   此微指令的顺序控制字段指出了下一条微指令的地址为M+1,将M+1送至CMAR。   ⑤取下一条微指令;   将对应控存M+1地址单元中的第二条微指令读到CMDR中,即 CM(CMAR) →CMDR   ⑥产生微操作指令;   由第二条微指令的操作控制字段中对应“1”的各位发出控制信号,如M(MAR) →MDR使对应主存2000H地址单元中的第一条机器指令从主存中读出送至MDR中。   ⑦形成下一条微指令的地址:   将第二条微指令下地址字段指出的地址M+2送至CMAR,即 Ad(CMDR) →CMAR   以此类推,直到取出取指周期最后一条微指令,并发出微命令为止,此时第一条机器指令LDA X已存至指令寄存器IR中。   (2)执行阶段。   ①取数指令微程序首地址的形成;   当取数指令存入IR后,其操作码OP(IR)直接送到微地址形成部件,该部件的输出即为取数指令微程序的首地址P,且将P送至CMAR,记作OP(IR) →CMAR   ②取微指令;   将对应控存P地址单元中的微指令读到CMDR中,即 CM(CMAR) →CMDR   ③产生微操作命令;   由微指令操作控制字段中对应“1”的各位发出控制信号,如Ad(IR) →MAR,1→R,命令主存读操作数。   ④形成下一条微指令的地址;   将此条微指令下地址字段指出的P+1送至CMAR,即 Ad(CMDR) →CMAR   ⑤取微指令,即CM(CMAR) →CMDR;   ⑥产生微操作命令;   ┋   以此类推, 直到取出取数指令微程序的最后一条微指令P+2,并发出微命令,至此即完成了将主存X地址单元中的操作数取至累加器AC的操作。P+2这条微指令的顺序控制字段为M, 即表明CPU又开始进入下一条机器指令的取指周期,控存又要依次读出取指周期微程序的逐条微指令,发出微命令, 完成将第二条机器指令ADD Y从主存取至指令寄存器IR中……微程序控制单元就是这样,通过逐条取出微指令,发出各种微命令,从而实现从主存逐条取出、分析并执行机器指令,以达到运行程序的目的。   由此可见,对微程序控制单元的控存而言,内部信息一旦按所设计的微程序被灌注后,在机器运行过程中,只须具有读出的性能即可,故可采用ROM。此外,在微程序的执行过程中, 关键问题是如何由微指令的操作控制字段形成微操作命令,以及如何形成下一条微指令的地址。这是微程序设计必须解决解决的问题,它们与微指令的编码方式和微地址的形成方式有关。

三、微指令的编码方式

  微指令的编码方式又叫微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。

  1.直接编码(直接控制)方式   在微指令的的操作控制字段中,每一位代表一个微命令,这种编码方式即为直接编码方式。 上面所述的用字段中的某位为“1”表示控制信号有效(如打开某个控制门), 以及某位为“0”表示某个控制信号无效(如不打开某个控制门)就是直接控制方式,如下图所示。这种方式含义清晰,但由于机器中微命令甚多,可能使微指令操作控制字段达几百位,造成控存容量极大。

  2.字段直接编码方式   这种方式就是将微指令的操作控制字段分成若干段,将一组互斥的微命令放在一个字段内,通过对这个字段译码,便可对应每一个微命令,如下图所示。这种方式因靠字段直接译码发出微命令,故又有显式编码之称。

  采用字段直接编码方法可用较少的二进制信息表示较多的微命令信号,例如3位二进制代码译码后可表示7个互斥的微命令,留出一种状态表示不发微命令,与直接编码用7位表示7个微命令相比, 减少了4位,缩短了微指令的长度。但由于增加了译码电路,使微程序的执行速度稍微减慢。   至于操作控制字段应分几段,与需要并行发出的微命令个数有关,若需并行发出8个微命令,就可分8段。每段的长度可以不等,与具体要求互斥的微命令个数有关,如某类操作要求互斥的微命令仅有6个,则字段只需要安排3位即可。

  3.字段间接编码方式   这种方式一个字段的某些微命令还需由另一个字段中的某些微命令来解释,如下图所示。图中字段1译码的某些输出受字段2译码输出的控制,由于不是靠字段直接译码发出微命令,故称为字段间接编码,又称隐式编码。

  这种方法虽然可以进一步缩短微指令字长,但因削弱了微指令的并行控制能力,因此通常用作字段直接编码法的一种辅助手段。

  4.混合编码   这种方法是把直接编码和字段编码(直接或间接)混合使用,以便能综合考虑微指令的字长、灵活性和执行微程序的速度等方面的要求。

  5.其他   微指令中还可设置常数字段,用来提供常数、计数器初值等。常数字段还可以和某些解释位配合,如解释位为0, 表示该字段提供常数;解释位为1,表示该字段提供某种命令,使微指令更灵活。

四、微指令序列地址的形成

  后继微指令的地址大致有两种方式形成:

  1.直接由微指令的下地址字段指出   在微指令的下地址字段直接指出后继微指令的地址。

  2.根据机器指令的操作码形成   当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。微地址形成部件实际是一个编码器,其输入为指令操作码,输出就是对应该机器指令微程序的首地址。它可采用PROM实现,以指令的操作码作为PROM的地址,而相应的存储单元内容就是对应该指令微程序的首地址。   实际上微指令序列地址的形成方式还有:

  3.增量计数器法   仔细分析发现,在很多情况下,后继微指令的地址是连续的,因此对于顺序地址,微指令可采用增量计数方法,即(CMAR)+1→CMAR来形成后继微指令的地址。

  4.分支转移   当遇到条件转移指令时,微指令出现了分支,必须根据各种标志来决定下一条微指令的地址。微指令的格式为:

操作控制字段 转移方式 转移地址

  其中转移方式是指明判别条件,转移地址是指明转移成功后的去向,若不成功则顺序执行。也有的转移微指令中设两个转移地址,条件满足时选择其中一个转移地址;条件不满足时选择另一个转移地址。

  5.通过测试网络形成   微指令的地址还可通过测试网络形成,如下图所示。图中微指令的地址分两部分,高段h为非测试地址,由微指令的H段地址码直接形成:低段l为测试地址,由微指令的L段地址码通过测试网络形成。

  6.微程序入口地址   当电源加电后,第一条微指令的地址可由专门的硬件电路产生,也可由外部直接向CMAR输入微指令的地址,这个地址即为取指周期微程序的入口地址。   当有中断请求时,若条件满足, CPU响应中断进入中断周期,此时需中断现行程序,转至对应中断周期的微程序。由于设计控制单元时已安排好中断周期微程序的入口地址,故响应中断时,可由硬件产生中断周期微程序的入口地址。   同理当出现间接寻址时,也可由硬件产生间址周期微程序的入口地址。   综合上述各种方法,可得出形成后继微指令地址的原理图如下图所示。

  图中多路选择器可选择四路地址:   ・(CMAR)+1→CMAR;   ・微指令的下地址字段;   ・指令寄存(通过微地址形成部件);   ・微程序入口地址。

五、微指令格式

  微指令格式与微指令的编码方式有关,通常分为水平型微指令和垂直型微指令两种。

  1.水平型微指令   水平型微指令的特点是一次能定义并执行多个并行操作的微命令。从编码方式看,直接编码、字段直接编码、字段间接编码以及直接和字段混合编码都属水平型微指令。其中直接编码速度最快,字段编码要经过译码,故速度受影响。

  2.垂直型微指令   垂直型微指令的特点是采用类似机器指令操作码的方式,在微指令字中,设置微操作码字段,由微操作码规定微指令的功能。通常一条微指令有1~2个微命令,控制1~2种操作。这种微指令不强调其并行控制功能。

  上表列出了一种垂直型微指令的格式,其中微操作码3位,共分六类操作:地址码字段共10位,对不同的操作有不同的含义;其他字段3位,可协助本条微指令完成其他控制功能。

  3.两种微指令格式的比较   (1)水平型微指令比垂直型微指令并行操作能力强,效率高,灵活性强。   (2)水平型微指令执行一条机器指令所需的微指令数目少,因此速度比垂直型微指令快。   (3)水平型微指令用较短的微程序结构换取较长的微指令结构,垂直型微指令正相反,它以较长的微程序结构换取较短的微指令结构。   (4)水平型微指令与机器指令差别较大,垂直型微指令与机器指令相似。

六、静态微程序设计和动态微程序设计

  通常指令系统是固定的,对应每一条机器指令的微程序是计算机设计者事先编好的,因此一般微程序无需改变,这种微程序设计技术即称为静态微程序设计,其控存采用ROM。 前面讲述的内容基本上属于这一类。   如果采用EPROM作为控制存储器, 人们可以通过改变微指令和微程序来改变机器的指令系统,这种微程序设计技术称为动态微程序设计。动态微程序设计由于可以根据需要改变微指令和微程序,因此可以在一台机器上实现不同类型的指令系统,有利于仿真。但是这种设计对用户的要求很高,目前难以推广。

七、毫微程序设计

  微程序可看作是解释机器指令的,毫微程序可看作是解释微程序的,而组成毫微程序的毫微指令则是用来解释微指令的。采用毫微程序设计计算机的优点是用少量的控存空间来达到高度的并行。   毫微程序设计采用两级微程序的设计方法。第一级微程序为垂直型微指令,并行功能不强,但有严格的顺序结构,由它确定后继微指令的地址,当需要时可调用第二级。第二级微程序为水平型微指令,具有很强的并行操作能力,但不包含后继微指令的地址。第二级微程序执行完毕后又返回到第一级微程序。两级微程序分别放在两级控制存储器内。下图示意了毫微程序控制存储器的基本组成。

  图中CMARl为第一级控存地址寄存器,CMDR1存放从第一级控存中读出的微指令,如果该微指令只产生一些简单的控制信号,则可以通过译码,直接形成微操作命令,不必调用第二级。如果需调用第二级控存时,则将毫微程序的地址送至CMAR2, 然后由从第二级控存中读出的微指令去直接控制硬件。值得注意的是垂直型微指令不是和水平型微指令一条一条地对应,而是由水平型微指令(称作毫微指令)组成的毫微程序去执行垂直型微指令的操作。毫微指令与微指令的关系就好比微指令与机器指令的关系一样。   二级控存虽然能减少控存的容量,但因有时一条微指令要访问两次控存,影响了速度。

八、串行微程序控制和并行微程序控制

  与机器指令一样,完成一条微指令也分两个阶段:取微指令和执行微指令。如果这两个阶段按下图(a)所示的方式运行, 则为串行微程序控制。由于取微指令和执行微指令的操作是在两个完全不同的部件中完成的,因此可将这两部分操作并行进行,以缩短微指令周期,这就是并行微程序控制,如下图(b)所示,与指令二级流水相似。

  当采用并行微程序控制时,为了不影响本条微指令的正确执行,需增加一个微指令寄存器来暂存下一条微指令。由于执行本条微指令与取下一条微指令是同时进行的,因此当通到需要根据本条微指令的处理结果来决定下条微指令的地址时,就不能并行操作,此时可延迟一个微指令周期再取微指令。

九、微程序设计举例

  微程序设计控制单元的主要任务是编写对应各条机器指令的微程序,具体步骤是首先写出对应机器指令的全部微操节拍安排,然后确定微指令格式, 最后编写出每条微指令的二进制代码(称作微指令码点)。

  1.写出对应机器指令的微操作及节拍安排

  为了便于与组合逻辑设计比较,仍以10条机器指令为例,而且CPU结构同组合逻辑设计假设相同。此外,为了简化起见,不考虑间接寻址和中断的情况。下面分别按取指阶段和执行阶段列出其微操作序列。   (1)取指阶段的微操作及节拍安排。取指阶段的微操作基本与组合逻辑控制相同,不同的是指令取至IR后,微程序控制需由操作码形成执行阶段微程序的入口地址。即

  T0 PC→MAR,1→R

  T1 M(MAR) →MDR,(PC)+1→PC

  T2 MDR→IR,OP(IR) →微地址形成部件(编码器)

  如果把一个T内的微操作安排在一条微指令中完成, 上述微操作对应3条微指令。   值得注意的是,由于微程序控制的所有控制信号都来自微指令,而微指令又存于控存中,因此欲完成上述这些微操作,必须先将微指令从控存中读出,也即必须先给出这些微指令的地址。在取指微程序中,除第一条微指令外,其余微指令的地址均由上一条微指令的下地址字段直接给出,因此上述每一条微指令都需增加一个将微指令下地址字段送至CMAR的微操作, 记作Ad(CMDR) →CMAR,而这一操作只能由下一个时钟周期T的上升沿将地址打入到CMAR内。 至于取指微程序的最后一条微指令,其后继微指令的地址是由微地址形成部件形成的,而且也只能由下一个T的上升沿将该地址打入到CMAR中, 即微地址形成部件→CMAR,为了反映该地址与操作码有关;故记作OP(IR)→CMAR。   综上所述,考虑到需要形成后继微指令的地址,上述分析的取指操作共需六条微指令完成。即:

  T0 PC→MAR,1→R

  T1 Ad(CMDR) →CMAR

  T2 M(MAR)→MDR,(PC)+1→PC

  T3 Ad(CMDR) →CMAR

  T4 MDR→IR,OP(IR)→微地址形成部件(编码器)

  T5 OP(IR) →CMAR

  所有微指令均由T的上升沿打入到CMDR中。   (2)执行阶段的微操作及节拍安排。执行阶段的微操作由操作码性质而定,同时也需考虑后继微指令地址的形成问题。   ・非访存指令

  ①CLA指令

  与组合逻辑控制一样, 该指令在执行阶段只有一个微操作0→AC,只需一个时钟周期T, 故对应一条微指令。该微指令的下地址字段应直接给出取指微程序的入口地址, 而且由下一个T的上升沿将地址打入到CMAR内。这样,对应CLA指令执行阶段的微指令有两条:

  T0 0→AC

  T1 Ad(CMDR) →CMAR,取指微程序入口地址→CMAR

  同理可得其余4条非访存指令对应的微操作。

  ②COM指令

  T0

  T1 Ad(CMDR) →CMAR,取指微程序入口地址→CMAR

  ③SHR指令

  T0 L(AC)→R(AC), AC0→AC0

  T1 Ad(CMDR) →CMAR,取指微程序入口地址→CMAR

  ④CSL指令

  T0 R(AC)→L(AC), AC0→AC0 (即ρ-1(AC))

  T1 Ad(CMDR) →CMAR,取指微程序入口地址→CMAR

  ⑤STP指令

  T0 0→G

  T1 Ad(CMDR) →CMAR,取指微程序入口地址→CMAR

  这里由于安排了Ad(CMDR) →CMAR,使再次启动机器时,可直接用已存入CMAR中的取指微程序的入口地址。

  ・访存指令

  ①ADD指令

  T0 Ad(IR)→MAR,1→R

  T1 Ad(CMDR) →CMAR

  T2 M(MAR)→MDR

  T3 Ad(CMDR) →CMAR

  T4 (AC)+(MDR) →AC

  T5 Ad(CMDR) →CMAR,取指微程序入口地址→CMAR

  ②STA指令

  T0 Ad(IR)→MAR,1→W

  T1 Ad(CMDR) →CMAR

  T2 AC→MDR

  T3 Ad(CMDR) →CMAR

  T4 MDR →M(MAR)

  T5 Ad(CMDR) →CMAR,取指微程序入口地址→CMAR

  ③LDA指令

  T0 Ad(IR)→MAR,1→R

  T1 Ad(CMDR) →CMAR

  T2 M(MAR)→MDR

  T3 Ad(CMDR) →CMAR

  T4 MDR →AC

  T5 Ad(CMDR) →CMAR,取指微程序入口地址→CMAR

  ・转移类指令

  ①JMP指令

  T0 Ad(IR)→PC

  T1 Ad(CMDR) →CMAR,取指微程序入口地址→CMAR

  ②BAN指令

  T0

  T1 Ad(CMDR) →CMAR,取指微程序入口地址→CMAR

  上述全部微操作共20个,微指令共38条。

  2.确定微指令格式

  微指令的格式包括微指令的编码方式、后继微指令的地址形成方式和微指令字长等三个方面。   (1)微指令的编码方式。上述微操作数不多,可采用直接编码方式,由微指令控制字段的某一位直接控制一个微操作。   (2)后继微指令的地址形成方式。根据上述分析,可采用由指令的操作码和微指令的下地址字段两种方式形成后继微指令的地址。   (3)微指令字长。微指令由操作控制字段和下地址字段两部分组成。根据直接编码方式,20个微操作对应20位操作控制字段;根据38条微指令, 对应6位下地址字段。这样,微指令字长至少26位。   仔细分析发现,在38条微指令中有19条微指令是为了控制将后继微指令的地址打入到CMAR的操作(其中18条微指令地址字段Ad(CMDR) →CMAR和1条指令操作码OP(IR) →CMAR,因此实际上是每两个时钟周期才能取出并执行一条微指令。如果能做到每一个时钟周期取出并执行一条微指令,将大大提高微程序控制的速度。   事实上如果将CMDR的下地址字段Ad(CMDR)直接接到控存的地址线上,并由下一个时钟周期的上升沿将该地址单元的内容(微指令)读到CMDR中,便能做到在一个时钟周期内读出井执行一条微指令。这就好比将Ad(CMDR)当作CMAR使用。同理也可将指令寄存器的操作码字段OP(IR)经微地址形成部件形成的后继微指令的地址,直接送到控存的地址线上。这两路地址可通过一个多路选择器,根据需要任选一路,如下图所示。

  综上所述, 在省去了19条微指令的同时也省去了两个微操作(微指令地址字段Ad(CMDR) →CMAR和指令操作码OP(IR) →CMAR),这样,10条机器指令共对应18个微操作和19条微指令。为了便于扩充,操作控制字段取24位,下地址字段取6位,其微指令格式如下图所示。

  其中第0位表示控制 PC→MAR微操作   第1位表示控制 1→R微操作   第2位表示控制 M(MAR) →MDR   第3位表示控制 (PC)+1→PC   第4位表示控制 MDR→IR   第5位表示控制 0→AC   第6位表示控制 AC→AC   第7位表示控制 L(AC) →R(AC),AC0→AC0   第8位表示控制 R(AC) →L(AC),AC0→AC0   第9位表示控制 0→G   第10位表示控制 Ad(IR) →MAR   第11位表示控制 (MDR)+(AC) →AC   第12位表示控制 1→W   第13位表示控制 AC→MDR   第14位表示控制 MDR→M(MAR)   第15位表示控制 MDR→AC   第16位表示控制 Ad(IR) →PC   第17位表示控制 A0・Ad(1R)+Ao・(PC) →PC

  3.编写微指令码点

  下表列出了对应10条机器指令的微指令码点。表中空格中“0”缺省。

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3