CPU结构和功能文档格式.docx

上传人:b****7 文档编号:22384816 上传时间:2023-02-03 格式:DOCX 页数:16 大小:29.39KB
下载 相关 举报
CPU结构和功能文档格式.docx_第1页
第1页 / 共16页
CPU结构和功能文档格式.docx_第2页
第2页 / 共16页
CPU结构和功能文档格式.docx_第3页
第3页 / 共16页
CPU结构和功能文档格式.docx_第4页
第4页 / 共16页
CPU结构和功能文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

CPU结构和功能文档格式.docx

《CPU结构和功能文档格式.docx》由会员分享,可在线阅读,更多相关《CPU结构和功能文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

CPU结构和功能文档格式.docx

11.2RegisterOrganization寄存器组织

CPU中的寄存器服务于两类功能:

●User-VisibleRegister:

允许编程人员通过优化寄存器的使用而减少对主存的访问。

●ControlAndStatusRegister:

控制CPU的操作并被OS程序用来控制程序的执行。

11.2.1User-VisibleRegisters用户可见寄存器

用户可见寄存器可分类如下:

●通用

●数据

●地址

●条件代码

通用寄存器可被程序员指派各种用途,能为任何操作码容纳操作数;

能用作寻址功能。

数据寄存器仅可用于保持数据。

地址寄存器自身有某些通用性,或是专用于某种具体的寻址方式。

例如:

●段指针

●变址寄存器

●堆栈指针

1.寄存器用途:

重要的设计出发点是使用完全通用的寄存器,还是指定各寄存器的用途。

这影响指令集的设计。

对指定寄存器的使用:

①节省了位数;

②又限制了程序员的灵活性。

趋势是朝着指定寄存器使用的方向发展。

2.寄存器数量:

影响指令集的设计;

寄存器越多,要求的操作数指定器的位数也越多。

趋势:

RISC中使用上百个寄存器。

3.寄存器长度问题:

①保持地址的寄存器明显地要求其长度足以保持最长的地址;

②数据寄存器应能保持大多数数据类型的值。

4.条件代码寄存器:

用于保持条件代码,也称为标志(Flag);

CPU硬件设置这些条件位作为操作的结果,可被后面的条件转移指令所测试。

条件代码位构成控制寄存器的一部分,机器指令允许这些位以隐含引用的方式读出。

11.2.2ControlandStatusRegisters

对于指令执行,有4种寄存器是至关重要的:

●PC

●IR

●存储地址寄存器(MAR)

●存储缓冲寄存器(MBR)

每次取指令之后,PC被CPU更改,PC总是指向将被执行的下一条指令。

取来的指令装入IR;

操作码和操作数指定器被分析。

与存储器的数据交换使用MAR和MBR。

上述4个寄存器用于CPU和存储器之间的数据传送。

ALU可对MBR和用户可见寄存器直接存取。

在ALU的边界上有另外的缓冲寄存器,作为ALU的输入和输出,并可与MBR和用户可见寄存器交换数据。

所有CPU设计都包括程序状态字寄存器(ProgramStatusWord,PSW),PSW一般含有条件代码加上其他状态信息:

●Sign

●Zero

●Carry

●Equal

●Overflow

●Interruptenable/disable(中断允许/禁止)

●Supervisor(监督):

指出CPU是执行在监督模式中还是在用户模式中,某些特权指令只能在监督模式中执行,某些存储器区域也只能在监督模式中被访问。

除了PSW之外,可能有一个指向存储器块(如进程控制块PCB)的指针,此块含有另外的状态信息。

在使用向量式中断的机器中,可能提供有一个中断向量寄存器。

若堆栈用于实现某些功能(如子程序调用),则需要有一个系统堆栈指针。

一个页表指针用于虚拟存储器系统。

在I/O操作控制方面也可能需要有寄存器。

设计控制和状态寄存器组织有几个关键因素需考虑:

1第一OS支持。

某些类型的控制信息是专门为OS使用的。

②第二是控制信息在寄存器和存储器之间的分配。

要在成本和速度之间进行权衡考虑。

11.2.3ExampleMicroprocessorRegisterOrginizations

(处理器寄存器组织的例子)

查看MC68000和Intel8086,分别见CP302+EP413图11.3(a)和(b)。

MC68000有8个数据寄存器和9个地址寄存器,用于数据管理,并在寻址方式中用作变址寄存器。

