97
同同同同 同同同同 同同同 同同同同同同同同同 7.1 同同同同同同同同同同 7.2 同同同同同同同同同同同同同同同同 7.3 同同同同同同同同同同同同同同同同 7.4 同同同同同同 7.5 同同同同同同同同同同同同同同 7.6 同同 同同 同同同同同 同同同同 :一() CPU 同同同同同同

第七章 微序列控制单元设计

  • Upload
    carlyn

  • View
    116

  • Download
    5

Embed Size (px)

DESCRIPTION

第七章 微序列控制单元设计. 7.1 微序列控制器设计基础 7.2 非常简单微序列控制器的设计和实现 7.3 相对简单微序列控制器的设计和实现 7.4 减少微指令数 7.5 微程序控制和硬布线控制的比较 7.6 实例:一个(大部分是)微代码的 CPU 奔腾微处理器. 微序列控制器: 把控制信号存储在一个查找表 ROM ,即微代码存储器中。按照正确的次序访问 ROM 中的内容,查找表 ROM 就可以以适当的顺序发 出控制信号,从而实现处理器指令集中的指令 。. 几个基本概念 1. 微操作控制信号 : 如 : PCLOAD 、 ACINC - PowerPoint PPT Presentation

Citation preview

Page 1: 第七章 微序列控制单元设计

同济大学 软件学院

第七章 微序列控制单元设计

7.1 微序列控制器设计基础

7.2 非常简单微序列控制器的设计和实现

7.3 相对简单微序列控制器的设计和实现

7.4 减少微指令数

7.5 微程序控制和硬布线控制的比较

7.6 实例:一个(大部分是)微代码的CPU

奔腾微处理器

Page 2: 第七章 微序列控制单元设计

同济大学 软件学院

微序列控制器:把控制信号存储在一个查找表

ROM ,即微代码存储器中。按照正确的次序访问

ROM 中的内容,查找表 ROM 就可以以适当的顺序发

出控制信号,从而实现处理器指令集中的指令。

Page 3: 第七章 微序列控制单元设计

同济大学 软件学院

几个基本概念

1. 微操作控制信号 : 如 :PCLOAD 、 ACINC

2. 微操作:由微操作控制信号控制实现的最基本操作。

一个微操作是在一组微操作控制信号的控制下实现的。

如: AR←PC ARLOAD 、 PCBUS

3. 微指令:控制完成一组微操作的二进制编码字。

4. 微程序或微代码:一系列微指令的有序集合。

每一条机器指令对应着一段微程序,通过解释

执行这段微程序,完成指令规定的操作功能。

Page 4: 第七章 微序列控制单元设计

同济大学 软件学院

机器指令 ADD

(在主存中)

一段微程序

(在控制存储器 ROM 中)

FETCH1 ( 0) 100000000 微指令

FETCH2 ( 1) 001010000 微指令

FETCH3 ( 2) 010001000 微指令

ADD1 ( 8) 000001000 微指令

ADD2 ( 9) 000000100 微指令

Page 5: 第七章 微序列控制单元设计

同济大学 软件学院

7.1.1 微序列控制器的操作1 .典型微序列控制器的组成 ◆ 寄存器存储的值与 CPU 状态图中的一个状态相对 应,且当作地址输入到微代码存储器中。 ◆ 存储器的输出是一条微指令,即那个地址对应的 存储单元内容。所有微指令集中组成 CPU 的微代 码或微程序。 ◆ 下址产生模块产生所有可能的下一地址或下址, 然后从中选择一个正确的下址送入寄存器中。

7.1 微序列控制器设计基础

Page 6: 第七章 微序列控制单元设计

同济大学 软件学院

典型微序列控制器的组成

Page 7: 第七章 微序列控制单元设计

同济大学 软件学院

2 .微指令的组成

微指令由几个域组成,其 bit 位可分为两组。

◆ 微操作(微序列控制器的微序列部分)

