2-流水线处理机及其设计精讲

上传人:枫** 文档编号:487591010 上传时间:2023-06-20 格式:DOC 页数:22 大小:11.09MB
返回 下载 相关 举报
2-流水线处理机及其设计精讲_第1页
第1页 / 共22页
2-流水线处理机及其设计精讲_第2页
第2页 / 共22页
2-流水线处理机及其设计精讲_第3页
第3页 / 共22页
2-流水线处理机及其设计精讲_第4页
第4页 / 共22页
2-流水线处理机及其设计精讲_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《2-流水线处理机及其设计精讲》由会员分享,可在线阅读,更多相关《2-流水线处理机及其设计精讲(22页珍藏版)》请在金锄头文库上搜索。

1、633 流水线各级信号的产生 至此,我们已经描述过了所有3种指令类型的流水线操作。下面我们来总结控制信号的产生方法。控制信号分布在流水线处理机的各级,我们当然可以在它们要被使用的流水线级产生,例如SIMM可在EXE级产生。但这样,除了译码将会造成本级一些延迟之外,还要使用流水线寄存器来传递必要的信息,例如指令操作码等。我们采用的方法是,控制信号集中在ID级由译码电路产生,并使用流水线寄存器把每一个控制信号传递到它被使用的流水线级。我们把所有的控制信号归纳在表64中。表65列出了除了ALUOP的各控制信号的产生表达式。表66列出了ALUOP控制信号的产生表达式。 由以上表达式,我们可以有如图62

2、9所示的控制电路。图中使用了流水线寄存器来把控制信号传递到合适的流水线级。我们可以看出,流水线控制部件的设计方法与非流水线单周期处理机的控制部件的设计方法非常类似,而有限状态机和微程序的设计方法显得不太适合。表64 流水线各级控制信号的定义流水线级控制信号注释IF级BTAKEN转移发生ID级SST选择store(rd)EXE级SIMM选择立即数ALUOPALU操作码WZ写Z标志MEM级WMEM写存储器WB级SLD选择loadWREG写寄存顺堆表65 控制信号的产生表达式BTAKEN=branch+bne+beqZ SST=storeSIMM=andi+ori+addi+subi+load+st

3、ore WZ=andi+ori+addi+subi+and+or+add+subWMEM=store SLD=loadWREG=andi+ori+addi+subi+and+or+add+sub+load表6.6 ALU控制信号的产生表达式指令ALUOP1ALUOP0操作指令ALUOP1ALUOP0操作and00与andi00与or01或ori01或add10加addi10加sub11减subi11减load10加store10加ALUOPladd+addi+sub+subi+load+storeALUOPOor+ori+sub+subi图629 流水线处理机的数据路径和控制部件64 结构相关

4、及解决方法 流水线处理机的设计存在3个非常著名的问题(hazard)。它们是 (1)结构相关问题(structural hazard); (2)数据相关问题(data hazard); (3)转移相关问题(branch hazard)。 我们将在本节简要介绍第一个问题,下面两节分别介绍第二和第三个问题。结构相关(structural dependence)问题指的是,由于硬件资源不充足而导致流水线不畅通。我们将举3个例子来说明结构相关问题及其相应的解决方案。,第一个例子,也是最典型的例子,就是设想只为流水线处理机配备一个外部公共存储器模块。这在现代计算机系统设计中是常见的。它的好处是程序和数据

5、可以共享这个存储器模块,二者之间的界限是可以动态调整的。使用分开的两个外部指令存储器模块和数据存储器模块的计算机被称为具有哈佛(Harvard)结构的计算机。依程序类型的不同,有的需要较大的程序空间和较小的数据空间;有的则需要较小的程序空间和较大的数据空间。在这种情况下,哈佛结构的存储器不能被灵活、充分地利用。 然而,如果只采用一个存储器模块而不采取任何其它的措施,则会出现结构相关问题,造成流水线堵塞。图630示出了由于存储器端口资源的不充足而使取指令和loadstore指令访问存储器的动作不能同时进行。图630 单个存储器模块所造成的流水线堵塞 图630中的存储器模块只有一套访问端口。当lo

6、adstore指令访问存储器时,必须暂停取指令操作。当然也可以让取指令优先而暂停loadstore指令的存储器访问操作。然而,不管是哪一种情况,计算机的性能将会有很大的损失。那么,采用一个外部存储器模块的现代计算机是如何解决这个问题的呢?说起来很简单,如图631所示,在处理机内部,设置两个分开指令和数据的高速缓冲存储器(CACHE)。把存储器中经常使用的程序段和数据分别放在指令CACHE和数据CACHE中。访问CACHE命中时,处理机可直接从CACHE得到指令和数据,而不再访问外部存储器。有关CACHE的原理和结构,我们将在9章详细讨论。再举第二个例子。把ALU指令的WB级提前一个周期。由以前

7、的描述可知,ALU指令在EXE级结束时已把结果放在了流水线寄存器R,在MEM级不做任何运算,只是把它传递到流水线寄存器C,以便在WB级写入寄存器堆。我们可以把这样的数据路径加以改造,使ALU指令提前一个周期i即在通常的MEM级就把结果写入寄存器堆。如果load指令仍用5个周期,则势必在有的周期有两个数据要同时写入寄存器堆;而有的周期则没有一个数据要写入,见图6,32(a)。由于寄存器堆只有一个写端口,势必造成有些ALU写操作被延后。解决这个问题的方法有3种:第一种就是前面已经描述过的方法,即ALU指令也用5个周期;第二种是设计两个写端口的寄存器堆;第三种是改造load指令的格式,消除存储器地址

