计算机体系结构第3章修改2.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
更正工作过程演示中的提示,第一条和第四条指令之间在停顿前就不需要定向,更谈不上停顿后的定向。即插入暂停后,“不需要定向”的说法是错误的。 * 该例中,DADD Ra,Rb,Rc 与SD Ra,A指令产生写后读冲突,但不需要停顿,直接在MEM段定向即可,即DM输出直接定向到下一拍的DM输入。但是经过调度后,刚好不需要定向,因为二者中间插入一条指令。但程序的最后两行指令需要定向。 * 教材P80中图3.26仅仅描述了分支成功的情况。而本图中包含了成功和不成功两种情况,无论分支是否成功,在第五拍都要重新取指令,如果分支成功取到的就是分支目标地址指令,如果分支不成功取到的就是后继顺序的下一条指令。 * 此方法可以将分支延迟降低,如果分支失败,则无延迟,如果分支正确则延迟一个周期,即在程序中如果分支失败的概率占X(X=1),则分支延迟降低为X*0+(1-X)*1=1-X * 下页表中,“必须保证在分支失败时执行被调度的指令不会导致错误。”语句的含义是,从目标处调度时,如果后续语句中有用到R4的值则不可以放入延迟槽,因为如果分支不成功却执行了R4值得修改,此时会导致使用R4值得指令结果错误。 同理,从失败处调度也是要防止此种情况的发生。 但是可以在预测错误时,在第三拍就放弃延迟槽的执行,这样就可以避免R4值被修改的可能。 * 与幻灯片142页的图很类似,唯一区别是142页的图中第二条指令是后续的顺序指令,而此图的第二条指令是延迟槽中的指令,此指令按照不同的调度方法有可能是目标处也可能是顺序的后续指令。 * 这里的等于0转移是指指令字中的rs寄存器中的值=0作为转移的条件。 * IF:Instruction Fetch,取指。从指令缓存(I-Cache)中获取下一条指令。 * ?ID(RD):Instruction Decode(Read Register),译码(读寄存器)。翻译指令,识别操作码和操作数,从寄存器中读取数据到ALU输入寄存器。 ?EX(ALU):Execute,执行(算术/逻辑运算)。在一个时钟周期内,完成算术或逻辑操作。注意,浮点算术运算和整数乘除运算不能在一个时钟周期内完成。 此阶段没有R-M和M-M型ALU指令,是因为RISC结构采用的是R_R型,即只有Load和Store指令可以访问存储器。 IR是指令寄存器,是MIPS实现中的一个临时寄存器,用来存放当前正在处理的指令。 * ?MEM:Memory Access,内存数据读或者写。在该阶段,指令可以从数据缓存(D-Cache)中读/写内存变量。平均来说,大约四分之三的指令在这一阶段没有执行任何操作,为每条指令分配这个阶段是为了保证同一时刻不会有两条指令都访问数据缓存。 注意,此时的Load指令只是从存储器输出数据到两个段中间连接的流水寄存器中,而不是到目的寄存器tR。 * WB:Write Back,写回。操作完成后,将计算结果从ALU输出寄存器写回到通用寄存器中。 ALU指令虽然在第四个周期不参与操作,但是也要保留第四周期,等待进入第五个周期才能运行,所以也需要五个周期才能完成。 * 注意:此图只是实现MIPS指令的数据通路,而不是流水线,改造成流水线后还需设置流水寄存器。 * 3.5 流水线的实现 3.5 流水线的实现 流 水 段 分 支 指 令 操 作 IF ID EX IF/ID.IR ← Mem[PC]; IF/ID.NPC, PC ← (if(( IF/ID.IR [op]= =branch)((Regs[IF/ID.IR[rs]] = = 0)) {IF/ID.NPC + (IF/ID.IR16)16 ## (IF/ID.IR16..31 2)} else {PC+4}); ID/EX.A ←Regs[IF/ID.IR[rs]]; ID/EX.B← Regs[IF/ID.IR[rt]]; ID/EX.IR ← IF/ID.IR; ID/EX.Imm ← ( IF/ID.IR16 )16 ## IF/ID. IR16..31; MEM WB 改进后流水线的分支操作 流水段 改进前流水线的每个流水段的操作 所有指令类型 IF ID IF/ID.IR ← Mem[PC] IF/ID.NPC, PC ← (if(( EX/MEM.IR[op] == branch ) EX/MEM.cond){EX/MEM.ALUo} else {PC+4}); ID/EX.A ← Regs[IF/ID.IR[rs]];ID/EX.B ← Regs[IF/ID.IR[rt]]; ID/EX.NPC ← IF/ID.NPC;ID/EX.IR ←IF/ID.IR; ID/EX.Imm ← (IF/ID.IR

文档评论(0)

159****9610 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6044052142000020

1亿VIP精品文档

相关文档