计算机流水线处理机及其设计_第1页
计算机流水线处理机及其设计_第2页
计算机流水线处理机及其设计_第3页
计算机流水线处理机及其设计_第4页
计算机流水线处理机及其设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、6 流水线处理机及其设计61 引 言流水线(pipeline)是一种能够使多条指令重叠操作的处理机的实现技术,它已成为现代处理机设计中最为关键的技术。流水线技术并不是处理机设计领域所独有的。早在计算机还没有出现之前,流水线技术已被广泛应用于工业生产中了。尤其是现在,几乎所有的现代化工厂的生产线都采用流水线技术。一件产品往往需要几道工序才能完成。每道工序只完成生产过程中的一小部分操作,即送往下道工序。如果单从件产品从开始到完成来看,生产所需要的时间,与非流水线相比,似乎并没有缩短。但从整体来看,产品的出产率却大大提高了。流水线处理机也是这样,单条指令的执行时间没有缩短,但每个时钟周期都会有一条指

2、令执行完毕。试想,非流水线多周期处理机执行一条指令平均要花费大约4个时钟周期。假设执行1万条指令,就要用4万个时钟周期。而流水线处理机执行一条指令可能需要5个时钟周期,但由于多条指令,例如5条,可以重叠操作,总体上,平均每条指令所花费的时间大致为1个时钟周期,总共只需要大约1万个时钟周期。这就是所谓的“吞吐率”的提高。流水线处理机把一条指令的执行分成几个步骤,或称级(stages)。每一级在一个时钟周期内完成。在每个时钟周期,处理机启动执行一条指令。如果处理机的流水线有m级,则同时可重叠执行的指令总条数将为m,每条指令处在不同的执行阶段。如果分级分得好的话,那么每级都没有时间上的浪费。这是最理

3、想的情况。流水线处理机在这种理想的情况下,与非流水线处理机的性能加速比为其中,I为一个程序被执行的总的指令条数。它在流水线处理机和非流水线处理机中是相等的。CPI是每条指令总体平均所需的时钟周期数。CPInp是非流水线处理机的CPI,CPIn是流水线处理机的CPI。因为流水线处理机把一条指令的执行时间理想地分成了阴级,有m条指令在同时(重叠)执行,则CPIpCPInp/m。也可理解为CPIp1,而CPInp=m。T是每个时钟周期的时间长度,假设它在两种处理机中也是相同的。最后总的加速比为m,即等于流水线的级数。 这岂不是说,把流水线级数分得越多处理机的性能就越好?但是,实际的情况往往要受很多条

4、件的限制。流水线处理机性能提高的关键在于每个时钟周期处理机都能启动一条指令的执行。这意味者流水线每级中的执行部件要有能力在每个时钟周期接收一条新的指令。例如,如果ALU完成一次操作要用10ns的话,那么一个ALU接收一条指令操作的周期不能短于10ns。指令存储器以及数据存储器也有这样的限制。也假设它们的访问周期是10ns,则每隔10ns才能从指令存储器取出一条指令,或者每隔10ns才能读写一次数据存储器。 在本章以下的讨论中,我们仍使用5章中定义的指令系统。它们是,ALU操作类型的指令,包括and,of,add和:sub;存储器访问指令10ad和store;条件转移指令bne和beq,以及无条

5、件转移指令branch,共9条。ALU指令除了把运算结果写入寄存器堆之外,也把ZERO标志写入Z寄存器。条件转移指令使用Z标志决定是否转移,其它指令不影响Z寄存器。处理机的指令系统及指令格式如表61所示。表6.1 流水线处理机的指令系统和指令格式31 2625 2120 1615 54 0指令意义00 0000rdrs1rs2And rd,rs1,rs2寄存器与寄存器00 0001rdrs1immeAndi rd,rs1,imme寄存器与立即数00 0010rdrs1Rs2or rd rs1,rs2寄存器或寄存器00 0011rdrs1immeori rd,rs1,imme寄存器或立即数00