8、计算周期。办法是直接用一个寄存器操作数作为地址访问存储器,其指令格式形如loadrd,(fsl),即把由rsl指定的寄存器操作数拿来直接作为存储器的地址,把访问到的存储器数据写入寄存器rd,见图632(b)。这样做会带来一个额外的好处,这就是store指令可以有store(rsl),rs2之类的格式,即把寄存器rsl的内容直接作为存储器地址i把寄存器rs2的内容写入存储器,从而可以省去寄存器堆前面的多路器以及相应的控制信号SST。图631 分开的指令CACHE和数据CACHE使流水线畅通 第三个结构相关的例子是,如果store指令格式形如storerd,(rsl,rs2),而寄存器堆只有两个读

9、端口。寄存器rsl和rs2的内容相加得到存储器地址,寄存器rd的内容存入存储器。这样的store指令要求同时读出3个寄存器的内容。如果寄存器堆只有两个读端D,肯定要堵塞流水线。办法只有一个,设计一个带有3个读端口的寄存器堆,并在流水线处理图632用4个周期完成ALU指令(a),Load指令也用4个周期完成(b)机中为它配置3个流水线寄存器。还看很多其它类型的结构相关的例子,例如浮点除法器使用迭代的方法计算商,而每次迭代用相同的电路等,我们在此不一一列举。图6.32 用4个周期完成ALU指令(a),Load指令也用4个周期完成(b)65 数据相关及解决方法651 数据相关问题 上一节给出的例子中

10、,所有的指令都是不相关的,即任何条指令的源操作数都不依赖于其它指令的计算结果。本节讨论数据相关(datadependence)及解决方法。现在让我们来看看下面的程序例子: I1: add r1, r2, r3 I2: sub r4, rl, r5 I3: and r6, r7, r1 I4: Or r8, r1, r9 I5: addi r10,r1, 100I1指令把寄存器r2和r3的内容相加,结果存入寄存器r1。它下面的4条指令均与I1相关,即使用I1的结果,见图633给出的数据相关关系图。从图中可见是在每个周期结束时,由时钟上升沿把数据打人寄存器。在数据没被打人之前,任何从该寄存器读出的

11、数据都是过时的。图中的I2到I4的3条指令就属于这种情况,它们从r1寄存器读出的数据都是过时的,是不能使用的。15则没关系,当它读r1寄存器时,n已把结果写入。 为了减少数据相关指令的条数,我们让写寄存器堆的操作提前半个周期,即由时钟的下降沿打入。这样做是可行的,因为我们假定一个时钟周期是10ns,寄存器堆的访问只需要5ns。这样,数据相关的指令条数减至两条,见图634。下面我们讨论如何在流水线处理机中处理数据相关问题。我们将描述两种方法,一种图6.33 I1下面有3条指令不能从寄存器r1读出正确的数据图6.34 把WB提前半个周期,I1下面还有两条指不能从寄存器r1读出正确的数据是暂停相关指

12、令的执行(暂停流水线),直到能够正确读出寄存器操作数为止;另一种是采用专门的数据通路,直接把结果送到ALU的输入端(内部数据前推)。在描述这两种方法时,我们使用图634的方案,即把写寄存器堆提前半个周期。这时,我们只需考虑两条相关指令。下面以ALU指令为例,分别对两种方法加以描述,然后再讨论load指令同时使用这两种方法的情况。652 暂停数据相关流水线 暂停数据相关流水线指的是当数据相关出现时,暂时停止相关指令的执行,等到相关数据能从寄存器读出,再恢复执行。暂停流水线的两种表示方法见图635和图636。这里涉及到两个问题:一个是如何检测出数据相关,再一个是如何暂停流水线。以下我们对这两个问题

13、分别加以描述。 首先,让我们考虑数据相关如何用硬件电路检测出来。参照本节开始给出的程序例子,I1写目的寄存器rd,I2和I3的源操作数是寄存器rsl或rs2中的数据,且它们的rsl或rs2与I1的目的寄存器号rd相等时才有可能发生数据相关,因此,硬件电路中要有比较器。由于指令格式中源寄存器号rs2与立即数部分重叠,而立即数是不会出现相关的,因此,指令操作码必须要参与检测(区分是寄存器操作数还是立即数)。;另外,如例子中的I1指令,rd一定作为目的寄存器号使用,即结果是要被写入目的寄存器时,后面的指令才有可能与之相关。由于store指令也使用rd,但它不写寄存器,因此,WREG信号也应参与检测(

14、实际上,WREG也是从操作码中得出的)。我们把上述规则用表达式写出如下(它们是在ID级检测数据相关的表达式): DEPENA_DEPEN+B_DEPENA_DEPENEXE_A_DEPEN+MEM_A_DEPEN图635 停止相关指令的执行(表示方法1)图636 停止相关指令的执行(表示方法2) B_DEPENEXE_B_DEPEN+MEM_B_DEPEN EXE_A_DEPEN(1D_rslEXE_rd)(EXE_WREG1)(1D_rsllsReg) EXE_B_DEPEN(1D_rs2EXE_rd)(EXE_WREG1)(1D_rs21sReg) +(1D_rdEXE_rd)(EXE_WREG1)(store) MEM_A_DEPEN(1D_rslMEM_rd)(MEM_WREG1)(1D_nllsReg) MEM_B_DEPEN(1D_rs2MEM_rd)(MEM_WREG1)(1D_rs2IsReg) 十(1D_rdMEM_rd)(MEM_WREG1)(store) ID_rsllsRegand十andi十or十ori十add十addi十sub十subi十load十store ID_rs2IsRegand十or十add十sub 由于一条指令中的两个源操作数都可能与上一条指令的目的操作数相关,因此总的数据相关DEPEN由A_DEPEN和B_D

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号