组合逻辑设计

所谓组合逻辑设计,是通过硬件的方式,来操控指令中各个微操作的执行。前面我们知道,指令的执行一般分为三个周期:

  • 取值周期
  • 间址周期
  • 执行周期

不同的指令在不同的周期会有不同的微操作,那么本节内容就是讲述,如何通过硬件方式来在对应指令的对应周期执行相应的微操作。

微操作节拍

微操作一般来说是按照节拍来执行,由于节拍的设置都是按照最长时间的微操作来设定,所以一个微操作节拍可以同时执行多个时间不同部件的时间较短的微操作,用于节省时间。
后面的小结做如下假设: :::tips 假设机器采用同步控制,每个机器周期包含3个节拍(T0,T1,T2),而且CPU内部结构为非总线结构,其中MAR和MDR分别直接和地址总线和数据总线相连,并假设IR的地址码部分与MAR之间有通路。 :::

微操作节拍安排原则

  1. 微操作的次序不能改变
  2. 不同的部件上的微操作,如果可以再一个节拍内执行,就尽可能的安排在一个节拍内(同步执行)
  3. 如果有些微操作所占的时间不长,应该将它们安排在一个节拍内完成,并且允许这些微操作有先后次序。

    以上三个原则,优先级从高到底满足。 原则二是针对多条微操作使用的部件都不同的情况下,原则三是多条微操作使用到统一部件。

各周期微操作安排

(1)取指周期微操作节拍安排
由第九章可知,取值周期所需要的微操作有:

  1. PC→MAR
  2. 1→R
  3. M(MAR)→MDR
  4. 1→PC
  5. MDR→IR
  6. OP(IR) →ID

首先根据原则一,微操作顺序不能更改,所以就按照1-6的顺序,把这六个微操作安排到3个节拍里面。
首先看微操作1和2,1里面涉及到的部件是PC以及MAR,2涉及到的部件是CU所以根据**原则二**互不干涉,可以同步执行,微操作3中需要调用MAR中的内容,所以不可以和1、2同时执行。也就是说T0:PC→MAR,1→R
微操作3和4同理,也可以同时执行,那么T1:M(MAR)→MDR,1→PC
最后微操作5和,根据原则三,虽然这两条指令涉及到相同的部件IR,但是指令译码时间很短,所以同样也可以排到同一个节拍当中,也就是T3:MDR→IR,OP(IR) →ID
所以取指周期节拍安排如下:

  • T0:PC→MAR,1→R
  • T1:M(MAR)→MDR,1→PC
  • T3:MDR→IR,OP(IR) →ID

    后面的操作就不细讲了,浅看一下即可。

(2)间址周期微操作节拍安排

  • T0:Ad(IR) →MAR,1→R
  • T1:M(MAR) →MDR
  • T2:MDR→Ad(IR)

(3)执行周期微操作节拍安排
非访存指令
  ①清除累加器指令CLA

  • T0:
  • T1:
  • T2:0→AC

  ②累加器取反指令COM
  T0:
  T1:
  T2: 第十章:控制单元的设计 - 图1
  ③算术右移一位指令SHR
  T0:
  T1:
  T2:L(AC)→R(AC),ACn→AC0

L(AC)→R(AC):表示左边一位移动到右边一位 ACn→AC0:表示末尾移动到首位

第十章:控制单元的设计 - 图2
  ④循环左移一位指令CSL

  • T0:
  • T1:
  • T2: R(AC)→R(AC),AC0→ACn(即ρ-1(AC))

  ⑤停机指令STP

  • T0:
  • T1:
  • T2:0→G

  • 访存指令

  ①加法指令ADD X

  • T0:Ad(IR) →MAR, 1→R
  • T1:M(MAR) →MDR
  • T2:(AC)+(MDR)→AC,(该操作实际包括(AC) →ALU,(MDR) →ALU,ALU→AC)

  ②存数指令STA X

  • T0:Ad(IR) →MAR, 1→W
  • T1:AC →MDR
  • T2:MDR→M(MAR)

  ③取数指令 LDA X

  • T0:Ad(IR) →MAR, 1→R
  • T1:M(MAR) →MDR
  • T2:MDR→AC

  • 转移类指令

  ①无条件转移指令JMP X

  • T0:
  • T1:
  • T2:Ad(IR)→PC

②有条件转移(负则转)指令BAN X。

  • T0:
  • T1:
  • T2:第十章:控制单元的设计 - 图3

    最后这条指令的意思就是,如果A0是正数,那么PC的值变为AD(IR),也就是当前指令的地址码,如果不是,那么PC自动形成下一条指令的地址。

