• 【组成原理-处理器】微程序控制器


    1 易混淆的几个概念

    • 微操作:一条机器指令可分解为多条微操作。
    • 微命令:控制部件向执行部件发出的控制命令。这些命令导致执行部件执行微操作。

    微命令和微操作是一一对应的:微命令是微操作的控制信号,微操作是微命令的执行过程。

    • 微指令:若干微命令的集合。
    • 微程序:若干微指令的集合。

    粒度大小:微命令&微操作 < 微指令 < 微程序

    • 微周期:从控制存储器(CM)读取一条微指令并执行相应微操作所需的时间。

    2 微指令的设计

    2.1 水平型微指令

    水平型微指令:一条微指令能定义多个可并行的微命令。

    (1)优缺点:

    • 优点:微程序短,执行速度快。
    • 缺点:微指令长,编写微程序较麻烦。

    (2)格式:

    操作控制(微操作码)顺序控制(微地址码/下地址)顺序控制(微地址码/下地址)
    A1, A2, A3,…,An判断测试字段后继地址字段

    下面来讨论水平型微指令的编码方式。

    2.1.1 直接编码(直接控制)方式

    在微指令的操作控制字段中,每一位代表一个微操作命令,某位为“1”表示该控制信号有效。

    (1)格式:

    操作控制(控制信号)下地址
    1 0 1 0 0 … 0 1~

    (2)优缺点:

    • 优点:简单、直观,执行速度快,操作并行性好。
    • 缺点:微指令字长过长,n 个微命令就要求微指令的操作字段有 n 位,造成控存容量极大。
    2.1.2 字段直接编码方式

    将微指令的控制字段分成若干“段”,每段经译码后发出控制信号。

    (0)两个概念:

    • 相容性微命令:可以并行完成的微命令。
    • 互斥性微命令:不允许并行完成的微命令。

    (1)原则:

    • 互斥性微命令位于同一段内,相容性微命令位于不同段内。
    • 每个小段中包含的信息位不能太多。
    • 每个小段需留出一个状态,表示本字段不发出任何微命令。通常用 000 表示不操作

    例:当某字段的长度为 3 位时,最多只能表示 7 个互斥的微命令,用 000 表示不操作。

    (2)格式:

    操作控制 1操作控制 2操作控制 3操作控制 4下地址
    1 0 10 0 11 0 00 1 0~

    (3)优缺点:

    • 优点:可以缩短微指令字长。
    • 缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢。
    相关例题

    【例】某计算机的控制器采用微程序控制方式,微程序中操作控制字段采用字段直接编码法,共有 33 个微命令,构成 5 个互斥类,分别包含 7、3、12、5 和 6 个微命令。问一共需要几位操作控制位?

    【解】这 5 个互斥类实际包含的状态数为 8、4、13、6 和 7 个,因为 8 = 23, 4 = 22, 13 < 24, 6 < 23, 7 < 23,所以需要的位数分别为 3,2,4,3,3,操作控制位一共需要 3+2+4+3+3=15 位。

    2.1.3 字段间接编码方式

    一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码。

    优缺点:

    • 优点:可进一步缩短微指令字长。
    • 缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段。

    2.2 垂直型微指令

    垂直型微指令:一条微指令只能定义一个微命令,由微操作码字段规定具体功能。

    (1)优缺点:

    • 优点:微指令短、简单、规整,便于编写微程序。
    • 缺点:微程序长,执行速度慢,工作效率低。

    (2)格式:

    微操作码目的地址源地址
    uOPRdRs

    2.3 混合型微指令

    混合型微指令:在垂直型的基础上增加一些不太复杂的并行操作。微指令较短,仍便于编写;微程序也不长,执行速度加快。

    3 微程序控制器的工作原理

    3.1 微程序控制器的组成

    • 微地址形成部件:产生初始微地址和后继微地址,以保证微指令的连续执行。
    • 控制存储器(CM):用于存放各指令对应的微程序,控制存储器可用只读存储器 ROM 构成。
    • 微地址寄存器(CMAR,uPC):又称为微指令计数器,用于存放控制存储器(CM)的下一条微指令的地址。
    • 微指令寄存器(CMDR,uIR):用于存放从控制存储器(CM)中读出的微指令。
    控制存储器(CM)怎样存储微指令?

    在这里插入图片描述

    • 取指周期微程序:通常是公用的,故如果某指令系统中有 n 条机器指令,则 CM 中微程序的个数至少是 n+1 个。
    • 间址周期微程序、中断周期微程序:一些早期的 CPU、物联网设备的 CPU 可以不提供间接寻址和中断功能,因此这类 CPU 可以不包含间址周期、中断周期的微程序段。
    • 执行周期:不同指令的执行周期微程序。

    【注意】物理上,取指周期、执行周期看起来像是两个微程序,但逻辑上应该把它们看作一个整体。因此,一般我们认为“一条指令对应一个微程序”!

    相关例题

    【例 1】某带中断的计算机指令系统共有 101 种操作,采用微程序控制方式时,控制存储器中相应最少有几个微程序?

    【解】取指周期微程序 1 个,中断周期微程序 1 个,执行周期微程序 101 个,一共 103 个微程序。

    【例 2】通常情况下,一个微程序的周期对应一个( )

    A. 指令周期

    B. 主频周期

    C. 机器周期

    D. 工作周期

    【解】如果将“一个微程序”理解为“一个周期的微程序”,则对应的周期应为机器周期,选 C;而如果将“一个微程序”理解为“一条指令的微程序”,即上文所述的,通常情况下,“一条指令对应一个微程序”,则对应的周期应为指令周期,选 A,可见此题有歧义。不过幸运的是,统考一般不会出现这种带有歧义性的题目,但是一旦出现了,最好还是选 A。

    3.2 微指令的地址形成

    • 微指令的下地址字段指出:微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式又称为断定方式
    • 根据机器指令的操作码形成:当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成。
    • 增量计数器:(CMAR) + 1 --> CMAR
    • 分支转移
    • 测试网络
    • 由硬件产生微程序入口地址
    相关例题

    【例】某计算机采用微程序控制器,共有 32 条指令,公共的取指令微程序包含 2 条微指令,各指令对应的微程序平均由 4 条微指令组成,采用断定法(下地址字段法) 确定下条微指令地址,则微指令中下地址字段的位数至少是?

    【解】一共有 32 条指令,每条指令的执行周期微程序有 4 条微指令,则一共有 32*4 = 128 条微指令,再加上公共的取指令微程序包含 2 条微指令,则总共为 128+2 = 130 条微指令。因为 130 < 28=256,所以下地址字段的位数至少有 8 位。

    4 微程序的设计

    4.1 取指周期的微程序

    取指周期的微操作分析:

    微操作描述
    (PC)–>MAR指令对应的地址放入 MAR 中
    1–>R允许读主存
    M(MAR)–>MDR从主存的相应地址读出指令并存入 MDR 中
    (PC)+1–>PC程序计数器加 1 个指令字长
    (MDR)–>IRMDR 存储的指令放入 IR 中
    OP(IR)–>微地址形成部件指令的操作码送入微地址形成部件进行译码
    微地址形成部件–>CMAR根据指令操作码确定该指令的执行(或间址)周期微程序的首地址

    因此,取指周期的微程序可以由以下几个微指令组成:

    微指令条数微操作描述
    1(PC)–>MAR指令对应的地址放入 MAR 中
    11–>R允许读主存
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段,并存放在 CMAR 中,这样就能确定下一条微指令的地址
    2M(MAR)–>MDR从主存的相应地址读出指令并存入 MDR 中
    2(PC)+1–>PC程序计数器加 1 个指令字长
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段,并存放在 CMAR 中,这样就能确定下一条微指令的地址
    3(MDR)–>IRMDR 存储的指令放入 IR 中
    3OP(IR)–>微地址形成部件指令的操作码送入微地址形成部件进行译码
    ~微地址形成部件–>CMAR根据指令操作码确定该指令的执行(或间址)周期微程序的首地址

    4.2 间址周期的微程序

    4.2.1 间接寻址

    间址周期的微操作分析:

    微操作描述
    Ad(IR)–>MAR读出指令的地址码部分,送入 MAR 中
    1–>R允许读主存
    M(MAR)–>MDR从主存的相应地址读出数据并存入 MDR 中
    (MDR)–>YMDR 存储的数据放入暂存输入寄存器 Y 中

    因此,该指令的间址周期的微程序可以由以下几个微指令组成:

    微指令条数微操作描述
    1Ad(IR)–>MAR读出指令的地址码部分,送入 MAR 中
    11–>R允许读主存
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段,并存放在 CMAR 中,这样就能确定下一条微指令的地址
    2M(MAR)–>MDR从主存的相应地址读出数据并存入 MDR 中
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段,并存放在 CMAR 中,这样就能确定下一条微指令的地址
    3(MDR)–>YMDR 存储的数据放入暂存输入寄存器 Y 中
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段(此时该字段应为执行周期微程序的首地址),并存放在 CMAR
    4.2.2 寄存器间接寻址

    间址周期的微操作分析:

    功能描述
    (R0)–>MAR读出 R0 的数据,送入 MAR 中
    1–>R允许读主存
    M(MAR)–>MDR从主存的相应地址读出数据并存入 MDR 中
    (MDR)–>YMDR 存储的数据放入暂存输入寄存器 Y 中

    因此,该指令的间址周期的微程序可以由以下几个微指令组成:

    微指令条数微操作描述
    1(R0)–>MAR读出 R0 的数据,送入 MAR 中
    11–>R允许读主存
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段,并存放在 CMAR
    2M(MAR)–>MDR从主存的相应地址读出数据并存入 MDR 中
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段,并存放在 CMAR
    3(MDR)–>YMDR 存储的数据放入暂存输入寄存器 Y 中
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段(此时该字段应为执行周期微程序的首地址),并存放在 CMAR

    4.3 执行周期的微程序

    ADD (R0), R1为例,功能为((R0))+(R1)–>(R0),说明执行周期的微程序。

    执行周期的微操作分析:

    微操作描述
    (Y)+(R1)–>ZY 中数据和 R1 中数据相加,经过 ALU 计算的结果存入 Z 中
    (Z)–>MDR将计算结果放入 MDR 中
    1–>W允许写主存
    (MDR)–>M(MAR)将 MDR 数据放入到主存相应地址中,注意此时 MAR 仍存储着 R0 的数据

    因此,该指令的执行周期的微程序可以由以下几个微指令组成:

    微指令条数微操作描述
    1(Y)+(R1)–>ZY 中数据和 R1 中数据相加,经过 ALU 计算的结果存入 Z 中
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段,并存放在 CMAR 中,这样就能确定下一条微指令的地址
    2(Z)–>MDR将计算结果放入 MDR 中
    21–>W允许写主存
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段,并存放在 CMAR 中,这样就能确定下一条微指令的地址
    3(MDR)–>M(MAR)将 MDR 数据放入到主存相应地址中,注意此时 MAR 仍存储着 R0 的数据
    ~Ad(CMDR)–>CMAR读取当前指令的下地址字段(此时该字段应为取指周期微程序的首地址),并存放在 CMAR

    5 综合例题

    例 1

    【例 1】假设某机器有 80 条指令,平均每条指令由 4 条微指令组成,其中有一条取指微指令是所有指令公用的。微指令长度为 32 位,请估算控制存储器 CM 的容量。

    【解】平均每条指令由 4 条微指令组成,其中有一条取指微指令是所有指令公用的,那么剩余的 3 条指令则是执行周期的指令,所以执行周期微指令一共有 80*3 = 240 条,再加上取指周期的微指令,CM 一共存储 240+1 = 241 条微指令。

    考虑微指令的格式,因为 241 < 28=256,所以下地址位数至少有 8 位。因此,CM 的存储单元个数有 256 个,每个存储单元存放一个 32 位的微指令,则 CM 容量为 32b*256。

    例 2

    【例 2】某微程序控制器中,微指令采用水平型格式、长度为 26 位,操作控制字段采用字段直接编码法,共 5 组,每组共有 5 个、8 个、15 个、27 个、3 个微命令;顺序控制字段采用下址法 + 测试网络法(断定法),测试网络有 2 种外部测试条件。

    (1)请设计该微程序控制器的微指令格式。

    (2)控制存储器 CM 的容量最大应为多少?

    【解】(1)操作控制字段采用字段直接编码法,共 5 组,每组共有 5 个、8 个、15 个、27 个、3 个微命令,则状态数分别为 6,9,16,28,4,因为 6 < 23, 9 < 24, 16 = 24, 28 = 25, 4 = 2^2,所以需要的位数为3,4,4,5,2,操作控制位一共 3+4+4+5+2=18 位。

    测试条件有 2 种,因此测试字段占 2 位。剩余的下地址位数 26-18-2=6 位。

    (2)下地址位数为 6,则 CM 存储单元个数为 26=64,容量为 26b*64。

    操作控制(微操作码)顺序控制(判断测试字段)顺序控制(后继地址字段)
    18b2b6b

    例 3

    【例 3】某微程序控制器中,采用水平型直接控制(编码)方式微指令格式,后继微指令地址由微指令的下地址字段给出。已知机器共有 28 个微命令、6 个互斥的可判定的外部条件,控制存储器的容量为 512 × 40 位。设计其微指令格式。

    【解】CM 容量为 512 × 40 位,说明微指令字长为 40 位,下地址需要 9 位(512 = 29)。6 个可判定的外部条件,且互斥,说明微指令的判断字段需要 3 位(6 < 23),这样控制字段需要 40-9-3=28 位。

    操作控制(微操作码)顺序控制(判断测试字段)顺序控制(后继地址字段)
    28b3b9b

    例 4

    【例 4】某机共有 52 个微操作控制信号,构成 5 个相斥类的微命令组,各组分别包含 5、8、2、15、22 个微命令。已知可判定的外部条件有两个,微指令字长 28 位。

    (1)请设计该微程序控制器的微指令格式。

    (2)控制存储器 CM 的容量最大应为多少?

    【解】(1)有 5 个相斥类的微命令组,各组分别包含 5、8、2、15、22 个微命令,则各组的状态数为 6,9,3,16,22,因为 6 < 23, 9 < 24, 3 < 2^2, 16 = 24, 22 < 25,所以控制位需要 3+4+2+4+5=18 位。

    可判定的外部条件有两个,则判断位数需要 2 位。剩余的下地址位需要 28-2-18=8 位。

    (2)CM 所需的容量为 28*28 = 256*28b。

    操作控制(微操作码)顺序控制(判断测试字段)顺序控制(后继地址字段)
    18b2b8b

    例 5

    【例 5】有指令STA X(X 为主存地址)。

    (1)若采用硬布线控制器,写出全部的微操作命令。

    (2)若采用微程序控制器,写出全部的微指令。

    【解】

    (1)若采用硬布线控制器,写出全部的微操作命令。

    • 取指周期:
    微操作控制信号
    (PC)–>MARPCout, MARin
    1–>R
    M(MAR)–>MDRMDRinE
    (PC)+1–>PCPC+1
    (MDR)–>IRMDRout, IRin
    OP(IR)–>ID
    • 间址周期:
    微操作控制信号
    Ad(IR)–>MARMDRout, MARin
    1–>W
    ACC–>MDRACCout, MDRin
    MDR–>M(MAR)MDRout
    • 无执行周期。

    (2)若采用微程序控制器,写出全部的微指令。

    • 取指周期:
    微指令条数微操作
    1(PC)–>MAR
    11–>R
    ~Ad(CMDR)–>CMAR
    2M(MAR)–>MDR
    2(PC)+1–>PC
    ~Ad(CMDR)–>CMAR
    3(MDR)–>IR
    ~OP(IR)–>CMAR
    • 间址周期:
    微指令条数微操作
    1Ad(IR)–>MAR
    11–>W
    ~Ad(CMDR)–>CMAR
    2ACC–>MDR
    ~Ad(CMDR)–>CMAR
    3MDR–>M(MAR)
    ~Ad(CMDR)–>CMAR
    • 无执行周期。
  • 相关阅读:
    Java算法探秘:二分查找详解
    使用指纹的锁屏解锁流程
    根据json生成Java类
    Xshell工具连接本地虚拟机Linux系统
    CSP2022
    2023/9/11 -- C++/QT
    仿游戏热血江湖游戏类
    C/C++刷题DAY2
    uniapp中table表格设置宽度无效的原因及解决办法
    SAP 灵活工作流邮件通知
  • 原文地址:https://blog.csdn.net/baidu_39514357/article/details/126816350