寄存器宽度允许8位、16位或32位数据操作;

地址寄存器容纳着32位地址:

其中两个寄存器器亦用作堆栈指针:

一个用于OS,一个用于用户。

它们都编号为7,因为任何时刻只能一个在使用。

MC68000包括一个32位程序计数器和一个16位状态寄存器。

出于对代码效率的考虑,将寄存器分成两个功能组件,在每个寄存器指定器上节省了1位。

这是在完全通用性和代码紧凑性之间一个合理的折衷。

Intel8086含有4个16位数据寄存器,可按字节来使用;

还含有4个16位的指针和变址寄存器。

8086还有4个段寄存器,其中三个(CS、DS、SS)以一种专门的隐含方式来使用。

专有的隐含方式的使用,以减少灵活性为代价,提供了编码的紧凑性。

8086亦包括一个指令指针和一组状态和控制标志。

目前为止,关于组织CPU寄存器的最好方式还没有一个普遍接受的原则。

80386是32位微处理器,并设计成8086的扩展,向上兼容性。

80386将原先的寄存器组织嵌入到新组织中,因此386寄存器组织设计中只有有限的灵活度。

11.3InstructionCycle指令周期

CP302+EP413图11.4是CP44+EP63图3.9的复制品。

一个指令周期包括如下子周期:

●取指(Fetch)

●执行(Execute)

●中断(Interrupt)

下面详细描述指令周期;

首先引入一个子周期:

间址周期

11.3.1TheIndiretCycle间址周期

可把间接地址的取看成是一个额外的指令子周期,结果示于CP305+EP416图11.5。

参见CP305+EP417图11.6,它更准确地说明了指令周期的本性,一旦取来一条操作数指定器必须被证实;

然后取每个存储器中的操作数,该过程可能要求间接寻址。

11.3.2DataFlow数据流

假定一个CPU,有MAR,MBR,PC,IR。

1.FetchCycle:

一条指令由存储器读入,CP306+EP418图11.7表示其数据流动:

①PC被传送到MAR并放在地址总线上;

②控制器请求一次存储器读;

其结果放到数据总线上并复制到MBR;

③传送到IR;

④在此期间,PC增1。

2.控制器检查IR的内容:

以确定是否有一个使用间接寻址的操作数指定器。

若是,一个间址周期被完成。

如CP306+EP418图11.8所示:

①MBR最右的N位是一个地址引用,被传送到MAR。

②控制器请求一个存储器读,得到操作数地址并送入MBR。

取指和间址周期是简单的,并且是可预期的。

3.中断周期(InterruptCycle)也是简单的并可预期的,CP307+EP419图11.9。

PC的当前内容必须保存,PC的内容传送到MBR。

因此一个专门的存储器位置由控制器装入MAR。

最后中断子程序的地址装入PC。

11.4INSTRUCTIONPIPELINING指令流水

11.4.1PipeliningStrategy流水线策略

1.流水处理

装配线通过把制作过程在一条装配线上,产品能在各个阶段同时被加工,这种过程被称为流水处理。

CP308+EP420图11.10(a)流水线有两个独立的阶段:

取指令和执行指令。

若取和执行这两个阶段是相等的时间,则指令周期时间将是原来的一半。

然而,实现这种执行速度的双倍是不太可能的,理由有二:

1)执行时间(executiontime)一般要长于取时间;

2)条件转移指令使得待取一条指令的地址是未知的。

由第二种情况造成的时间损失可通过推测来减少。

简单的处理规则:

当一条转移指令由取指阶段传送到执行阶段时,取指阶段取存储器中此转移指令之后的指令;

若转移未发生,则没有时间损失。

若转移发生,则已取的指令要作废并取新的指令。

让我们考虑指令处理的如下分解:

●取指令FI

●译码指令DI

●计算操作数CO

●取操作数FO

●执行指令EI

●写操作数WO

假定各个阶段需要相等的时间。

CP309+EP422图11.11表示了一个6段流水线,它能将9条指令的执行时间由54个时间单位减少到14(6+8)个时间单位。

2.几点说明

1)为简化流水线硬件设计,就在假定每条指令都要求这6个阶段的基础上来建立时序。

2)假定所有阶段都能并行完成(即假定无存储器冲突:

如FI、FO、WO能同时出现)。

3.限制性能增强的几个因素

