计算机组成原理 第九章(控制单元的设计)—第二节(微程序设计(上))

 写在前面:

  1. 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
  2. 视频链接:计算机组成原理(哈工大刘宏伟)135讲(全)高清_哔哩哔哩_bilibili

一、概述

        微程序控制器的设计思路:采用“存储程序”的思想,CPU出厂前将所有指令的“微程序”存入“控制器存储器”中

二、机器指令对应的微程序

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

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

三、微程序控制单元的基本框图

        下图示意了微程序控制单元的基本组成,图中点画线框内为微程序控制单元。

        ①点画线框内的控制存储器(简称控存)是微程序控制单元的核心部件,用来存放全部微程序

        ②CMAR是控存地址寄存器,用来存放欲读出的微指令地址

        ③CMDR是控存数据寄存器,用来存放从控存读出的微指令

        ④顺序逻辑是用来控制微指令序列的,具体就是控制形成下一条微指令(即后续微指令)的地址,其输入与微地址形成部件(与指令寄存器相连)微指令的下地址字段以及外来的标志有关。

        [1]顺序逻辑需要根据指令地址码的寻址特征位判断是否要跳过间址周期。

        [2]顺序逻辑需要根据中断信号判断是否进入中断周期。

        微指令的基本格式如下图所示,共分两个字段,一个为操作控制字段,该字段发出各种控制信号;另一个为顺序控制字段,它可指出下条微指令的地址(简称下地址),以控制微指令序列的执行顺序。

四、微程序控制单元的工作过程

        假设有一个用户程序如下所示,它存于以2000H为首地址的主存空间中。

LDA  X

ADD  Y

STA  Z

STP

(1)取指阶段:

①将取指周期微程序首地址M→CMAR。

②取微指令:将对应控存M地址单元中的第一条微指令读到控存数据寄存器中,记作CM(CMAR)→CMDR。

③产生微操作命令:第一条微命令的操作控制字段中为“1”的各位发出控制信号,如PC→MAR、1→R,命令主存接收程序首地址并进行读操作。

④形成下一条微指令的地址:此微指令的顺序控制字段指出了下一条微指令的地址为M+1,将M+1送至CMAR,即Ad(CMDR)→CMAR。

⑤取下一条微指令:将对应控存M+1地址单元中的第二条微指令读到CMDR中,即CM(CMAR)→CMDR。

⑥产生微操作命令:由第二条微命令的操作控制字段中为“1”的各位发出控制信号,如M(MAR)→MDR使对应主存2000H地址单元中的第一条机器指令从主存读出送至MDR中。

⑦形成下一条微指令的地址:此微指令的顺序控制字段指出了下一条微指令的地址为M+2,将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。

⑤取微指令:将对应控存P地址单元中的微指令读到CMDR中,即CM(CMAR)→CMDR。

⑥产生微操作命令:由微指令操作控制字段中对应“1”的各位发出控制信号。

⑦以此往复,直到取出取数指令微程序的最后一条微指令P+2,并发出微操作命令。至此即完成了将主存X地址单元中的操作数取至累加器AC的操作。这条微指令的顺序控制字段为M,即表明CPU又开始进人下一条机器指令的取指周期,控存又要依次读出取指周期微程序的逐条微指令,发出微操作命令,完成将第二条机器指令“ADD Y”从主存取至指令寄存器IR中……

(3)微程序控制单元通过逐条取出微指令,发出各种微操作命令,从而实现从主存逐条取出、分析并执行机器指令,以达到运行程序的目的

五、微指令的编码方式

1、直接编码(直接控制)方式

        在微指令的操作控制字段中,每一位代表一个微操作命令,这种编码方式即为直接编码方式。上面所述的用控制字段中的某位为“1”表示控制信号有效(如打开某个控制门),以及某位为“0”表示控制信号无效(如不打开某个控制门)就是直接控制方式。

        这种方式含义清晰,而且只要微指令从控存读出,即刻可由控制字段发出命令,速度快,但由于机器中微操作命令甚多,可能使微指令操作控制字段达几百位,造成控存容量极大。

2、字段直接编码方式

        这种方式就是将微指令的操作控制字段分成若干段,将一组互斥的微操作命令放在一个字段内,通过对这个字段译码,便可对应每一个微命令

        这种方式因靠字段直接译码发出微命令,故又有显式编码之称。

        采用字段直接编码方法可用较少的二进制信息表示较多的微操作命令信号。例如,3位二进制代码译码后可表示7个互斥的微命令,留出一种状态表示不发微命令,与直接编码用7位表示7个微命令相比,减少了4位,缩短了微指令的长度。但由于增加了译码电路,使微程序的执行速度稍微减慢。

        微命令字段的分段原则:

        ①互斥性微命令(不允许并行完成的微命令)分在同一段内,相容性微命令分在不同段内。

        ②每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间。

        ③一般每个小段还要留出一个状态,表示本字段不发出任何微命令,因此,当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作。

3、字段间接编码方式

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

        这种方法虽然可以进一步缩短微指令字长,但因削弱了微指令的并行控制能力,因此通常用作字段直接编码法的一种辅助手段。不过这种方式可能需要多级译码电路处理,执行速度较慢。

4、混合编码

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

5、其它

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

        此外,微指令还可用类似机器指令操作码的方式编码。

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 16:32:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 16:32:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 16:32:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 16:32:02       20 阅读

热门阅读

  1. 数据库中什么时候使用自增id,什么时候不能使用

    2024-03-24 16:32:02       21 阅读
  2. Rust 的 Vec 排序方法汇总

    2024-03-24 16:32:02       21 阅读
  3. Spring Boot的静态资源自动配置原理

    2024-03-24 16:32:02       22 阅读
  4. es 集群开机自动启动

    2024-03-24 16:32:02       16 阅读
  5. Rust 双向链表 LinkedList 和安全删除元素的方法

    2024-03-24 16:32:02       19 阅读
  6. cloud微服务

    2024-03-24 16:32:02       19 阅读