计算机流水线处理机及其设计.doc
《计算机流水线处理机及其设计.doc》由会员分享,可在线阅读,更多相关《计算机流水线处理机及其设计.doc(23页珍藏版)》请在三一办公上搜索。
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、图611
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 流水线 处理机 及其 设计

链接地址:https://www.31ppt.com/p-2393412.html