①流水阶段涉及到某种等待:

各个阶段不可能完全相等。

②条件转移指令:

能使几条取指令变为无效。

③中断:

CP310+EP423图11.12说明了条件转移的影响,假定,指令3是一个可能转到指令15的条件转移指令。

图11.11表示转移未发生,我们得到了全面的性能增强。

图11.12表示的是转移发生的情况,直到时间单位7结束时才被确定。

在时间单位8,指令15进入流水线;

时间单位8~12期间没有指令完成。

这是不能预言转移是否发生所招致的性能惩罚。

4.存在的一些问题

1CO阶段可能取决于某个寄存器的内容(数据相关);

②寄存器和存储器冲突也可能出现(资源相关、控制相关)。

从前面的讨论,可能会认为流水线中阶段数目越多,执行速度越快。

IBMS/370设计者指出,有两个因素将使这种看似简单的高性能设计受挫:

1)流水线的每一阶段,都会有某些开销涉及到数据在缓冲器间的传送;

涉及到完成各种准备和递交功能。

这些开销能明显地使单一指令总的执行时间变长。

由于转移的大量使用,或是通过存储器访问的相关性,使顺序指令逻辑相关,这个问题变得特别重要。

2)优化流水线的使用和处理存储器及寄存器相关性所需的控制逻辑总量,会随着阶段数而剧烈增长。

最终导致:

阶段之间的门控逻辑比这些阶段本身的受控逻辑更复杂。

流水线是一种增强性能的强有力技术,需精心设计,以合理的复杂性达到最优的效果。

11.4.2PipeliningPerformance流水线的性能

指令流水线的周期时间τ,是在流水线中将一级指令推进一段所需的时间,能表示成:

τ=max[τi]+d=τm+di,1≤i≤k

其中:

τm=最大段延迟(通过耗时最长段的延迟)

k=指令流水线段数

d=锁存延时(数据和信号送到下一段所需的锁存接收时间)

通常,延时d等于时钟脉冲的宽度并且τm>

>

d。

假设有n条指令在进行,无转移发生。

执行所有n条指令所需的总时间是:

τk=[k+(n-1)]τ

使用指令流水线相对于不使用指令流水线的加速比为:

Sk=

1)CP313+EP426图11.14(a)给出加速比随指令数的变化关系,当n→∞时,Sk→k。

2)图11.14(b)给出加速比随指令流水线段数的变化关系。

这种情况下,加速比接近

无分支情况下能进入流水线的指令数;

更多的流水线段数能带来更大的潜在加速

比,通常流水线段数在6到9之间。

3)增加更多的段所带来的增益:

1必须考虑成本的增加;

②段间延时的增多;

③遇到转移指令而要求总清流水线。

11.4.3DealingwithBranches转移处理

设计指令流水线主要的障碍是条件转移指令。

有几种方法用于与条件转移打交道:

●多个指令流(multiplestreams)

●预取转移目标prefetchbranchtarget)

●循环缓冲器(loopbuffer)

●转移预测(branchprediction)

●延迟转移(delayedbranch)

1.多个指令流

一个简单流水线蒙受转移指令带来的惩罚,原因在于它必须做出二选一的选择,而且其选择可能是错的

一个强制的方法是复制流水线的初始部分,并允许流水线同时取这两条指令,使用两个指令流;

这种方法有几个问题:

●使用多个流水线,会存在对寄存器和存储器访问的竞争延迟。

●在原先的转移判决还没解决之前,可能又有另外的转移指令进入流水线。

尽管有这些缺点,上述策略也能改善性能。

使用两条或多条指令流水帐的例子是IBM370/168和IBM3033计算机。

2.预取转移目标

识别出一个条件转移指令时,转移目标处的指令也被取来。

该目标被保存直到转移指令被执行;

若转移发生,则目标已经取来。

IBM361/91使用这种方法。

3.循环缓冲器

循环缓冲器是流水线取阶段维护的一个小但极高速的存储器,含有n条最近取来的顺序指令。

若一个转移将要发生,硬件首先检查转移目标是否在此缓冲器中。

若是,则下一条指令由循环缓冲器取得。

循环缓冲器有三个好处:

1).采用了预取,循环缓冲器将含有某些排序在当前指令取地址之前的指令。

顺序取来的指令都可能被使用。