6、0100rdrs1rs2add rd,rs1,rs2寄存器加寄存器00 0101rdrs1immeaddi rd,rs1,imme寄存器加立即数00 0110rdrs1rs2sub rb,rs1 rs2寄存器减寄存器00 011100 100000 1001rdrdrdrs1rs1rs1immeimmeimmesubi rd,rs1,immeload rd,immme(rs1)store rd,imme(rs1)寄存器减立即数从存储器读数据向存储器写数据00 101000 101100 1100dispdispdispbne dispbeq dispbranch disp结果非0时转移结果为0

7、时转移无条件转移 这些指令执行时用到的主要功能部件和它们所需的时间如下: 指令存储器和数据存储器:10ns;ALU和地址加法器:10ns;寄存器堆:5ns;假定其它部件,如PC寄存器、多路器、控制部件等花费的时间为o。表62列出了各指令执行时所需要的时间。 表6.2 各类指令执行时所需要的时间 ns10510105ALU指令指令存储器寄存器堆ALU寄存器堆30load指令指令存储器寄存器堆ALU数据存储器寄存器堆40store指令指令存储器寄存器堆ALU数据存储器35转移指令指令存储器加法器(10)20在设计非流水线单周期处理机时,定义时钟周期长度要以执行时间最长的指令为基准。以上的指令系统中

8、,load指令执行时间最长,需要40ns,因此我们定义时钟周期长度为40ns。在5章中,我们也描述了非流水线多周期处理机的设计。它的时钟周期定义为10ns。在这种情况下,ALU指令的执行用4个时钟周期,load指令用5个时钟周期,store指令用4个时钟周期,转移(无条件转移和条件转移)指令用2个时钟周期。假设流水线处理机的时钟周期也定义为10ns,流水线级数是5级。这意味着有5条指令能被同时执行。表63列出了使用流水线技术后指令执行所需要的时间。表63 使用流水线技术后指令执行所需要的时间 ns1010101010ALU指令指令存储器寄存器堆ALU寄存器堆50load指令指令存储器寄存器堆A

9、LU数据存储器寄存器堆50store指令指令存储器寄存器堆ALU数据存储器40转移指令指令存储器加法器203种处理机的指令执行时序如图61所示。其中,IF代表取指令,ID代表指令译码及读寄存器操作数,EXE代表ALU指令操作及存储器有效地址计算,MEM代表存储器访图6.1 3种处理机执行时序比较(a)单周期;(b)多周期;(c)流水线问,WB代表结果写回寄存器。从流水线处理机的时序中可以看出,每个时钟周期处理机取出一条指令加以执行。 在流水线处理机和非流水线多周期处理机设计中,一个时钟周期要能容下所有类型的功能部件中所需时间最长的部件的执行时间。我们把时钟周期定义为10ns。尽管读写寄存器堆只

10、需5ns,也仍然要分配给它一个整个周期。对于非流水线多周期处理机来讲,与单周期处理机相比,它加长了指令的执行时间。例如,执行load指令时,单周期处理机用40ns,而多周期处理机需要5个时钟周期,即50ns。50ns过后,开始执行下一条指令。流水线处理机也是这样。单看一条指令的执行,也要5个时钟周期。但是,这对流水线处理机的性能影响很小。这是由于流水线处理机性能提高的关键在于每个时钟周期都能启动一条指令的执行。 若流水线级数为m,总共执行n条指令,则所需总的时钟周期数为m+n一1。因此流水线处理机平均每条指令所需的准确的时钟周期数为例如,当n1,n5时,CPI+5,它与非流水线处理机是一样的。

11、但当”很大时,例如n=100 000,则CPIp=100 004100 0001,m的影响可以忽略不计。这就是我们前面所说的流水线处理机中单条指令执行时间变长将对性能造成很小影响的原因。从本章后面的讨论中,我们会发现,它也影响流水线处理机控制电路的设计,主要体现在解决流水线处理机所固有的数据相关的问题变得更复杂了。因此在设计流水线处理机时我们应考虑的问题有两个,一个是缩短单条指令的执行时间,另一个是提高流水线处理机的吞吐率。应该说后者更重要一些。 流水线技术的好处在于它既能把指令间的操作并行性充分发挥出来,同时又不对用户编程提出新的要求,即它对用户来讲是“透明的”。本章随后的几节将讨论如何实现

