原计算机组成和体系结构课件_第1页
原计算机组成和体系结构课件_第2页
原计算机组成和体系结构课件_第3页
原计算机组成和体系结构课件_第4页
原计算机组成和体系结构课件_第5页
免费预览已结束,剩余81页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

7.1微序列控制器设计基础7.2非常简单微序列控制器的设计和实现7.3相对简单微序列控制器的设计和实现7.4减少微指令数7.5微程序控制和硬布线控制的比较7.6实例:一个(大部分是)微代码的CPU

奔腾微处理器微序列控制器:把控制信号存储在一个查找表ROM,即微代码存储器中。按照正确的次序访问ROM中的内容,查找表ROM就可以以适当的顺序发出控制信号,从而实现处理器指令集中的指令。7.1.1微序列控制器的操作1.典型微序列控制器的组成

典型微序列控制器的组成如图。

▲寄存器存储的值与CPU状态图中的一个状态相对应,且当作地址输入到微代码存储器中。▲存储器的输出是一条微指令,即那个地址对应的存储单元内容。所有微指令集中组成CPU的微代码或微程序。

▲下址产生模块产生所有可能的下一地址或下址,然后从中选择一个正确的下址送入寄存器中。7.1微序列控制器设计基础典型微序列控制器的组成2.微指令的组成微指令由几个域组成,其bit位可分为两组。

微操作(微序列控制器的微序列部分)这些信号从微序列控制器输出到CPU的其他部分,它们或者输入到组合逻辑以生成CPU

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

◆下一个地址(微序列控制器的序列控制部分)用来产生存储到寄存器中的下一个地址,这些位连同指令的操作码和标志值一起输入到组合逻辑以产生下一条微指令的地址。3.下址的产生四种常用方法:

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

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

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

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

每个微序列控制器必须能够访问正确的执行周期,这一功能可用映射逻辑来实现。▲已读取指令的操作码输入到一个映射硬件,此硬件将该操作码转换或映射成该指令执行周期的第一条微指令所在的地址;▲把这一地址装载到寄存器,微序列控制器就能转入到正确的执行过程。

在取指令周期的末端使用一次。◆微子程序

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

返回地址(当前地址加1):存储在微子程序寄存器或硬件堆栈中,此地址用于从微子程序中返回。7.1.2微指令的格式

1.典型的微指令格式

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

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

微操作域:一个或多个。

2.说明微操作的三种主要方法◆水平微代码

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

列出CPU所要执行的每一个微操作将微指令微操作域中的一位分配给每个微操作例如:一个CPU需要执行50个微操作,它的每一条微指令的微操作域将占用50位。

例如:

16个微操作——四位二进制来编码(0000~1111)微指令位数少,但需要译码器。◆控制信号的直接生成微代码将微操作组合在一起,不同的是,它把控制信号值直接存储在微指令中。

代码的可读性差,调试困难。◆垂直微代码所有微操作组合成域,域中的每个微操作被分配一个唯一的编码值。7.2.1基本布局

1.非常简单微序列控制器的基本结构7.2非常简单微序列控制器的设计和实现

采用微序列控制器重新设计第六章所讨论的非常简单CPU。指令集、有限状态机、数据通路和ALU单元都是相同的,CPU内部的数据流也没有变化,只有控制信号的产生方法有所改变。2.只用到两种可能的下址方式为什么可以这样做?考虑第六章所示的该CPU的状态图。

◆取指令周期的最后一个状态FETCH3可以转到四个执行周期中的一个,这必须通过映射输入来实现。◆剩余的每一状态都必须转到一个具体的次态,可以通过绝对跳转来实现。

操作码映射绝对跳转必须确定CPU的几件事情:从微代码存储器输出的绝对地址宽度有几位?

CPU的状态图中共有九种状态,每种状态代表一条微指令,从中选择的话最少需要4位绝地地址。既然映射硬件也生成同样宽度的地址,那么输出的地址就是4位宽度。

多路选择器输出到寄存器的输入、以及寄存器输出到微代码存储器的输入,也都是4位宽度。

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

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

着重考虑:每一执行周期的第一个状态的地址分配(它决定了实现映射功能的逻辑)

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

状态ADD1、AND1、JMP1和INC1→1000、1010、1100和1110

(即8,10,12和14)◆映射逻辑2.非常简单微序列控制器的状态地址表二、生成正确的微代码序列为了无条件转移到一种具体的状态,微序列控制器通过地址域和选择域来提供状态的地址。例如:FETCH1→FETCH2

0号单元:SEL=0ADDR=0001除了FETCH3,状态图中的每一种状态都可以这么设置。

0号单元对应于状态FETCH1