组合逻辑设计步骤

列出微操作命令的时间表

根据上述微操作的节拍安排,列出微操作命令的操作时间表:
image.png

书上P402有高清版本。

写出微操作命令的最简逻辑表达式

例如,根据表可写出M(MAR)→MDR微命令的逻辑表达式:

  M(MAR)→MDR   =FE·T1+IND·T1(ADD+STA+LDA+JMP+BAN)+EX·T1(ADD+LDA)   =T1{FE+IND(ADD+STA+LDA+JMP+BAN)+EX(ADD+LDA)}

解析一下:

  • 首先FE·T1表示在取指**FE**阶段的**T1**阶段所有的指令都需要调用这个微操作
  • IND·T1(ADD+STA+LDA+JMP+BAN)表示间址**IND**阶段的**T1**阶段,ADD、STA、LDA、JMP、BAN指令需要调用这个微操作
  • EX·T1(ADD+LDA)表示执行**EX**阶段的**T1**阶段,ADD、LDA指令需要调用这个微操作

第一步到第二步就是简单的化简。

画出微操作命令的逻辑图

上述的逻辑表达式,+使用或门,·使用与门,可得:
image.png

总结

采用组合逻辑设计方法设计控制单元,思路清晰,简单明了,但因为每一个微操作命令都对应一个逻辑电路,因此一旦设计完毕便会发现,这种控制单元的线路结构十分庞杂,也不规范,犹如一棵大树,到处都是不规整的枝叉。而且指令系统功能越全,微操作命令就越多,线路也越复杂,调试就更困难了。

组合逻辑设计的控制单元,所能实现的指令相对较少。


微程序设计

微程序的设计思想

微程序设计思想的核心就是:把一个机器指令对应编写成一个微程序,每一个微程序包含了若干条微指令,每一个微指令对应一个或者几个微操作命令。然后把这些微程序存储到一个控制存储器当中,用寻找机器指令的方式来寻找每个微程序当中的微指令。
第十章:控制单元的设计 - 图6
组合逻辑设计是通过硬件的设计来控制执行哪一条指令/微指令。而微程序设计的思想是就是:一条指令,通过寻址在控制存储器当中获得相应的微指令来控制和执行各个微操作。所以要求控制存储器的访存速度比较高才行。

微程序控制中,控制部件向执行部件发出的某个控制信号称为微命令

微程序的工作原理

机器指令对应的微程序

前面说过,**一条机器指令=一条微程序**,那么如果有**n**条指令,控制存储器中的微程序的个数是**n+3**。原因在于:任何一条机器指令的取指操作都是相同的,间接寻址和中断操作也是可以统一的,所以可以把**取指周期****间址周期****中断周期**单独写成3个微程序,执行部分就可以单独列出成为一个微程序。这就是为什么微程序的个数是n+3了。
image.png

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

在微程序当中,微指令的格式如下:
image.png

其实就是类似于操作码 + 地址码。 所谓顺序控制,就是指出下条微指令的地址,也称下地址

微程序控制单元的基本框图如下:
image.png

  • **OP**:机器指令操作码
  • **IR**:存放当前机器指令
  • **微地址形成部件**:根据机器指令的操作码形成微指令的地址
  • **CLK**:时钟信号
  • **控制存储器**:存放全部微程序
  • **CMAR**:控存地址寄存器
  • **CMDR**:控存数据寄存区
  • **顺序逻辑**:控制微指令序列,也就是控制形成下一条微指令的地址
  • **标志**:用于判断是否转移指令

这里形成下一条微指令的地址,和三个东西相关:

  1. 微地址形成部件
  2. 微指令的下地址字段
  3. 外来标志(如果为0执行下地址字段的指令,如果为1,执行跳转过后的微指令)

    工作原理

    假设我们需要执行一个取数指令
    申明:下面所有的部件中带有前缀C的都表示在控制单元中
    (1)取指阶段
    ① M→CMAR:获取微程序首地址
    ② CM(CMAR)→CMDR:把第一条微指令读取到控存数据寄存器
    ③ PC→MAR,1→R:命令主存接受程序首地址并且进行读操作
    ④ Ad(CMDR)→CMAR:这条微指令的顺序控制字段指出下一条微指令的地址
    ⑤ CM(CMAR)→CMDR:取出下一条微指令的地址
    ⑥ M(MAR)→MDR:由于第一条微指令控制字段发出的控制信号,对应第一条机器指令从主存中读取到MDR中
    ⑦ Ad(CMDR)→CMAR:形成下一条微指令的地址
    ⑧ 重复上述步骤…..