12、我们所定义的指令系统的流水线操作,介绍流水线技术所带来的问题,以及描述为解决这些问题所采取的方法。62 流水线处理机的数据路径 流水线处理机是比较难于理解的。我们将通过具体的例子,对它的工作原理及工作过程作较为详细的描述。6.2.1 流水线级 图62给出的是我们在5章中描述过的非流水线单周期处理机的组成结构。我们把执行指令的过程分为5部分,使其能够按流水线方式执行指令。分成5部分的意思就是同时可重叠执行的指令为5条,即5级流水线。每一级所使用的名字及其要完成的动作如下:(1)IF(instruction fetch)取指令;(2)ID(instructiondecode)指令译码并读寄存器操作

13、数;(3)EXE(execution)执行;(4)MEM(memoryaccess)存储器访问;(5)WB(write back)写回。图62 把单周期处理机的指令执行分为5级 如图中的箭头方向所示,指令执行时从左移向右通过电路。但有两处从右向左的例外:一处是WB级,它把运算结果写回中间靠左位置的寄存器堆中;另一处是IF级,它把经过计算的下一条指令的地址写入程序计数器PC中。下一条指令地址的计算方法有两种,一种是当前PC加1,另一种是当前PC加字地址偏移量,偏移量在指令中定义出。 流水线处理机的最大特点是每一个时钟周期取出一条指令来执行。所有的指令按取出的先后次序通过图62中的从左至右的数据路

14、径。依照指令类型的不同,每种指令在执行过程中可能会用到数据路径的不同的部分。例如,图63中画出的是处理机连续执行load指令时所要使用的数据路径中的功能部件。load指令实际上是使用功能部件最多的指令。 图63中,IM(instruction memory)代表指令存储器。在第一级,IF级,指令计数器PC中的内容作为访问IM的地址,送到IM的地址输入端。第二级中,REG(register file)代表寄存器堆或者指令中立即数的扩展。load指令访问存储器时所使用的地址由下面两个数据相加得到,一个数据是寄存器操作数,另一个数据是经符号扩展的立即数。第三级的ALU做算术逻辑运算。针对load指令

15、来讲,ALU完成加法运算。第四级中,DM(data memory)代表数据存储器。存储器数据将在这一级中被读出。存储器的地址输入就是ALU计算出的结果。在第五级,从存储器中取出的数据被写回到寄存器堆中。这一级中的REG就是第二级中的REG。第二级读REG,第五级写REG。在单周期处理机中,如果一条指令还没有执行完毕,PC的内容不会改变。这就使得在图63 流水线处理机连续执行load指令时的情形一条指令的整个执行过程中,IM始终输出当前指令。与单周期处理机不同,流水线处理机每个时钟周期都要取出一条指令。这意味着,当流水线处理机已从存储器取出一条指令并把它送到ID级去译码时,下一条指令也正在从存储

16、器中取出。如果先取出的指令没被保存,则它后面正在被取出的指令会对它造成影响。也就是说,我们必须要使用寄存器来保存从存储器取出的指令。推而广之,我们必须要在流水线的各级之间安排一组寄存器,用以保存当前时钟周期运算出的结果,以便为下个周期使用(我们只能使用触发器寄存器,它把时钟上升沿时数据输入端的信息打人寄存器中;而不能使用锁存器,因为锁存器的输出在时钟高电平时跟随输入的变化而变化。有关触发器与锁存器的区别,见2章中的描述)。我们称这些寄存器为流水线寄存器。从广义上讲,如果把非流水线单周期处理机执行一条指令的整个过程看作是流水线处理机的一级的话,PC则相当于流水线寄存器,在该级的执行还没有完成时,

17、不应该改变这个寄存器的内容。由此,我们能够初步设想出流水线处理机应有图64所示的结构。 我们可以很自然地把PC作为一个特殊的流水线寄存器来看待,因为在非流水线处理机中PC也是需要的。由于流水线处理机每个时钟周期都从指令存储器取出一条指令,它的值在每次周期结束时都将被改变。程序不发生转移时,PC加l;转移时,PC加符号扩展的偏移量。图中的DSE(displacement sign-extend)表示对指令字偏移量进行符号扩展。在第一级与第二级之间,我们使用了一个被称为IR(instruction register)的指令寄存器。对于字长为32位的处理机来讲,PC一般有30位,它存放的是32位指令

