文档详情

2016-第3章-3-增加内容流水线处理器设计.ppt

发布:2017-05-26约2.16万字共123页下载文档
文本预览下载声明
   条件转移指令要判断Z标志是否能用。若Z标志还没有准备好,则还要暂停流水线一个时钟周期(类似数据相关暂停),但由于转移指令只可能改变PC而不改变其它状态,因此用不着封锁WZ,WMEM,WREG(对转移指令来讲,这些信号原本就为0)。   如果处在ID级的是条件转移指令,而且处在EXE级的是ALU类型的指令(就要写Z标志到流水线寄存器Z了),则要等到ALU指令写完Z后,再判断转移与否,为此要暂停一个周期。 条件转移指令与无条件转移指令有所不同(除了转移时废弃紧接其后的指令外): 需要判断Z标志 根据Z决定转移还是不转移 * sub r1,1 sub r1 bne stall Zero? add or i r2,15 or r3 r2,1r3 add r5 Subi r1 , r1 , 1 Bne loop Ori r3 , r2 , 15 Loop : add r5 , r2 , r3 转移时,废弃该指令 WIR=WPC= =   EXE_instIsALU表示处在EXE级的是ALU指令。我们使用EXE_WREG来产生它,除了load指令,凡是向寄存器堆写结果的指令都是ALU类型的指令。图1.43给出了这部分的控制电路。 * 暂停逻辑条件: 图1.43 判断Z标志相关并暂停流水线 * 三、假定转移不发生(针对条件转移)  假定转移不发生(猜测)的思想是流水线按猜测转移不发生运行,具体是把紧接转移指令后的指令打入IR: * 如果转移不发生,则让它继续执行; * 如果转移成功,则废弃它的执行。 图1.44 猜测不转移 转移没有发生 * 问题的关键是如何在猜测不成功(转移发生)时终止指令的执行。 指令执行的效果:改变处理机的状态、寄存器堆和存储器的内容。如果: * 在EXE级结束之前,清除WZ; * 在MEM级结束之前清除WMEM; * 在WB级结束之前清除WREG 就不会对处理机和存储器产生任何影响。 因此,转移发生时,需要,产生一个控制信号以控制终止紧接转移指令的下条指令执行。 *   在我们的流水线处理机中,转移成功与否,在转移指令的ID级就已明了: * 无条件转移指令,在ID级知道肯定转移; * 如果没有采用条件转移硬件暂停,则编译器会加nop, 如: sub r1, r1, 1 nop bne ok ;本指令在ID级根据Z知道是否转移 * 如果采用了前面的条件转移暂停技术,由于条件转移指令在ID级暂停一个时钟周期等待Z标志,因此也能在ID级确定转移是否发生。 BTAKEN = bne Z+beq Z+branch 因此,ID级产生的转移发生逻辑条件: *   把ID级产生的转移发生条件(BTAKEN,转移成功时为1)打入流水线寄存器,以便在下一个周期使用。下一个周期恰好是紧接转移指令的后一条指令的ID级,就可以利用BTAKEN通过与门来清除前面提到的3个写信号。 * 不转移时,BTAKEN=0,不封锁,让其后指令继续执行(图1.44)。 * 发生转移时,BTAKEN=1,封锁其后的写信号。 *   如果程序执行时,如果条件转移指令占13%,条件转移成功和条件转移不成功各占1/2,则与总是浪费一个周期的方法相比,猜测执行的方法可以节省1/2 X 13%=6.5%的周期。其加速比为1/(1-0.065)=1.07,或者说,提高效率7%。 图1.44 猜测不转移 转移没有发生 BTAKEN = bne Z+beq Z+branch * BTAKEN 打入流水线寄存器 例1: 如果模型机只采用软件方法处理控制相关,则编译器应该在条件转移指令前后加nop指令,无条件转移指令后加nop。如: sub r1, r1, 1 nop bne ok nop add r2, r2, r3 …… 0k: or …… branch L1 nop sub r3, r4, r5 …… L1: and r6, r7, 10 * 例1: 如果模型机只采用假定转移不发生方法,则编译器应该在条件转移指令前加nop指令。如: sub r1, r1, 1 nop bne ok add r2, r2, r3
显示全部
相似文档