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

88
第第第 第第第第第第第第第 7.1 微微微微微微微微微微 7.2 微微微微微微微微微微微微微微微微 7.3 微微微微微微微微微微微微微微微微 7.4 微微微微微微 7.5 微微微微微微微微微微微微微微 7.6 微微 微微 微微微微微 微微微微 :一() CPU 微微微微微微

description

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

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

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

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

7.1 微序列控制器设计基础

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

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

7.4 减少微指令数

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

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

奔腾微处理器

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

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

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

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

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

令。

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

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

7.1 微序列控制器设计基础

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

典型微序列控制器的组成

微指令微代码或微程序

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

2 .微指令的组成

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

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

这些信号从微序列控制器输出到 CPU 的其

他部分,它们或者输入到组合逻辑以生成 CPU

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

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

用来产生存储到寄存器中的下一个地址,

这些位连同指令的操作码和标志值一起输入到

组合逻辑以产生下一条微指令的地址。

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

3 .下址的产生

四种常用方法:

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

当前地址加 1 。

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

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

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

◆ 映射逻辑

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

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

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

▲ 已读取指令的操作码输入到一个映射硬件,此硬件

将该操作码转换或映射成该指令执行周期的第一条

微指令所在的地址;

▲ 把这一地址装载到寄存器,微序列控制器就能转入

到正确的执行过程。

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

◆ 微子程序

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

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

硬件堆栈中,此地址用于从微子程序中返回。

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

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

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

• 地址域:指明一个绝对地址。

• 微操作域:一个或多个。

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

2 .说明微操作的三种主要方法

◆ 水平微代码

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

• 列出 CPU 所要执行的每一个微操作

• 将微指令微操作域中的一位分配给每个微操作

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

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

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

例如: 16 个微操作 —— 四位二进制来编码

( 0000 ~ 1111 )

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

◆ 控制信号的直接生成

微代码将微操作组合在一起,不同的是,它

把控制信号值直接存储在微指令中。

代码的可读性差,调试困难。

◆ 垂直微代码

所有微操作组合成域,域中的每个微操作

被分配一个唯一的编码值。

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

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

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

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

非常简单 CPU 。

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

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

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

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

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

为什么可以这样做?

考虑第六章所示的该 CPU 的状态图。

◆ 取指令周期的最后一个状态 FETCH3 可以转到四

个执行周期中的一个,这必须通过映射输入来实现。

◆ 剩余的每一状态都必须转到一个具体的次态,可

以通过绝对跳转来实现。

• 操作码映射

• 绝对跳转

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

必须确定 CPU 的几件事情:

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

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

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

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

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

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

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

度。

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

7.2.2 生成正确序列并设计映射逻辑 设计控制有限状态机状态转换的微代码。

一、给有限状态机的每种状态分配一个微代码地址

着重考虑:每一执行周期的第一个状态的地址分配

(它决定了实现映射功能的逻辑)

1.映射函数与映射逻辑

◆ 映射函数: 1IR[1..0]0

状态 ADD1 、 AND1 、 JMP1 和 INC1 →

1000 、 1010 、 1100 和 1110

(即 8 , 10 , 12 和 14 )

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

◆ 映射逻辑

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

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

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

二、 生成正确的微代码序列

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

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

例如: FETCH1 → FETCH2

0 号单元: SEL=0 ADDR=0001

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

• 0 号单元对应于状态 FETCH1

• SEL=0 使微序列控制器从地址域得到它的下一地址

• 把地址域置为 0001 ,使它转到状态 FETCH2 所对应

的单元。

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

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

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

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

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

九个微操作 —— 9 位来

表 示 ( 每 个 微 操 作 1位)

1 —— 微操作发生

0 —— 不发生

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

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

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

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

优化微代码。◆ 在所有的状态中, ARDR 和 IRDR 的值是相同

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

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

IR←DR[7..6] 。

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

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 26: 第七章 微序列控制单元设计

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

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

域中,使得任何状态一个域中最多只有一种微操作是有

效的,然后域中的每个微操作被赋予一个唯一的域值。

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

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

微操作域位从微代码存储器输出到一个译码器,译

码器的输出就是在水平微代码中直接产生的微操作。

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

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

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

◆ 指导性原则

1.对于同一状态下发生的两个不同的微操作,将它

们分配到不同的域中。每个域在一个周期中只能输出唯

一一个微操作的值,如果两个微操作要同时出现,则它

们不可能在同一个域中。

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

3.分配剩下的微操作以便充分地利用微操作的域位。

4.把修改相同的寄存器的微操作组合在同一个域中。

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

◆ 步骤

1.将微操作分组

▲ DRM 和 PCIN 都在 FETCH2 状态下发生,那么这两

种微操作必须被分配到不同的域中。则该 CPU 的微操作

至少需要两个域,我们分别把它标记为 M1 和 M2 ,包括

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

M1 M2

NOP NOP

DRM PCIN

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

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

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

PCDR 也加到 M2 中。

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

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

▲ 产生如下的分配

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

M1 M2

NOP NOP

DRM PCIN

ACIN PCDR

PLUS ARPC

AND AIDR

AR←PC ;( ARPC )AR←DR[5..0] ( AIDR )

PC←PC + 1 ( PCIN ) PC←DR[5..0] ( PCDR )

DR←M ( DRM )

IR←DR[7..6] ( AIDR )

AC←AC+ DR ( PLUS ) AC←AC DR∧( AND ) AC←AC+1 ( ACIN )

2.每个域有五种微操作,因此每个域需要 3 位,一共 6位。

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

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 33: 第七章 微序列控制单元设计
Page 34: 第七章 微序列控制单元设计

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

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

四、增加硬件把这些位值转换为所代表的微操作