18、的字地址。1只有32位,用来存放一条指令。第二和第三级之间需要较多的寄存器。首先,从寄存器堆中读出的两个32位数据A和B必须要保存。再者,经符号扩展后的32位立即数I也要保存。图中的ISE(immediate sign-extend)代表指令中立即数的符号扩展。一般的ALU操作指令,要么是A与B操作,要么是A与I操作。我们能不能增加一个多路器而省去B或I寄存器,只使用一个32位寄存器呢?答案是否定的。原因出在store指令上。store指令同时使用A,B和I。A和I用来计算存储器地址,B用来保存写入存储器的数据。在流水线处理机中,这些数据必须要。在一个时钟周期中同时产生,以保证不引起资源冲突。

19、还有一个d寄存器,它被用来保存目的寄存器号;因为指令的操作结果要在WB级写入寄存器堆,目的寄存器号也要在那时使用,因此必须要同步跟随过去。图64 流水线处理机每级之间的流水线寄存器 第三级和第四级之间除了d之外,还有2,R和S。2用于存放ALU的一位ZERO标志。当ALU指令的运算结果为全0时,ZERO输出1,否则输出0。在执行条件转移指令时,Z用来决定是否真正转移。R保存32位ALU运算结果。S专为store指令而设,用来存放要被写入存储器中的数据。 第四级和第五级之间的寄存器如下:D存放load指令从存储器中读出的数据;C只是保存前一级的R,即ALU指令的结果。这一级d寄存器的输出用于指定

20、目的寄存器,D或C的数据要被写入由d所指定的目的寄存器中。我们不妨把寄存器雄看作是最后一级流水线寄存器。下面我们描述每级流水线的操作。622 流水线各级的操作 1IF级在第一级(取指令级)(图65)处理机使用PC的内容访问指令存储器,取出指令,并在该级结束时,把指令打人1只寄存器。下一条指令的地址也在这一级计算出,并把它打人PC寄存器。新的PC的计算有两种情况:程序不发生转移时,新的PC地址由当前PC值加1得到(1是指令字偏移量,相当于字节地址偏移量的4),即指向下一条顷序的指令;发生转移时的情况比较复杂,我们将在后面进行描述。图65 流水线第一级取指令级 2ID级指令译码级(图66)有两件事

21、情要做:第一件是数据路径要完成的工作,主要是从寄存器堆中读寄存器操作数和对指令中的立即数部分进行符号扩展;第二件工作由控制部件完成。控制部件根据指令操作码OPCODE,产生所有的控制信号。有关控制信号如何产生的问题,我们将在下一节描述。正如前面提到的,目的寄存器号要保存在流水线寄存器中,以便在WB级指定把结果写入哪一个寄存器中。寄存器堆A2输入端前面的多路器为store指令而设。不是store指令时,多路器选择指令中的rs2;是store指令时,多路器选择指令中的rd。转移指令将在本级结束,我们稍后再详细讨论它。图66 流水线第二级指令译码级 3EXE级执行级(图6?)的工作均由ALU来做。A

22、LU运算类型的指令将在本级由ALU计算出结果,并把它打人R寄存器。同时,ALU的ZERO输出也被打人Z寄存器。ALU的两个操作数,一个来自于寄存器rsl,它在前一级已被打人流水线寄存器A中了;另一个可能是寄存器rs2操作数(流水线寄存器B中的内容),也可能是立即数(流水线寄存器I中的内容)。load和store指令要在本级中计算存储器地址(ALU做加法)。两个源操作数一个来自于A,一个来自于I。若是store指令,B的内容将被打人流水线寄存器S。图6.7 流水线第三级一一执行级 4MEM级存储器访问级<图68)专为10adstore指令而设。两条指令均使用流水线寄存器R的输出作为访问存储