(2)执行阶段
① OP(IR)→微地址形成部件→CMAR:取数指令被取出之后,存放到了IR,其操作码部分通过微地址形成部件形成取数微程序的首地址,再把首地址送到控存地址寄存器
② CM(CMAR)→CMDR:在控制存储器中寻找对应地址的微指令
③ Ad(IR)→MAR,1→R:发出控制信号,命令主存读取操作数
④ Ad(CMDR)→CMAR:形成下一条微指令的地址
⑤ CM(CMAR)→CMDR:取出下一条微指令
⑥ 重复上述步骤……

形成下一条微指令的操作,一般都是通过PC+1来实现的,

微指令的编码方式

微指令的操作控制决定了应该执行哪些微操作。操作控制码部分本身是一段二进制代码:
第十章:控制单元的设计 - 图10
当某一位为1的时候,就对应执行某一个微操作。
微指令的编码方式又称为微指令的控制方式,指的是如何对微指令的控制字段进行编码,以形成控制信号

直接编码

所谓直接编码,就是如上图所示,一位二进制数为1的时候,就对应执行一个微操作。

字段直接编码

字段直接编码,是把操作码部分若干控制字段,每一段通过译码来决定需要执行哪个微操作或者不执行任何微操作:
第十章:控制单元的设计 - 图11
通过这种方式,可以使用较少的二进制信息表示更多的微操作命令信号,但同时由于需要译码,微程序的执行速度就会下降

一般情况下字段全为0表示该字段对应不执行任何微操作。

字段间接编码

这种方式一个字段的某些微命令还需要由另一个字段中的某些微命令来解释。(也理解为间接编码)
第十章:控制单元的设计 - 图12

还有其他的编码方式:

  • 混合编码:直接编码和字段编码融合
  • 其他:例

例题

题目:某机的微指令格式中,共有8个控制字段,每个字段可分别激活5,8,3,16,1,7,25,4种控制信号。分别采用直接编码字段直接编码方式设计微指令的操作控制字段,并说明两种方式的操作控制字段各取几位。

解:(1)采用直接编码方式,微指令的操作控制字段的总位数等于控制信号数,即
5+8+3+16+1+7+25+4=69
(2)根据题目给出的10个控制字段及各段可激活的控制信号数,再加上每个控制字段至少要留一个码字表示不激活任何一条控制线,即微指令的8个控制字段分别需给出6,9,4,17,2,8,26,5种状态,对应3,4,2,5,1,3,5,3位,故微指令的操作控制字段的总位数为:
3+4+2+5+1+3+5+3=26

比如说一个控制字段需要表示6种状态,那么根据二进制编码,就至少需要3位,因为23=8>6。

微指令序列地址的形成

  • 直接指出:通过微指令的顺序控制部分指出
  • 根据机器指令的操作码形成:也就是OP(IR)通过微地址形成部件
  • 增量计数器法:CMAR + 1 → CMAR
  • 分支转移:出现条件转移指令,根据标志位决定下一条微指令地址
  • 测试网络形成:高段地址不变,低段地址经过测试网络形成测试地址,和高段地址组合形成真实微指令地址
  • 硬件产生微程序入口:通过专门的硬件电路产生第一条微指令的地址(一般用于中断的情况)

    微指令格式

    水平型微指令

    水平型微指令的特点就是一次能够定义并执行多个并行操作的微指令,从编码方式看包括

  • 直接编码

  • 字段直接编码
  • 字段间接编码
  • 混合编码

    垂直型微指令

    采用类似机器指令操作码的方式,在微指令字中,设置微操作码字段,由微操作码规定微指令的功能。这种指令不强调并行控制功能

    两种指令格式的比较

  • 水平型微指令比垂直型微指令操作能力强,效率高,灵活性强

  • 水平型微指令需要微指令数量少,速度比垂直型微指令快 | 水平型微指令 | 垂直型微指令 | | —- | —- | | 能力强,效率高,灵活性强 | 能力弱,效率低,灵活性弱 | | 微指令数量少,速度快 | 微指令数量多,速度快 | | 微程序结构短、微指令结构长 | 微程序结构长、微指令结构短 | | 和机器指令差别大 | 和机器指令差别小 |