或者输入到组合逻辑以生成 CPU

的控制信号,或者直接产生控制信号。

◆ 下一个地址(微序列控制器的序列控制部分)

用来产生存储到寄存器中的下一个地址, 这些位连同指令的操作码和标志值一起输入 到组合逻辑以产生下一条微指令的地址。

Page 8: 第七章 微序列控制单元设计

同济大学 软件学院

3. 微程序控制器的工作过程① 启动取指令微程序 (PC)→MAR ,读出机器指令→ IR, PC增量② 根据 IR中的操作码,通过微地址形成电路产生该指令 的微程序的起始微地址,并送入μMAR 中。 ③ μMAR 中的微地址经译码、驱动,从被选的控存单元 中取出一条微指令。④ 微指令的操作控制字段经译码或直接产生一组微操作 控制信号并送往有关的功能部件,控制其完成所规定 的微操作。

Page 9: 第七章 微序列控制单元设计

同济大学 软件学院

⑤ 微指令的地址控制字段及有关状态条件送往微地址 形成电路,产生下条微指令的地址,再去读取并执 行下条微指令。如此循环,直到一条机器指令的微 程序全部执行完毕。⑥ 一条指令的微程序执行结束,再启动取指令微指令

或微程序,读取下条机器指令。根据该指令码形成起始微地址,又转入执行它的一段微程序。

Page 10: 第七章 微序列控制单元设计

同济大学 软件学院

nn

22

n

2

n211

11

微程序指令

微程序指令

微指令