23、器的地址。store指令把S中的内容写入存储器。10ad指令读存储器,并把读出的数据打人流水线寄存器D。ALU指令在本级所做的事情就和移位寄存器一样,简单地把R的内容打人C。图68 流水线第四级存储器访问级 5WB级 写回级(图69)把指令结果写回到寄存器堆。目的寄存器由从ID级一直传递过来的目的寄存器号指定。要写入的数据来源有两个,一个是流水线寄存器D中的内容,即存储器数据;另一个是流水线寄存器C的内容,即ALU指令的计算结果。图69 流水线第五级写回级图610 ALU指令执行时用到的流水线数据路径我们把ALU运算类型的指令、1。ad和store指令执行时用到的流水线数据路径分别在图610、

24、图611和图612中给出。图6.11 load指令执行时用到的流水线数据路径图6.12 store指令执行时用到的流水线数据路径63 流水线处理机的控制通过阅读第5章,我们已经学会了如何设计非流水线处理机的控制部件。为非流水线多周期处理机设计控制部件时,有两种方法可供我们选择使用,一种是有限状态机的硬布线方法,另一种是微程序控制方法。虽然流水线处理机也是多周期处理机,但是,由于多条指令的重叠执行,使得我们很难描述某个时钟周期处理机到底处在何种状态,因为有太多的不同指令间的组合情况。微程序控制方法也会遇到类似的问题,因为它终究是按一条条指令顺序执行的思路来设计的。631 算术操作和存储器访问控制

25、 实际上,我们可以借鉴非流水线单处理机控制部件的设计方法。首先,让我们通过下面程序的例子,研究流水线处理机多条指令重叠操作的过程,然后依此设计出它的控制部件。 addi rl, r2, 4 ;r1r1十4 load r2, 100(r3) ;r2memoryr3+100 sub r4, r5, r6;r4r5一r6 , add r7, r5, r6;r7r5+r6 store r8, 200(r9) ;memoryr9+200r8 subi r10,r10,1 ;r10r10一1以上的例子比较简单,指令之间没有任何数据相关。注意,在注释一列,我们采用了简单的表达方式。例如,第一条指令addir

26、l,r2,4完成的操作是读取寄存器r2的内容,把它加上4,结果写回寄存器r1。比较合适的表达方法应该是rl一(r1)+4。其它的也是一样,如loadr2,100(r3),应写成r2一memory(r3)+100的形式,即寄存器r3的内容加100,得到存储器的有效地址,用它访问存储器,从地址指定的单元读出数据,再把数据写人寄存器r2。store指令完成的操作与load相反,这时的r8不是目的寄存器,而应看作是源寄存器。它的内容要被存放到存储器中,其地址由寄存器r9的内容加200得到。 程序的执行时序图用图613(a)的图形方式画出。横坐标表示时间,纵坐标从上到下表示指令的执行次序。这里还有另外一

27、种图形表示方法,如图613(b)所示。横坐标依然是时间,但纵坐标是流水线的级,从上至下为IF,ID,EXE,MEM和WB。一条指令执行的5级按从左上至右下标出,即时钟周期增1(向右),流水线前进一级(向下)。这种表示方法虽然不太直观,但它的好处是只要5行就够了,不像图613(a)那样,无限制的向右下方向延伸过去。以下我们按顺序描述每个周期流水线数据路径的操作以及所需的控制信号。注意,前4个周期,指令还没有充满流水线。从第五个周期开始,指令充满流水线。但由于例子中总共只有6条指令,从第七个周期开始,不再有新的指令被取采。随着指令不断地完成执行,流水线将在第11个周期完全变空。在实际的计算机系统中

28、,处理机总是能取到指令来执行。当没有用户程序时,处理机转去执行操作系统程序。1第一个时钟周期(图614)图614 程序例子执行时的第一+gl期 假设第一条指令的地址为0。如果我们采用字节编址的话,则后续指令的字节地址依次为4,8,12,16,20。图中左上角的1是字偏移量,它相当于字节偏移量的4。为了叙述的方便,这里我们使用字地址。例中的6条指令地址分别为0,l,2,3,4,5。第一个时钟周期是第一条指令的IP级。PC输出0,从存储器取出第一条指令addirl,r2,4。同时,地址加法器前面的多路器选择1,与当前PC值相加,得到字地址l,即下一条指令的地址。在该周期结束时,时钟的上升沿把取出的