2).若一个转移的目标恰恰是在此转移指令之前的少数几个位置上,则目标已在缓冲器上,这对于相当普遍的IF-THEN和IF-THEN-ELSE顺序特别有用。

3).这一策略非常适合处理循环或重复;

若循环缓冲器是充分的大,足以容纳循环的全部指令,则这些指令只需要第一次循环时从存储器取来,以后的重复不需再取指令

原理上讲,循环缓冲器类似于指令Cache。

不同点在于循环缓冲器只保留顺序的指令,因而容量小、成本较低。

CP314+EP428图11.15给出一个循环缓冲器的例子,此缓冲器容纳256字节,使用字节寻址,则转移地址的低8位用于对缓冲器的索引。

其余的高有效位被检查,确定此转移目标是否已在此缓冲器所捕获的环境中。

4.转移预测

预测转移的技术应用最普遍的是:

●预测绝不发生(PredictNeverTaken)

●预测总是发生(PredictAlwaysTaken)

●依操作码预测(PredictByOpcode)

●发生/不发生切换(Taken/NotTakenSwitch)

●转移历史表BranchHistoryTable

前三种方法是静态的:

不取决于条件转移指令的过去执行历史。

后两种方法是动态的:

它们取决于执行的历史。

Motorola68020和VAX11/780使用预测绝不发生方法。

分析程序行为的研究已说明,条件转移的转移发生概率高于50%。

若由哪条路径预取的代价都是相同的,那么总是由转移目标地址的预取,应当比总是由顺序路径预取能给出更好的性能。

在一个分页的机器中,由转移目标的预取要比顺序取下一条指令更可能引起缺页,故必须考虑到这种性能的损害。

依操作码预测是依据转移指令的操作码进行判定。

处理器假定,对某些条件转移指令的操作码将总是发生转移,对另外的总是不发生。

这种策略的成功概率大于75%。

动态转移预测策略,试图通过记录条件转移指令在程序中的历史来改善预测的准确度。

每个条件转移指令可有与之相关联的一位或几位,反映此指令的最近历史,这些位称为发生/不发生开关;

它们指挥处理器在下次遇到此指令时产生具体的判定。

CP315+EP430图11.16表示判定过程可用一个4状态的有限状态的有限状态机来表示。

若一给定指令的最后两次转移取相同路径,则预测再次取此路径。

若预测再一次出错,它不改变方向;

若预测再一次出错,则下次预测将改变成相反的路径,于是,此算法是连续两次预测出错时才要求改变预测判定。

计算机系统使用发生/不发生开关方法的例子是IBM3090/400。

历史全方法有一个缺点:

若判定转移发生,转移目标指令并不能马上取得;

若判定一经做出,就能立刻开始取指令,可实现更高的效率。

为此,必须保存更多的信息到转移目标缓冲器或转移历史表(BranchHistoryTable)

转移历史表是一个与流水线取指令阶段关联的小型高速缓冲存储器。

每个表项由三个元素组成:

转移指令的地址;

记录这条指令使用状况的历史位;

有关它的目标指令的信息。

权衡考虑是清楚的:

保存目标地址可使表的规模较小,但与保存目标指令相比却要花费较多的取指令时间。

CP316+EP431图11.17将这种策略与预测绝不发生策略做个对照。

转移历史表作为Cache对待:

每次预取触发一次转移历史表中的查找。

若未匹配,则下一顺序地址用于取;

若发现匹配,则依据指令状态进行预测。

一个转移历史表(BHT)实现的例子是AMD29000微处理器。

5.延迟转移

可采用自动重排程序中指令的策略,以至一条转移指令出现在实际所要求的位置之后。

11.4.4INTEL80486PipeliningIntel80486的流水线

486有5段流水线:

●取:

:

指令由Cache或外部存储器取来,放入两个16字节预取缓冲器中的一个

●译码段1(DecodeStage1):

所有操作码和寻址方式信息在D1阶段被译码。

所需信息以及指令长度信息最多也只占据指令的前3个字节,这3字节由预取缓冲器传送到D1阶段。

D1译码器则能指挥D2阶段计算其余的信息(偏移量和立即数)。

●DecodeStage2:

D2阶段将每个操作码扩展成对ALU的控制信号;

也控制更复杂寻址方式的计算。

●Execute:

包括ALU运算、Cache访问和寄存器修改。

●WriteBack:

如果需要,这阶段更改寄存器和在前面执行阶段修改过的状态标志。