微指令完成一组微操作

)微命令、、微命令(微命令微指令

微程序指令

程序

程序、指令、微程序、微指令、微操作控制信号、微操作的关系

Page 11: 第七章 微序列控制单元设计

同济大学 软件学院

4 .下址的产生

四种常用方法:

◆ 当前地址加 1 :微代码存储器中的下一地址,

即当前地址加 1。

微代码程序在微代码存储器中顺序存放。

(提高可读性、微程序易于调试)

Page 12: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 绝对地址:由微代码存储器提供。

◆ 映射逻辑

每个微序列控制器必须能够访问正确的执

行周期,这功能可用映射逻辑来实现。

(1) 已读取指令的操作码输入到一个映射硬件,

此硬件将该操作码转换或映射成该指令执行

周期的第一条微指令所在的地址;

(2) 把这一地址装载到寄存器,微序列控制器就

能转入到正确的执行过程。

Page 13: 第七章 微序列控制单元设计

同济大学 软件学院

在取指令周期的末端使用一次。

◆ 微子程序

子程序入口地址:由微代码存储器给出绝对地址。

返回地址(当前地址加 1):存储在微子程序寄存器

或硬件堆栈中,此地址

用从微子程序中返回。

Page 14: 第七章 微序列控制单元设计

同济大学 软件学院

7.1.2 微指令的格式1 .典型的微指令格式

◆ 选择域:指明下一条微指令地址的来源

◆ 地址域:指明一个绝对地址

◆ 微操作域:一个或多个

Page 15: 第七章 微序列控制单元设计

同济大学 软件学院

2 .微操作的三种编码方法

◆ 水平微代码

微指令太长,大部分微操作位不是有效的。

列出 CPU 所要执行的每一个微操作 将微指令微操作域中的一位分配给每个微操作

例如:一个 CPU需要执行 50个微操作,

它的每一条微指令的微操作域将占用 50位。

Page 16: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 垂直微代码 所有微操作组合成组,组中的每个微操作 被分配一个唯一的编码值。 例如: 16个微操作 —— 四位二进制来编码

微指令位数少,但需要译码器。

◆ 控制信号的直接生成 微代码将微操作组合在一起,不同的是,它 把控制信号值直接存储在微指令中。 代码的可读性差,调试困难。

Page 17: 第七章 微序列控制单元设计

同济大学 软件学院

7.2 非常简单微序列控制器的设计和实现

采用微序列控制器重新设计第六章所讨论的非

常简单 CPU 。

指令集、有限状态机、数据通路和 ALU 单元都

是相同的, CPU 内部的数据流也没有变化,只有控

制信号的产生方法有所改变。

Page 18: 第七章 微序列控制单元设计

同济大学 软件学院

步骤 :

1. 确定基本结构

下地址来源

微代码存储器的地址宽度

2. 编写微程序

顺序控制部分:地址域、选择域

操作控制部分:微操作域

3.产生微操作控制信号

Page 19: 第七章 微序列控制单元设计

同济大学 软件学院

7.2.1 基本布局1. 非常简单微序列控制器的基本结构

Page 20: 第七章 微序列控制单元设计

同济大学 软件学院

2. 只用到两种可能的下址方式

为什么可以这样做?考虑第六章所示的该 CPU 的状态图。 ◆ 取指令周期的最后一个状态 FETCH3 可以转到 四个执行周期中的一个,这必须通过映射输 入来实现。◆ 剩余的每一状态都必须转到一个具体的次态, 可以通过绝对跳转来实现。

操作码映射 绝对跳转

Page 21: 第七章 微序列控制单元设计

同济大学 软件学院

必须确定 CPU 的几件事情:

从微代码存储器输出的绝对地址宽度有几位?

◆ CPU 的状态图中共有九种状态,每种状态代表

一条微指令,从中选择的话最少需要 4 位绝对

地址。既然映射硬件也生成同样宽度的地址,

那么输出的地址就是 4位宽度。

◆ 多路选择器输出到寄存器的输入、以及寄存器

输出到微代码存储器的输入,也都是 4位宽度。

Page 22: 第七章 微序列控制单元设计

同济大学 软件学院

7.2.2 生成正确序列并设计映射逻辑 设计控制有限状态机状态转换的微代码。1 .给有限状态机的每种状态分配一个微代码地址 着重考虑:每一执行周期的第一个状态的地址分配 (它决定了实现映射功能的逻辑) (1) 映射函数与映射逻辑 ◆ 映射函数: 1IR[1..0]0 状态 ADD1 、 AND1 、 JMP1 和 INC1 → 1000 、 1010 、 1100 和 1110 (即 8, 10 , 12 和 14 )

Page 23: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 映射逻辑

Page 24: 第七章 微序列控制单元设计

同济大学 软件学院

(2) 非常简单微序列控制器的状态地址表

Page 25: 第七章 微序列控制单元设计

同济大学 软件学院

2. 生成正确的微代码序列

为了无条件转移到一种具体的状态,微序列

控制器通过地址域和选择域来提供状态的地址。

例如: FETCH1 → FETCH2

0 号单元: SEL=0 ADDR=0001 0 号单元对应于状态 FETCH1 SEL=0使微序列控制器从地址域得到它的下一地址把地址域置为 0001 ,使它转到状态 FETCH2 所对应

的单元。

Page 26: 第七章 微序列控制单元设计

同济大学 软件学院

除了 FETCH3 ,状态图中的每一种状态都可以这么设置。

FETCH3 必须映射到正确的执行周期,所以要求

SEL=1 ,表示采用映射地址。

Page 27: 第七章 微序列控制单元设计

同济大学 软件学院

Page 28: 第七章 微序列控制单元设计

同济大学 软件学院

7.2.3 用水平微代码生成微操作1 .非常简单 CPU 的微操作及它们的助记符

1 -- 微操作发生

0 -- 不发生

Page 29: 第七章 微序列控制单元设计

同济大学 软件学院

2 .非常简单微序列控制器初步的水平微代码

Page 30: 第七章 微序列控制单元设计

同济大学 软件学院

3 .非常简单微序列控制器优化后的水平微代码

优化微代码:

◆ 在所有的状态中, ARDR 和 IRDR 的值是相同的。

用一个输出 AIDR 来驱动这两个微操作。

◆ AIDR 组合了两个微操作 AR←DR[5..0]和

IR←DR[7..6]

Page 31: 第七章 微序列控制单元设计

同济大学 软件学院

Page 32: 第七章 微序列控制单元设计

同济大学 软件学院

4 .产生所需的控制信号

AR←PC ;AR←DR[5..0]

PC←PC + 1 ;PC←DR[5..0]

DR←M

IR←DR[7..6]

AC←AC +DR ;AC←AC DR∧ ;AC←AC + 1

Page 33: 第七章 微序列控制单元设计

同济大学 软件学院

 7.2.4 用垂直微代码生成微操作 一、从垂直微代码中生成微操作的一般情况

在垂直微代码中,所有的微操作被分组到不

同的域中,使得任何状态一个域中最多只有一种

微操作是有效的,然后域中的每个微操作被赋予

一个唯一的域值。

例如: 8种不同的微操作 —— 3 位二进制

(从 000 到 111之间的任何一个值)

Page 34: 第七章 微序列控制单元设计

同济大学 软件学院

微操作域位从微代码存储器输出到一个译码器,译码器的输出就是在水平微代码中直接产生的微操作。

Page 35: 第七章 微序列控制单元设计

同济大学 软件学院

Page 36: 第七章 微序列控制单元设计

同济大学 软件学院

二、为非常简单 CPU 设计垂直微代码

任务:给各种微操作分配不同的域

1. 指导性原则

(1) 对于同一状态下发生的两个不同的微操作,

将它们分配到不同的域中。每个域在一个

周期中只能输出唯一一个微操作的值,如

果两个微操作要同时出现,则它们不可能

在同一个域中。

(2) 必要的话在每个域中包括一个 NOP 操作

Page 37: 第七章 微序列控制单元设计

同济大学 软件学院

(3) 分配剩下的微操作以便充分地利用微操作的

域位。 (4) 把修改相同的寄存器的微操作组合在同一

个 域中。2. 步骤 (1) 将微操作分组

◆ DRM 和 PCIN都在 FETCH2 状态下发生,那么

这两种微操作必须被分配到不同的域中。

则该 CPU 的微操作至少需要两个域,把它

Page 38: 第七章 微序列控制单元设计

同济大学 软件学院

标记为 M1和 M2 。

包括 NOP 操作在内每个域的微操作如下:

M1 M2

NOP NOP

DRM PCIN

( FETCH2: DR←M , PC←PC + 1 )

◆ PCIN 和 PCDR都能修改 PC 值,所以我们现在把 PCDR

也加到 M2中。

Page 39: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 把剩下的微操作任意分配给这两个域,但要注意

把那些改变同一个寄存器值的微操作放到同一个域中。

◆ 产生如下的分配 M1 M2

NOP NOP

DRM PCIN

ACIN PCDR

PLUS ARPC

AND AIDR

Page 40: 第七章 微序列控制单元设计

同济大学 软件学院

(2) 每个域有五种微操作,因此每个域需要 3 位。(3) 对这种分配进行一些调整,减少总的位数。 ◆ AIDR : M2→M1 M2 的微操作数从 5变到 4,而 M1的从5变 到 6 。这时, M1仍需要 3 位,但是 M2 现在只 需要 2 位,微代码的宽度就减少了 1 位。 ◆ ARPC 和 PCDR : M2→M1 M1 : 8种微操作,需要 3 位 M2 :两种微操作,需要 1 位 总共 4 位(最少)

Page 41: 第七章 微序列控制单元设计

同济大学 软件学院

Page 42: 第七章 微序列控制单元设计

同济大学 软件学院

三、生成该 CPU 的最终微代码

Page 43: 第七章 微序列控制单元设计

同济大学 软件学院

四、增加硬件把这些位值转换为所代表的微操作 M1 :把这个域输入到一个 3-8 译码器中

例如:输出 2 → 微操作 ARPC M2 :只有 1 位,不需要用译码器,直接驱动 PCIN 。

Page 44: 第七章 微序列控制单元设计

同济大学 软件学院

Page 45: 第七章 微序列控制单元设计

同济大学 软件学院

实践视角:毫微指令

毫微存储器与毫微指令

Page 46: 第七章 微序列控制单元设计

同济大学 软件学院

用毫微存储器可以减少微序列控制器中存储器的

总的大小。

如果 10 种不同的微指令有完全相同的微操作,那

么所有这些微指令可以指向毫微存储器的同一个单元。

例如:一个有 128 条微指令和 32 个不同微操作的

微序列控制器。

◆ 水平微代码的微序列控制器

128*32=4,096 位存储器

Page 47: 第七章 微序列控制单元设计

同济大学 软件学院

假设:这 128 条微指令中只有 16种不同的微操作组合,

在一个 16*32 的毫微存储器中存储这 16 种模式。每条

微指令需要一个 4 位的域来指向毫微存储器中的一个

正确的模式。

◆ 毫微存储器

16*32=512 位

◆ 微代码存储器

额外的 128*4=512 位的指针

共 512 位+ 512 位 = 1,024 位

Page 48: 第七章 微序列控制单元设计

同济大学 软件学院

7.2.5 从微代码直接产生控制信号1. 直接输出控制信号

微序列控制器为每个控制信号保留一位,以

代替水平微代码设计中的微操作和垂直微代码

设计中的 M1和 M2 。 对微代码存储器的每个字来说,如果信号

有效,则相应的控制位置 1 ,否则置 0 。

Page 49: 第七章 微序列控制单元设计

同济大学 软件学院

例如: FETCH2 : DR←M 和 PC←PC+1

◆ DR←M

◆ PC←PC+1 :使 PCINC 信号有效◆ 微指令的其他信号置 0

使 READ 信号有效 以便从存储器里输出数据 使 MEMBUS 信号有效 使此数据输入到内部系统总线上 使 DRLOAD 信号有效 以便把数据从总线上装载到 DR中

Page 50: 第七章 微序列控制单元设计

同济大学 软件学院

2. 非常简单微序列控制器直接产生控制信号的微代码

Page 51: 第七章 微序列控制单元设计

同济大学 软件学院

3. 优化直接生成控制信号的微操作 DRLOAD 、 MEMBUS 和 READ 信号总有相同的值,把 这些信号组合起来。用 1 位( DMR )驱动这 3 个信号。

Page 52: 第七章 微序列控制单元设计

同济大学 软件学院

直接产生控制信号与前两种方法相比:

优点:不需要额外的硬件将微代码存储器的输出转

换成控制信号

缺点:可读性差,难于调试。

Page 53: 第七章 微序列控制单元设计

同济大学 软件学院

 7.3.1 修改状态图 考虑:条件跳转的取指令周期末尾

◆ 设计两种新的状态: JMPZ1 和 JPNZ1

◆ 使 FETCH3 映射到这两个状态上

◆ 这两种状态再依据 Z的值转移到正确的流程上

7.3 相对简单微序列控制器的设计和实现 设计一个用于相对简单 CPU 的微序列控制单元。

类似非常简单 CPU ,这一设计用到的指令集、数据通

道、以及 ALU都与硬布线控制设计中的相同。

Page 54: 第七章 微序列控制单元设计

同济大学 软件学院

Page 55: 第七章 微序列控制单元设计

同济大学 软件学院

7.3.2 设计顺序硬件和微代码 1 .增加完成条件分支的能力

新增加的两个状态 JMPZ1 和 JPNZ1 能根据 Z的值

正确转移到两个下一地址之一: 条件满足: 转移到 ADDR 域所指的地址 条件不满足 : 转移到微代码存储器的下一地址

(当前地址加 1) 2 .微序列控制器的基本结构

有三种可能的下一地址。

用一个两输入控制端的多路选择器作出选择。

Page 56: 第七章 微序列控制单元设计

同济大学 软件学院

4

组合逻辑

电路

Page 57: 第七章 微序列控制单元设计

同济大学 软件学院

3 .相对简单微序列控制器的状态分配

◆ 映射函数和映射逻辑

状态图有 39种状态,要一个 6位的地址。

映射函数: IR[3..0]00

Page 58: 第七章 微序列控制单元设计

同济大学 软件学院

相对简单微序列控制器的状态分配

Page 59: 第七章 微序列控制单元设计

同济大学 软件学院

4 .下址的产生

状态 JMPZ1 和 JPNZ1各自都用到两个下址之一。

分两步实现:

(1) 用一个多路选择器选择所期望的条件

◆ Z和 Z’可能在 JMPZ1 和 JPNZ1 状态下用到,

也可以把一个硬布线的 1作为无条件跳转的

输入,多路选择器选择其中的一个值作为条

件值输出。

Page 60: 第七章 微序列控制单元设计

同济大学 软件学院

条件值

◆ 微代码存储器提供条件选择信号用来决定使

用哪个条件

Page 61: 第七章 微序列控制单元设计

同济大学 软件学院

(2) 用组合逻辑将这些条件值,连同微序列控制器提供的

一种分支类型,转换成恰当的选择信号以选择下一地

址的正确源。

◆ 给定分支类型

分支类型的形式:

IF (condition) THEN Next Address = SOURCE1

ELSE Next Address = SOURCE2

或者是

REGARDLESS OF condition Next Address = SOURCE

Page 62: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 确定准确的分支类型

映射和无条件转移的处理很容易,有条件的跳转

就取决于微代码的布局。

JMPZ1 和 JPNZ1会转移到两个地址之一:

一个分支地址、当前地址加 1

一种分支类型:

IF ( condition ) THEN Next Address = ADDR

ELSE Next Address = Current Address + 1

Page 63: 第七章 微序列控制单元设计

同济大学 软件学院

Page 64: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 根据分支类型和条件值,为下址多路选择器设计

出产生选择信号的逻辑。

表中列出了期望的值,它导致:

S1=BT , S0=BT’∧(条件值)

Page 65: 第七章 微序列控制单元设计

同济大学 软件学院

Page 66: 第七章 微序列控制单元设计

同济大学 软件学院

5

.实现微代码的顺序部分

Page 67: 第七章 微序列控制单元设计

同济大学 软件学院

7.3.3 用水平微代码完成设计 一、形成微操作表

考察每种状态,列出微操作。

把 22 种微操作合并为微代码的几个域,

然后为这些域赋值。

Page 68: 第七章 微序列控制单元设计

同济大学 软件学院

相对简单微序列控制器的微操作

Page 69: 第七章 微序列控制单元设计

同济大学 软件学院

二、生成CPU

的控制信号

Page 70: 第七章 微序列控制单元设计

同济大学 软件学院

Page 71: 第七章 微序列控制单元设计

同济大学 软件学院

三、相对简单 CPU 的部分控制信号值

Page 72: 第七章 微序列控制单元设计

同济大学 软件学院

介绍两种利用冗余来减少控制单元所需的微指令

数的方法。

7.4 减少微指令数

1. 用微子程序把重复的微操作合并成一个微指令块,

这个微指令块可供两个或更多个执行周期访问。

2. 用微代码的跳转来访问可供两个或多个周期共享

的微指令。

Page 73: 第七章 微序列控制单元设计

同济大学 软件学院

7.4.1 微子程序 微子程序 : 微码中供多个周期执行的一组动作序列。

优点:减少微代码所需的存储单元数量

缺点:微序列控制器的硬件必须增强以实现微子

程序的调用和返回

为了说明微子程序是怎样工作的,我们修改

相对简单 CPU 的设计。

1. 把一些状态用微子程序实现

Page 74: 第七章 微序列控制单元设计

同济大学 软件学院

考虑:状态 LDAC1 、 LDAC2 、 LDAC3 分别和状态 STAC1 、

STAC2 、 STAC3 执行相同的微操作

(从存储器获得一个 16 位的地址,并把它存入 AR中)

LDAC1 、 STAC1: DR←M , PC←PC + 1 , AR←AR+ 1

LDAC2 、 STAC2: TR←DR , DR←M , PC←PC + 1

LDAC3 、 STAC3: AR←DR , TR

Page 75: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 修改最初的设计,把这些状态用一个微子程序实现。

增加两个哑状态: LDAC0 和 STAC0 当 LDAC 或 STAC 指令译码时, FETCH3 映射到这两

个状态中的一个。 两个哑状态不执行微操作,只是去调用微子程

序。 当完成时,微子程序返回到下一地址。

(包含 LDAC4 或 STAC4 的地址)

Page 76: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 用微子程序修改 LDAC 和 STAC 指令的执行周期

Page 77: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 相对简单 CPU修改后的状态分配

SUB1 、 SUB2 、 SUB3 分

别与 LDAC1 ( STAC1 )、

LDAC2 ( STAC2 )、

LDAC3 ( STAC3 )执行

同样的微操作。

Page 78: 第七章 微序列控制单元设计

同济大学 软件学院

2. 修改微序列控制器

微子程序的地址由微代码存储器的地址域 ADDR

输出提供。

微序列控制器必须将返回地址存储起来,一旦

微子程序结束,它才能继续执行。

进行如下修改:

◆ 增加一个微子程序寄存器以保存返回地址

(当前地址加 1)

Page 79: 第七章 微序列控制单元设计

同济大学 软件学院

4

Page 80: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 修改下一地址生成硬件,把微子程序寄存器包括

进去,作为产生下一地址的一个可能的源。

◆ 修改下一地址多路选择器的选择逻辑,使之能够

考虑可能的返回地址。这个逻辑也必须产生一个控

制微子程序寄存器的装载信号。

◆ 必须扩充分支转移类型的列表,使之包括微子程

序调用和返回的类型。

◆ 必须修改微代码,使之能够正确的访问微子程序。

Page 81: 第七章 微序列控制单元设计

同济大学 软件学院

修改后的微序列控制器硬件

Page 82: 第七章 微序列控制单元设计

同济大学 软件学院

3 . 修改分支转移类型

修改后有四种分支转移类型: 条件转移 无条件映射 微子程序调用 微子程序返回

◆ 把 BT扩充为两位,以便于在四种类型中进行选择。

Page 83: 第七章 微序列控制单元设计

同济大学 软件学院

相对简单微序列控制器修改后的分支类型

Page 84: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 产生下一地址多路选择器的控制信号 S1 和 S0 以及微 子程序寄存器的装载信号 L:

S1 = BT0 S2 = BT1 (BT∨ 0’∧条件值 )

L = BT1 BT∧ 0’

Page 85: 第七章 微序列控制单元设计

同济大学 软件学院

4. 修改执行周期微代码 相对简单微序列控制器修改后的微指令

0 0 0

0 0 0

Page 86: 第七章 微序列控制单元设计

同济大学 软件学院

7.4.2 微代码跳转 1. 修改状态图

无条件转移和条件转移指令有几个状态执行

同样的微操作。

修改状态图使这些指令可以直接访问相同的

状态。一个状态集将执行跳转,而另一个状态集

将处理不发生跳转的条件转移,于是这些周期将

会转移到正确的状态。

Page 87: 第七章 微序列控制单元设计

JUMP1: DR←M , AR←AR+1

JUMP2: TR←DR , DR←M

JUMP3: PC←DR , TR

JMPZ :当 Z=1 时:JMPZY1: DR←M , AR←AR + 1

JMPZY2: TR←DR , DR←M

JMPZY3: PC←DR , TR

当 Z=0 时:JMPZN1: PC←PC + 1

JMPZN2: PC←PC + 1

JPNZ 指令的状态:当 Z=0 时: JPNZY1: DR←M , AR←AR + 1

JPNZY2: TR←DR , DR←M

JPNZY3: PC←DR , TR

当 Z=1 时: JPNZN1: PC←PC + 1

JPNZN2: PC←PC + 1

Page 88: 第七章 微序列控制单元设计

同济大学 软件学院

JUMP 、 JMPZ和 JPNZ指令修改后的状态图

Page 89: 第七章 微序列控制单元设计

同济大学 软件学院

2. 相对简单微序列控制器进一步修改后的微代码

Page 90: 第七章 微序列控制单元设计

同济大学 软件学院

 7.5.1 指令集的复杂性 1. 随着指令条数的增加,产生控制信号的硬件复

杂性也随之增加。

例如:越来越多的指令会导致越来越多的发出

累加器装载信号的微操作,于是就增加

了产生这一控制信号需要的逻辑。

◆ 对硬布线控制来说有更多状态要发出这些微

操作,会导致用来生成寄存器装载、加 1以

7.5 微程序控制和硬布线控制的比较

Page 91: 第七章 微序列控制单元设计

同济大学 软件学院

清除信号所需的组合逻辑的增加。

◆ 对水平型的微序列控制器来说每个微操作对应一位

微代码。使同一个微操作更加频繁地发出,这不会

改变产生实际控制信号的组合逻辑的复杂性,因为

对每个状态来说只需检查同一位。然而,拥有更多

的导致同一个寄存器装载的不同微操作,将会增加

逻辑的复杂性,因为会有更多的微代码位需要检查。

Page 92: 第七章 微序列控制单元设计

同济大学 软件学院

◆ 垂直型微序列控制器控制逻辑的复杂性也会增加。

使同一寄存器装载的数目增多的微操作,导致的是

组合起来以产生装载信号的微代码位数的增加。微

操作的个数越多,需要的译码器的个数或位数就越

多,因为译码器要把这些微操作域转变成相应的微

操作。

◆ 对于直接生成控制信号的微序列控制器来说增加的

微操作并不需要增加硬件。不管多少微操作要生成

该信号,每个控制信号只对应微代码中的一位。

Page 93: 第七章 微序列控制单元设计

同济大学 软件学院

7.5.2 修改的容易度 修改的容易度:指 CPU设计的可扩展性

◆ 硬布线控制单元需要修改硬件来扩充 CPU

◆ 微代码控制单元常常只需改变微程序

修改微代码比重新设计硬件要容易的多。

7.5.3 时钟速度 硬布线 CPU运行的速度通常比微代码控制 CPU

的要快。

Page 94: 第七章 微序列控制单元设计

同济大学 软件学院

  Intel 公司的奔腾微处理器(大部分)使用的是微

代码控制。

1. 内部组成

7.6 实例:一个(大部分是)微代码的 CPU

奔腾微处理器

Page 95: 第七章 微序列控制单元设计

同济大学 软件学院

Page 96: 第七章 微序列控制单元设计

同济大学 软件学院

2. 内部存储器 8 个整数寄存器 8 个独用于浮点操作的额外寄存器 一个 32K的 Cache存储器

3. 特殊目的的功能单元 浮点单元:负责处理所有的浮点指令,它包括

专门设计用来处理浮点数的硬件。 MMX单元:处理为多媒体应用而设计的指令。

Page 97: 第七章 微序列控制单元设计

同济大学 软件学院

4. 控制单元 控制单元 指令译码 控制 ROM

5. 两个指令流水线

能同时完成两个整数操作。

部分采用特殊的、硬布线控制逻辑来控制。