29、指令五条件地写人指令寄存器IR。同时也把1写入PC。我们定义多路器的选择信号为BTAKEN(branchtaken),其意义为转移发生。当它为1时,多路器选择经符号扩展的偏移量,与当前PC值相加,加法器输出转移地址。由于本例中没有转移指令,因此转移总也不发生,即BTAKEN0。 第一个时钟周期结束后,即刚进入第二个周期时,PC输出1;IR输出第一条指令addi rl, r2, 4。 2第二个时钟周期(图615)这时第一条指令进入ID级,第二条指令进入IF级。两条指令的操作在各自的级同时进行:图615 程序例子执行时的第二个周期 (1)处在ID级的第条指令addirl,r2,4完成译码操作,并根

30、据指令格式中各字段的值,对立即数部分做符号扩展,从寄存器堆中读出两个寄存器¨和r4的内容。在本周期结束时,把上述3个数分别写入流水线寄存器I,A和B中。实际上,寄存器r4的内容不被使用。这个4来自于立即数中的4,因为它们在指令格式中处在相同的位置。也就是说,把寄存器r4的内容打入B中做的是无用功。但这没关系,因为下个周期不使用它。这样做的原因是为了简化控制电路,即流水线寄存器不要求配置写使能端了(以下,如果数据不被使用,我们不再描述它)。目的寄存器号也被打人流水线寄存器d,以备在WR级用它来指定目的寄存器,向其中写入操作结果。寄存器地址A2输入端前面的多路器选择指令格式中的rs2字段

31、或者rd字段。选择端的名字定义为SST(selectstore)。当指令译码时发现是store指令,SST1,选择rd,否则SST0,选择rs2。本例中不使用第二个寄存器操作数i因此SST是什么都没关系。 (2)与此同时,与前面描述的·样,从存储器取出第二条指令loadr2,100(r3),在周期结束时打人IR。BTAKEN0,把2(PC+1)打人PC。 第二个时钟周期结束后,即刚进入第三个周期时,PC输出2;IR输出第二条指令loadr2,100(r3);I输出32位的4,A输出寄存器r1的内容,d输出l(目的寄存器是r1)。 3第三个时钟周期(图616) 这时第一条指令进入EXE

32、级,第二条指令进入ID级,第三条指令进入IF级。3条指令的操作在各自的级同时进行: (1)处在EXE级的第,条指令add rl,r1,4由ALU完成加法操作。多路器的选择信号SIMM(select immediate)为1,意为选择立即数。ALU的两个源操作数分别来自流水线寄存器A和I。ALU右端的流水线寄存器d,R,S被五条件地打人数据,而只有当指令为ALU运算类型时,写使能信号WZ1,才把ALU的ZERO输出打人一位流水线寄存器Z。这是因为并不是所有的指令都修改Z标志寄存器。(2)处在ID级的第二条指令loadr3,100(r2)完成译码、立即数符号扩展以及读寄存图616 程序例子执行时的

33、第三个周期器操作。SST0,选择rs2。在本周期结束时,把32位的100和r2的内容分别写人流水线寄存器I和A。目的寄存器号3也被打人流水线寄存器d,以备在WR级用它来指定目的寄存器r3,向其中写入从存储器取来的数据。 (3)PC输出2,从存储器取出第三条指令sub r4,r5,r6,在周期结束时打人IR。BTAKEN二0,周期结束时把3打人PC。 第三个时钟周期结束后,即刚进入第四个周期时,PC输出3,指向第四条指令;IR输出第三条指令subr4,r5,r6;I输出32位的100,A输出寄存器r3的内容(第二条指令);R输出第一条指令的加法结果。4第四个时钟周期(图617)图617 程序例子

34、执行时的第四个周期这时第一条指令进入MEM级,第二条指令进入EXE级,第三条指令进入ID级,鲜四条指令进入IF级。4条指令的操作在各自的级同时进行:(1)R的内容直接传递到C。(2)处在EXE级的第二条指令loadr3,100(r2)由ALU计算存储器地址。多路器的选择信号SIMM1,选择立即数。ALU的两个源操作数分别来自流水线寄存器A和I。WZ0,不打人流水线寄存器Z。(3)处在级的第三条指令subr4,r5,r6完成译码、立即数符号扩展以及读寄存器操作。SST0,选择rs2。在本周期结束时,寄存器r5和r6的内容分别写入流水线寄存器A和B。目的寄存器号4也被打人流水线寄存器d,以备在WR

