资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,经典的MIPS五级流水介绍,三种MIPS核心指令,1 算术逻辑运算指令(ALU instruction),2 存储指令(load or store instruction),3 分支指令(branch instruction),三种指令格式:,op,rs,rt,rd,shamt,funct,R型,I型,op,rs,rt,constant or address,J型,op,address,五种寻址模式:,1),寄存器寻址,,操作数是寄存器,2),基址或偏移寻址,,操作数在内存中,其地址是指令中基址寄存器和常数的和。,3),立即数寻址,,操作数是指令中的常数.,4),PC相对寻址,,地址是PC计数器和指令中常数的和。,5),伪直接寻址,,跳转地址是指令中26位和PC计数器的高位相连而成,五种MIPS寻址模式的图示:,1.立即数寻址,op,rs,rt,immediate,2.寄存器寻址,op,rs,rt,rd,funct,寄存器,3.基址寻址,op,rs,rt,address,寄存器,半字 字,内存,字节,五种MIPS寻址模式的图示:,4.PC相对寻址,op,rs,rt,address,PC,字,5.伪直接寻址,op,address,PC,.,字,内存,通常,一条MIPS指令包含的五个处理步骤:,1)从存储器中读取指令。,2)指令译码的同时读取寄存器。MIPS的指令格式允许指令译码和读取寄存器同时进行。,3)执行操作或地址计算。,4)在数据存储器中读取操作数。,5)将结果写回寄存器堆。,利用流水线实现MIPS指令,流水线,是一种可以降多条指令的执行过程相互重叠的实现技巧。,理想情况下,流水线化带来的加速比是流水线的级数。,流水线所带来的性能提升是通过提高指令的吞吐率来实现的,单挑指令的执行时间并没有减少。,流水线的三种冒险,结构冒险,即硬件不支持多条指令在同一时 钟周期内执行。,数据冒险,在一个操作必须等待另一个操作完成后才能进行时,流水线必须停顿,我们称这种情况为数据冒险。,控制冒险,处理器需要根据一条指令的结果做出决策,此时其他的指令可能仍在执行过程中。,五级流水线的数据通路,把指令划分为五个阶段意味着这是一个五级流水线,任意一周期内,最多五条指令在执行。,把数据通路也划分为五个部分,每部分用相应的阶段命名。,1)IF:取指令。,2)ID:指令译码,读寄存器堆。,3)EX:指令执行或地址计算。,4)MEM:数据内存访问。,5)WB:写回。,五级流水线的数据通路,五条指令对应的多时钟周期流水线图,传统表示方式下多周期流水线图,单周期数据通路图,引入流水线寄存器,从之前的流水线数据通路图可以看出,数据通路需要的值都是从上一级寄存器中流入下一级中。,我们用被这些寄存器分开的两个阶段来命名它们,如IF和ID阶段之间的流水线寄存器叫做IF/ID。,引入流水线寄存器图,流水线每级的工作,流水线中的控制,一共9条控制线,根据流水线的五个步骤将控制线分为五组:,1)取指令:读取指令内存和写PC的控制信号总是确定的,没特别需控制的。,2)指令译码/读取寄存器:每个时钟周期内这个步骤所完成的工作都是相同的,不需设置控制线。,3)指令执行/地址计算:设置的控制线有RegDst、ALUOp和ALUSrc。根据这些信号选择结果寄存器,确定ALU的操作,同时读取数据2或经过符号扩展后得到的立即数。,4)内存访问:设置的控制线有Branch、MemRead和MemWrite,这些控制信号分别由相等分支、取和存指令设定。除非控制信号指示这是一条分支指令同时ALU输出为0,将选择线性地址中的下一条指令作为PCSrc信号。,5)写回:两条控制线分别是MemtoReg和RegWrite,前者决定是将ALU结果还是将内存数据传送寄存器堆,后者记录所要写入的数据。,信号名称,设为0时的效果,设为1时的效果,RegDst,写入寄存器的目标编号来自rt字段(20:16),写入寄存器的目标号来自rd字段(15:11),egWrite,无,将写入数据的输入写入至写入寄存器输入对应的寄存器,ALUSrcR,第二个ALU操作数来自第二个寄存器堆的输出(读出数据2),第二个ALU操作数为已符号化扩展的指令低16位,PCSrc,PC的值替换为计算PC+4的加法器的输出,PC的值置为计算分支目标地址的加法器的输出,MemRead,无,输入地址对应的数据内存的内容放置到读出数据的输出,MemWrite,无,输入地址对应的数据内存的内容替换为写入数据的输入,MemtoReg,ALU提供寄存器写数据的输入值,数据内存提供寄存器写数据的输入值,三种流水线冒险,结构冒险 如果由于资源争夺导致几条指令不能在同一时钟周期内执行,就称处理器中含有结构冒险。,阻塞(stall)也叫气泡(bubble),解决结构冒险的一种方式。,三种流水线冒险,数据冒险 一个操作必须等待另一个操作完成后才能进行时,流水线必须停顿,我们称这种情况为数据冒险。,转发(forward)也叫旁路(bypass)。上一个操作的结果产生以后不必写回寄存器,直接转发给下一条指令。可以消除部分数据冒险。,阻塞(stall)当一条指令试图读取一个寄存器而它前一条指令是load指令,并且该load指令写入的是同一寄存器时,必须采用相应的机制阻塞流水线。,三种流水线冒险,分支冒险 也叫控制冒险。每周期都取指令,但对与分支指令,必须等到MEM阶段才能确定是否执行分支。这种为了确定预取正确的指令导致的延迟叫做分支冒险。,静态预测 阻塞直到分支发生完毕的速度实在太慢。比较普遍的提高分支阻塞速度的方法是假设分支不发生,继续执行;或者假定分支发生,跳到转移地址执行。可以将分支冒险的代价减半。,动态分支预测 查找指令的地址观察上一次执行该指令时分支是否发生,如果上次执行时分支发生就从上次分支发生的地方开始取指令。一种实现方法是采用分支预测缓存或分支历史表。,缩短分支的延迟 在流水线中提早分支指令的执行过程,就能减少需要清除的指令数,可以降低执行分支的代价。,异常,异常(exception)是控制冒险的另一种形式。,MIPS流水线中可能发生的异常。,异常处理 可以采用与发生分支时同样的基址,清除异常后面的所有指令并且从一个新的地址开始预取指令。,许多异常要求我们最终完成那条产生异常的指令,就像没有异常一样。最简单的方法就是将这条指令消除掉,进而在异常处理的地方将这条指令重新执行一次。,异常处理的最后一步将导致异常的指令的地址保存到异常程序计数器(EPC)中。,Thanks,
展开阅读全文