SEL=0使微序列控制器从地址域得到它的下一地址把地址域置为0001,使它转到状态FETCH2所对应的单元。FETCH3必须映射到正确的执行周期,所以要求SEL=1,表示采用映射地址。7.2.3用水平微代码生成微操作

1.非常简单CPU的微操作及它们的助记符九个微操作——9位来表示(每个微操作1位)1——微操作发生0——不发生2.非常简单微序列控制器初步的水平微代码3.非常简单微序列控制器优化后的水平微代码优化微代码。◆在所有的状态中,ARDR和IRDR的值是相同的。用一个输出AIDR来驱动这两个微操作。◆

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

IR←DR[7..6]。4.产生所需的控制信号

7.2.4用垂直微代码生成微操作一、从垂直微代码中生成微操作的一般情况在垂直微代码中,所有的微操作被分组到不同的域中,使得任何状态一个域中最多只有一种微操作是有效的,然后域中的每个微操作被赋予一个唯一的域值。

例如:8种不同的微操作——3位二进制(从000到111之间的任何一个值)微操作域位从微代码存储器输出到一个译码器,译码器的输出就是在水平微代码中直接产生的微操作。二、为非常简单CPU设计垂直微代码任务:给各种微操作分配不同的域。◆指导性原则

1.对于同一状态下发生的两个不同的微操作,将它们分配到不同的域中。每个域在一个周期中只能输出唯一一个微操作的值,如果两个微操作要同时出现,则它们不可能在同一个域中。

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

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

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

1.检查同时进行的微操作

DRM和PCIN都在FETCH2状态下发生,那么这两种微操作必须被分配到不同的域中。则该CPU的微操作至少需要两个域,我们分别把它标记为M1和M2,包括

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

M1

M2

NOPNOPDRMPCIN▲

PCIN和PCDR都能修改PC值,所以我们现在把PCDR也加到M2中。▲把剩下的微操作任意分配给这两个域,但要注意把那些改变同一个寄存器值的微操作放到同一个域中。▲产生如下的分配M1M2

NOPNOPDRMPCINACINPCDRPLUSARPCANDAIDR2.每个域有五种微操作,因此每个域需要3位,一共6位。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位,可能是最少的了。三、生成该CPU的最终微代码四、把这些位值转换为所代表的微操作

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

例如:输出2→微操作ARPC

M2:只有1位,不需要用译码器,直接驱动PCIN。实践视角:毫微指令毫微存储器与毫微指令

用毫微存储器可以减少微序列控制器中存储器的总的大小。如果10种不同的微指令有完全相同的微操作,那么所有这些微指令可以指向毫微存储器的同一个单元。例如:一个有128条微指令和32个不同微操作的微序列控制器。▲水平微代码的微序列控制器:128*32=4,096位存储器

假设:这128条微指令中只有16种不同的微操作组合,在一个16*32的毫微存储器中存储这16种模式。每条微指令需要一个4位的域来指向毫微存储器中的一个正确的模式。▲毫微存储器:16*32=512位▲微代码存储器:额外的128*4=512位的指针

共512位+512位=1,024位7.2.5从微代码直接产生控制信号

1.直接输出控制信号微序列控制器为每个控制信号保留一位,以代替水平微代码设计中的微操作和垂直微代码设计中的

M1和M2。对微代码存储器的每个字来说,如果信号有效,则相应的控制位置1,否则置0。例如,

FETCH2:DR←M和PC←PC+1▲DR←M

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

使READ信号有效以便从存储器里输出数据使MEMBUS信号有效使此数据输入到内部系统总线上使DRLOAD信号有效以便把数据从总线上装载到DR中2.非常简单微序列控制器直接产生控制信号的微代码3.优化直接生成控制信号的微操作

DRLOAD、MEMBUS和READ信号总有相同的值,把这些信号组合起来。用1位(DMR)驱动这3个信号。直接产生控制信号与前两种方法相比:优点:不需要额外的硬件将微代码存储器的输出转换成控制信号缺点:可读性差,难于调试。

7.3.1修改状态图

考虑:条件跳转的取指令周期末尾

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

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

▲这两种状态再依据Z的值转移到正确的流程上。7.3相对简单微序列控制器的设计和实现

设计一个用于相对简单CPU的微序列控制单元。类似非常简单CPU,这一设计用到的指令集、数据通道、以及ALU都与硬布线控制设计中的相同。7.3.2设计顺序硬件和微代码

1.增加完成条件分支的能力新增加的两个状态JMPZ1和JPNZ1能根据Z的值正确转移到两个下一地址之一:

条件满足:转移到ADDR域所指的地址条件不满足:转移到微代码存储器的下一地址(当前地址加1)2.微序列控制器的基本结构有三种可能的下一地址。用一个两输入控制端的多路选择器作出选择。3.映射函数和映射逻辑状态图有39种状态,要一个6位的地址。映射函数:IR[3..0]00相对简单微序列控制器的状态分配4.下址的产生状态JMPZ1和JPNZ1各自都用到两个下址之一。分两步实现:◆用一个多路选择器选择所期望的条件

Z和Z’可能在JMPZ1和JPNZ1状态下用到,也可以把一个硬布线的1作为无条件跳转的输入,多路选择器选择其中的一个值作为条件值输出。▲微代码存储器提供条件选择信号用来决定使用哪个条件。

条件值◆用组合逻辑将这些条件值,连同微序列控制器提供的一种分支类型,转换成恰当的选择信号以选择下一地址的正确源。▲给定分支类型分支类型的形式:

IF(condition)THENNextAddress=SOURCE1ELSENextAddress=SOURCE2

或者是

REGARDLESSOFconditionNextAddress=SOURCE确定准确的分支类型:映射和无条件转移的处理很容易,有条件的跳转就取决于微代码的布局。

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

一个分支地址、当前地址加1一种分支类型:

IF(condition)THENNextAddress=ADDRELSENextAddress=CurrentAddress+1分支类型

▲根据分支类型和条件值,为下址多路选择器设计出产生选择信号的逻辑。表中列出了期望的值,它导致:

S1=BT,S0=BT’∧(条件值)5.实现微代码的顺序部分

7.3.3用水平微代码完成设计一、形成微操作表考察每种状态,列出微操作。把22种微操作合并为微代码的几个域,然后为这些域赋值。相对简单微序列控制器的微操作二、生成CPU的控制信号三、相对简单CPU的部分控制信号值

介绍两种利用冗余来减少控制单元所需的微指令数的方法。7.4减少微指令数1.

用微子程序把重复的微操作合并成一个微指令块,这个微指令块可供两个或更多个执行周期访问。2.

用微代码的跳转来访问可供两个或多个周期共享的微指令。7.4.1微子程序微子程序

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

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

缺点:微序列控制器的硬件必须增强以实现微子程序的调用和返回。为了说明微子程序是怎样工作的,我们修改相对简单CPU的设计。

1.把一些状态用微子程序实现考虑:状态LDAC1、LDAC2、LDAC3分别和状态STAC1、

STAC2、STAC3执行相同的微操作。

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

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

增加两个哑状态:LDAC0和STAC0▲当LDAC或STAC指令译码时,FETCH3映射到这两个状态中的一个。▲两个哑状态不执行微操作,只是去调用微子程序。▲当完成时,微子程序返回到下一地址。(包含LDAC4或STAC4的地址)◆用微子程序修改LDAC和STAC指令的执行周期◆相对简单CPU修改后的状态分配

SUB1、SUB2、SUB3分别与LDAC1(STAC1)、LDAC2(STAC2)、LDAC3(STAC3)执行同样的微操作。

2.修改微序列控制器微子程序的地址由微代码存储器的地址域ADDR输出提供。微序列控制器必须将返回地址存储起来,一旦微子程序结束,它才能继续执行。进行如下修改:◆增加一个微子程序寄存器以保存返回地址(当前地址加1)◆修改下一地址生成硬件,把微子程序寄存器包括进去,作为产生下一地址的一个可能的源。◆修改下一地址多路选择器的选择逻辑,使之能够考虑可能的返回地址。◆必须扩充分支转移类型的列表,使之包括微子程序调用和返回的类型。这个逻辑也必须产生一个控制微子程序寄存器的装载信号。◆必须修改微代码,使之能够正确的访问微子程序。修改后的微序列控制器硬件3.修改分支转移类型修改后有四种分支转移类型:

条件转移无条件映射微子程序调用微子程序返回◆把BT扩充为两位,以便于在四种类型中进行选择。

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

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

S1=BT0S2=BT1∨(BT0’∧条件值)L=BT1∧BT0’修改后的分支逻辑4.修改执行周期微代码相对简单微序列控制器修改后的微指令7.4.2微代码跳转

1.修改状态图无条件转移和条件转移指令有几个状态执行同样的微操作。修改状态图使这些指令可以直接访问相同的状态。一个状态集将执行跳转,而另一个状态集将处理不发生跳转的条件转移,于是这些周期将会转移到正确的状态。JUMP、JMPZ和JPNZ指令修改后的状态图2.相对简单微序列控制器进一步修改后的微代码

7.5.1指令集的复杂性

1.随着指令条数的增加,产生控制信号的硬件复杂性也随之增加。例如:越来越多的指令会导致越来越多的发出累加器装载信号的微操作,于是就增加了产生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论