35、级用它来指定目的寄存器r4,向其中写入减法操作的结果。(4)PC输出3,从存储器取出第四条指令add r?,r5,r6,在周期结束时打人IR。BTAKEN0,周期结束时把4打入PC。第四个时钟周期结束后,即刚进入第五个周期时,PC输出4,指向第五条指令;IR输出第四条指令addr7,r5,r6;A和B分别输出寄存器r5和r6的内容<第三条指令);R输出存储器地址(第二条指令);C输出第一条指令的加法结果。5第五个时钟周期(图618)图618 程序例子执行时的第五个周期这时指令充满流水线。第一条指令进入WB级,第二条指令进入MEM级,第三条指令进入EXE级,第四条指令进入ID级,第五条指令

36、进入IF级。5条指令的操作在各自的级同时进行:(1)第一条指令处在WB级。这时,d输出1(接到寄存器堆的AD端)。寄存器写使能信号WREG(writeregmterfile)为1。多路器的选择信号SLD(selectload)为0,选择C输出,即把加法结果写入寄存器堆的r1寄存器。至此,第一条指令完成了它的执行,退出流水线。(2)处在MEM级的第二条loadr2,100(r3)访问存储器。周期结束时把取来的存储器数据写入D。(3)处在EXE级的第三条指令sub r4,r5,r6由ALU做减法。多路器的选择信号 SIMM0,选择寄存器操作数。ALU的两个源操作数分别来自流水线寄存器A和B。WZ1

37、,把ALU的ZERO输出打人流水线寄存器Z。(4)处在ID级的第四条指令addr?,r5,r6完成译码及读寄存器操作。SST0,选择r6。在本周期结束时,寄存器r5和r6的内容分别写入流水线寄存器A和B。目的寄存器号7也被打人流水线寄存器d,以备在WR级用它来指定目的寄存器r4,向其中写入加法操作的结果。(5)PC输出4,从存储器取出第五条指令store r8,200(r9),在周期结束时打人IR。BTAKEN二0,周期结束时把5打入PC。第五个时钟周期结束后,即刚进入第六个周期时,PC输出5,指向第六条指令;IR输出第五条指令store r8,200(r9);A和B分别输出寄存器r5和r6的

38、内容(第四条指令);R减法结果(第三条指令);D输出第二条指令从存储器取来的数据。6第六个时钟周期(图619)图619 程序例子执行时的第六个周期这时指令仍充满流水线。第二条指令进入WB级,第三条指令进入MEM级,第四条指令进入EXE级,第五条指令进入ID级,第六条指令进人IF级。5条指令的操作在各自的流水线级同时进行:(1)第二条指令处在WB级。这时,d输出2。寄存器写使能信号WREG1。SLD1,选择D的输出,即把存储器数据写入寄存器堆的r2寄存器。至此,第二条指令也完成了它的执行,退出流水线。(2)处在MEM级的第三条addr7,r5,r6把R的输出直接传递到C。(3)处在EXE级的第四

39、条指令add r?,r5,r6由ALU做加法。多路器的选择信号SIMM0,选择寄存器操作数。ALU的两个源操作数分别来自流水线寄存器A和B。WZ;1,把ALU的ZERO输出打人流水线寄存器Z。(4)处在ID级的第五条指令storer8,200(r9)完成译码、立即数符号扩展以及读寄存器操作。注意,这时SST1,选择18。在本周期结束时,扩展的立即数200、寄存器r9和r8的内容分别写入流水线寄存器I,A和B。(5)PC输出5,从存储器取出第六条指令subi ri0,ri0,1,在周期结束时打人IR。BTAKEN0,周期结束时把6打人PC。第六个时钟周期结束后,即刚进入第七个周期时,PC输出6,