对两个译码段的使用,流水线能支持接近每时钟周期一条指令的吞吐率。

复杂指令和条件转移指令能使这个速率降低

CP318+EP433图11.18表示此流水线操作的例子。

图11.18(a)表示:

当要求存储器访问时,并没有延时引入到流水线中;

图11.18(b)中,对于一个用于计算存储器地址的值,能引入延时。

图11.18(c)说明了一条转移指令的定时,假定转移时发生。

转移指令的EX阶段,处理器并行地运行一个推测取指周期来取转移目标。

11.5THEPENTIUMPROCESSOPRPentium处理器

11.5.1RegisterOrganization寄存器组织

PentiumⅡ的寄存器组织详见CP319+EP434表11.1

1.EFLAGS寄存器

CP320+EP436图11.19指出CPU状况并帮助控制cpu的操作。

它包括CP259+EP352表9.8定义的6个条件代码,及一些控制位和与操作模式有关的4位(NT,VM,VIF,VIP)

2.控制寄存器

PentiumⅡ使用了4个32位控制寄存器(CR1不使用)来控制处理器操作的各个方面,见CP321+EP438图11.20。

CR0寄存器容纳有系统控制标志:

CP320↑8+EP437中。

当允许分页时,CR2和CR3有效。

CR4定义了9个附加控制位:

CP321↑3+EP439↓4

11.5.2MMXRegistersMMX寄存器

MMX指令使用3位寄存器地址字段,可支持8个MMX寄存器并使用别名技术

(CP323+EP440图11.21),即用现有的浮点寄存器来保存MMX值,就是将各浮点寄存器的低64位(尾数)用来构成8个MMX寄存器。

现有的PentiumⅡ结构很容易扩展成支持MMX功能。

MMX使用这些寄存器的关键特征:

CP322中+EP439↑5

11.5.3InterruptProcessing中断处理

中断处理是为支持操作系统提供的一种便利。

1.中断和异常

两类事件能引起PentiumⅡ挂起当前指令流的执行并响应事件:

中断和异常

中断通常是由硬件信号产生的,并可出现在程序执行期间内的任何时刻。

异常(Exception)是由软件产生的,是由执行指令所引发的事件。

1).中断

●Maskableinterrupt:

INTR引脚接收此信号。

●Nonmaskableinterrupt:

NMI引脚接收信号。

2).异常

●处理器确定的异常(Processor-DetectedExceptions)

●程序异常(ProgrammedExceptions):

INT0、INT3、INT和BOUND能产生异常

2.中断向量表(InterruptVectorTable)

PentiumⅡ每一类中断都指派了一个中断号,用于对中断向量表(4B×

2562KB容量)的索引。

该表容纳有256个32位中断向量,存储着中断服务程序在内存的入口地址。

CP323+EP442表11.2表示了中断向量号的指派情况:

背景打有阴影的项表示是中断,未打阴影的项是异常。

INTR硬件中断号的范围在32~255。

异常和中断的优先权组成5类,以降序排列的5类优先权是:

CP324中+EP441下

3.中断管理(InterruptHandling)

一个到中断处理子程序的执行转换,使用系统堆栈保存处理器的状态。

当一个中断出现并被处理器识别时,如下事件序列发生:

CP324下+EP441↑3。

为了从中断返回,中断服务子程序执行一条IRET指令,使保存在堆栈的值被取回,并由中断点恢复执行

11.6PowerPCPROCESSORPowerPC处理器

11.6.1RegistersOrganization寄存器组织

1.用户可见寄存器(theuser-visibleregisters)

CP325+EP444图11.22描绘了PowerPC的用户可见寄存器:

●General

●ExceptionRegister:

CP326+EP445图11.23(a)

2.浮点单元包含附加的用户可见寄存器

●General:

32个64位通用寄存器用于浮点数操作

●Floating-PointStatusandControlRegister:

见CP326+EP446表11.3

3.转移处理单元(thebranchprocessingunit)有3个用户可见寄存器

●ConditionRegister:

CP326+EP445图11.23(b)

●LinkRegister

●CountRegister

11.6.2InterruptProcesing中断处理

PowerPC包括一种允许处理器中断当前执行的程序来处理器异常条件的机制。

1.中断类型

PowerPC的中断大致分为两大类:

CP327+EP448见表11.5

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1