Bonky Zhu
If someone is able to show me that what I think or do is not right, I will happily change, for I seek the truth, by which no one was ever truly harmed. It is the person who continues in his self-deception and ignorance who is harmed.

计算机组成 – 控制单元的设计

组合逻辑控制

CU 外特性

对于下面这个图,首先 IR 中的操作码经过译码然后送给 CU,同时 CLK 也会将时钟送给 CU,最后根据上面这些加上标志输出控制信号。(变量有三个:操作码,时钟,标志)

image-20191208155604450

微操作的节拍安排

采用同步控制方式,一个机器周期内的节拍数取决于这一个周期所需要的控制信号,控制信号的复杂程度,控制信号之间是否并行有关。在这里我们假设一个机器周期内有 3 个节拍(时钟周期)。

下面还是一个非总线方式的 CPU 内部结构图:

image-20191208160225721

安排微操作时序的原则

为了解决控制命令到底安排到哪一个节拍的问题,原则有以下:

  • 微操作的先后顺序不得随意更改
  • 被控对象不同的微操作,尽量安排在一个节拍内完成(可以并行的,尽量在同一个节拍完成)
  • 占用时间较短的微操作,尽量安排在一个节拍内完成,并允许有先后顺序(把多个较短的微操作放在一个节拍内完成)

取指周期微操作的节拍安排

第一个节拍,因为 PC 到 MAR 和设置读信号不冲突,可以并行,所以可以放在同一个节拍。第二个节拍同理。第三个节拍,因为这两个操作都是寄存器到寄存器,所以可以两个操作放在一个节拍内。

image-20191208161056457

间址周期微操作的节拍安排

image-20191208161411265

执行周期微操作的节拍安排

不同指令的微指令操作都是不同的。

image-20191208161523702

image-20191208161543130

image-20191208161554309

中断周期微操作的节拍安排

image-20191208210132403

设计步骤

第一步是列出操作时间表,对于四个阶段我们都需要列出操作时间表:

image-20191208210859804

对于间址和执行也同理。

image-20191208211137837

然后根据此可以写出逻辑表达式:

image-20191208211204848

然后就可以做出逻辑电路:

image-20191208211227246

这么做有优点也有缺点,优点是因为是硬件,所以速度是很快的。缺点就是调试比较麻烦,然后不容易修改。

微程序设计

设计思路就是一条机器指令对应一个微程序,然后将其存ROM

微程序控制单元

image-20191208212144972

基本框图

其中 CMDR 和 CMAR 是控制器的数据寄存器和地址寄存器。微程序形成部件的作用是取出 IR 中的操作部分。顺序逻辑的作用是选择 CMAR 中正确的来源(因为 CMAR 有多重来源)。

image-20191208213123422

从 OP 开始,经过一系列操作后。控制存储器将指令放到 CMDR 中。然后有微指令之后,把操作控制送到 CPU 内部和系统总线的控制信号,而下一条微指令的地址送到了顺序逻辑。

工作原理

全部微指令存在 CM 中,程序执行过程中只需读出。

屏幕快照 2019-12-08 下午9.41.19

取址阶段

下面的 CM 代表的是控制寄存器。

其实就是执行取指微程序,一共三条命令。上图前面一个部分是指令(可能由多条构成,后面的那个是下一条指令的地址)

image-20191208161056457

执行阶段

其实和上面的取指差不多,只不过执行的是微程序为所执行的微程序的命令。

微指令的编码方式

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

在微指令的操作控制字段中,每一位代表一个微操作命令

image-20191208225042436

字段直接编码方式

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

屏幕快照 2019-12-08 下午10.51.14

优点是缩短了微指令字长(因为字段直接编码所表示的微指令,用直接编码来表示需要2^n^),缺点是增加了译码的时间。

字段间接编码方式

不仅与当前字段相关,还和别的字段相关。这样的编码叫做隐式编码。

image-20191208225509286

字段间接编码方式

直接编码和字段编码(直接和间接)混合使用。可以把一些经常用的用直接编码表示

地址形成

  • 微指令的下地址字段指出
  • 根据机器指令的操作码形成(比如散转就是的)
  • 增量计数器:其实就是每次把 CMAR 加一
  • 分支转移:image-20191208230011023
  • 通过测试网络
  • 由硬件产生微程序入口地址:
    • 第一条微指令地址:由专门硬件产生
    • 中断周期:由硬件产生中断周期微程序首地址

形成逻辑如下

image-20191208230421797

微指令格式

  • 水平型微指令:一次能定义并执行多个并行操作(上面的直接编码、字段直接编码、字段间接编码、直接和字段混合编码等都是水平型编码,即每个位或者多个位代表一个微操作,一个指令可能包括多个微操作)
  • 垂直型微指令:类似机器指令操作码的方式,由微操作码字段规定微指令的功能(每一个指令都对应一个二进制串,即一个指令只有一个操作)

比较:

  • 水平型微指令并行操作能力强 ,灵活性强
  • 水平型微指令执行一条机器指令所要的微指令数目少,速度快
  • 水平型微指令 用较短的微程序结构换取较长的微指令结构
  • 水平型微指令与机器指令差别大
  • 静态微程序设计:微程序无须改变,采用 ROM
  • 动态微程序设计:通过 改变微指令 和 微程序 改变机器指令,有利于仿真,采用 EPROM

毫微程序设计:毫微程序设计用毫微程序解释微指令。

设计思路

第一步先对取指,执行的微操作和节拍进行设置,同时我们需要考虑后续微指令的地址。

第二步,我们需要确认微指令的格式:编码方式,后续微指令地址,微指令的字长。如果是直接控制编码的话,微指令字长等于微操作的个数,加上 floor(log 微指令个数),如果我们有 20 个微操作,38 条微指令,所以最后的微指令字长为 20+floor(log38)=26位

第三步,编写微指令码点

image-20191208232638789

Share

You may also like...

发表评论