• M1 :把这个域输入到一个 3-8 译码器中

例如:输出 2 → 微操作 ARPC

• M2 :只有 1 位,不需要用译码器,直接驱动 PCIN 。

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

实践视角:毫微指令

毫微存储器与毫微指令

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

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

的大小。

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

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

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

列控制器。

▲ 水平微代码的微序列控制器: 128*32=4,096 位存储器

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

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

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

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

模式。

▲ 毫微存储器: 16*32=512 位

▲ 微代码存储器:额外的 128*4=512 位的指针

共 512 位+ 512 位 = 1,024 位

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

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

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

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

M1 和 M2 。

对微代码存储器的每个字来说,如果信号有效,

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

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

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

▲ DR←M

▲ PC←PC+1 :使 PCINC 信号有效。

▲ 微指令的其他信号置 0 。

• 使 READ 信号有效

以便从存储器里输出数据

• 使 MEMBUS 信号有效

使此数据输入到内部系统总线上

• 使 DRLOAD 信号有效

以便把数据从总线上装载到 DR 中

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

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

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

FETCH1: AR←PC

FETCH2: DR←M , PC←PC+ 1

FETCH3: IR←DR[7..6] , AR←DR[5..0]

ADD1: DR←M

ADD2: AC←AC+ DR

AND1: DR←M

AND2: AC←AC DR∧ JMP1: PC←DR[5..0]

INC1: AC←AC+ 1

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

3. 优化直接生成控制信号的微操作

DRLOAD 、 MEMBUS 和 READ 信号总有相同的值,把

这些信号组合起来。用 1 位( DMR )驱动这 3 个信号。

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

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

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

换成控制信号

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

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

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

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

▲ 使 FETCH3 映射到这两个状态上。

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

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

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

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

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

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

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

确转移到两个下一地址之一:• 条件满足: 转移到 ADDR 域所指的地址

• 条件不满足 : 转移到微代码存储器的下一地址

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

有三种可能的下一地址。

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

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

4

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

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

▲ 映射函数和映射逻辑

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

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

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

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

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

4 .下址的产生

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

分两步实现:

◆ 用一个多路选择器选择所期望的条件

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

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

多路选择器选择其中的一个值作为条件值输出。

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

用哪个条件 。

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

条件值

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

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

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

址的正确源。

▲ 给定分支类型

分支类型的形式:

IF (condition) THEN Next Address = SOURCE1

ELSE Next Address = SOURCE2

或者是

REGARDLESS OF condition Next Address = SOURCE

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

确定准确的分支类型:

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

有条件的跳转就取决于微代码的布局。

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

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

一种分支类型:

IF ( condition ) THEN Next Address = ADDR

ELSE Next Address = Current Address + 1

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

分支类型

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

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

出产生选择信号的逻辑。

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

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

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

5

.实现微代码的顺序部分

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

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

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

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

为这些域赋值。

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

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

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

二、生成CPU

的控制信号

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

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

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

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

数的方法。

7.4 减少微指令数

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

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

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

的微指令。

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

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

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

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

程序的调用和返回。

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

简单 CPU 的设计。

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

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

考虑:状态 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 68: 第七章 微序列控制单元设计

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

增加两个哑状态: LDAC0 和 STAC0

▲ 当 LDAC 或 STAC 指令译码时, FETCH3 映射到这两

个状态中的一个。

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

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

(包含 LDAC4 或 STAC4 的地址)

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

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

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

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

SUB1 、 SUB2 、 SUB3分

别与 LDAC1 ( STAC1 )、

LDAC2 ( STAC2 )、

LDAC3 ( STAC3 )执行

同样的微操作。

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

2. 修改微序列控制器

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

输出提供。

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

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

进行如下修改:

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

(当前地址加 1 )

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

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

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

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

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

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

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

序调用和返回的类型。

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

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

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

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

3 .修改分支转移类型

修改后有四种分支转移类型:• 条件转移

• 无条件映射

• 微子程序调用

• 微子程序返回◆ 把 BT扩充为两位,以便于在四种类型中进行选择。

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

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

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

◆ 产生下一地址多路选择器的控制信号 S1 和 S0 以及微

子程序寄存器的装载信号 L :

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

L= BT1 BT∧ 0’

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

4. 修改执行周期微代码

相对简单微序列控制器修改后的微指令

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

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

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

样的微操作。

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

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

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

到正确的状态。

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

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

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

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

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

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

杂性也随之增加。

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

器装载信号的微操作,于是就增加了产生这一控制信号

需要的逻辑。

◆ 对硬布线控制来说

有更多状态要发出这些微操作,会导致用

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

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

来生成寄存器装载、加 1 以及清除信号所需的组

合逻辑的增加。

◆ 对水平型的微序列控制器来说

每个微操作对应一位微代码。使同一个微操

作更加频繁地发出,这不会改变产生实际控制信号

的组合逻辑的复杂性,因为对每个状态来说只需检

查同一位。然而,拥有更多的导致同一个寄存器装

载的不同微操作,将会增加逻辑的复杂性,因为会

有更多的微代码位需要检查。

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

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

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

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

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

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

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

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

作要生成该信号,每个控制信号只对应微代码中的一

位。

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

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

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

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

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

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

的要快。

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

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

码控制。

1. 内部组成

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

奔腾微处理器

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

2. 内部存储器

• 8 个整数寄存器

• 8 个独用于浮点操作的额外寄存器

• 一个 32K 的 Cache 存储器3. 特殊目的的功能单元

• 浮点单元:负责处理所有的浮点指令,它包括专门

设计用来处理浮点数的硬件。

• MMX 单元:处理为多媒体应用而设计的指令。

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

4. 控制单元• 控制单元

• 指令译码

• 控制 ROM

5. 两个指令流水线

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

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