40、指向第七条指令;IR输出第六条指令subiri0,ri0,1;A和B分别输出寄存器r9和r8的内容,I送出32位的200(第五条指令);R输出加法结果(第四条指令);C输出第三条指令减法操作的结果。7第七个时钟周期(图6。20)图620 程序例子执行时的第七个周期本例中只有6条指令,实际上处理机继续执行其它指令,我们不再演示这些指令。第三条指令进入WB级,第四条指令进入MEM级,第五条指令进入EXE级,第六条指令进入ID级。这4条指令的操作在各自的级同时进行:(1)第三条指令subr4,r5,r6处在WB级。这时,d输出4。寄存器写使能信号WREG=1。SLD0,选择C的输出,即把减法结果写入

41、寄存器堆的r4寄存器。至此,第三条指令也完成了它的执行,退出流水线。(2)处在MEM级的第四条addr7,r5,r6把R的输出直接传递到C。(3)处在EXE级的第五条指令storer8,200(r9)由ALU计算存储器地址。多路器的选择信号SIMMl,选择立即数。ALU的两个源操作数分别来自流水线寄存器A和I。WZ0,不改变流水线寄存器Z。B的内容直接传递到S。(4)处在ID级的第六条指令subi rlO,f10,1完成译码、立即数符号扩展以及读寄存器操作。这时SST任意。在本周期结束时,扩展的立即数1和寄存器rlo的内容分别写入流水线寄存器1和A。第七个时钟周期结束后,即刚进入第八个周期时,

42、A和1分别输出寄存器r10的内容和立即数1(第六条指令);R输出存储器地址,S输出存储器数据(第五条指令);C输出第四条指令加法操作的结果。8第八个时钟周期(图621)图621 程序例子执行时的第八个周期 本周期中,第四条指令进入WB级,第五条指令进入MEM级,第六条指令进入EXE级。这3条指令的操作在各自的级同时进行: (1)第四条指令add r7,r5,r6处在WB级。这时,d输出?。寄存器写使能信号WREG1。SLD0,选择C的输出,即把加法结果写入寄存器堆的r7寄存器。至此,第四条指令也完成了它的执行,退出流水线。 (2)处在MEM级的第五条store r8,200(r9)把S的输出写

43、入由R指定的存储器单元。 (3)处在EXE级的第六条指令subiri0,r10,1由ALU做减法。多路器的选择信号SIMM:1,选择立即数。ALU的两个源操作数分别来自流水线寄存器A和I。WZ1,改变流水线寄存器Z。 第八个时钟周期结束后,即刚进入第九个周期时,只有R输出减法结果,其它的均没有用。 9第九个时钟周期(图6,22) 本周期中,第五条指令进入WB级,第六条指令进人MEM级。这两条指令的操作在各自的级同时进行: (1)第五条指令store处在WB级。这时它什么也不做。实际上store指令在前一个周期已完成执行。 (2)处在MEM级的第六条指令subiri0,ri0,1把R的输出传递到

44、C。 第九个时钟周期结束后,即刚进入第十个周期时,只用C中的减法结果,其它的均没有用。 10第十个时钟周期(图623)第六条指令subirl0,r10,1处在WB级。这时,d输出10。寄存器写使能信号WREG1。SLD0,选择C的输出。即把减法结果写入寄存器堆的ri0寄存器。至此,第六条指令也完成了它的执行,退出流水线。第十个时钟周期结束后,所有的6条指令的执行均已完成。632 流水线转移指令控制到目前为止,我们讨论了ALU类型指令和存储器访问指令的流水线执行的情况。以下我们将讨论控制相关(contr01dependence)和转移指令在流水线处理机中的执行情况。转移指令改变程序的顺序执行次序,转向其它地址(称作转移目标地址,brallch target addTess)去取指令执行。转移指令包括条件转移和五条件转移两类指令。在我们定义的指令系统中,转移指令有bne disp 非0时转移(branch on not equal to zero) if,PC=PC+disp图622 程序例子执行时的第九个周期图623 程序例子执行时的第十个周期 beq disp 为0时转移(branch on equal to zero) if Z,PCPC+disp branch disp 为条件转移(uncondit

温馨提示

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

评论

0/150

提交评论