- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.5 流水线的实现 流水实现的数据通路 3.5 流水线的实现 寄存器的命名形式为:x.y 所包含的字段的命名形式为:x.y[s] 其中:x:流水寄存器名称 y:具体寄存器名称 s:字段名称 例如: ID/EX.IR:流水寄存器ID/EX中的子寄存器IR IRID/EX.IR[op]:该寄存器的op字段(即操作码字段) 流水寄存器的作用 将各段的工作隔开,使得它们不会互相干扰。 保存相应段的处理结果。 3.5 流水线的实现 例如: EX/MEM.ALUo:保存EX段ALU的运算结果 MEM/WB.LMD:保存MEM段从数据存储器读出的数据 向后传递后面将要用到的数据或者控制信息 所有有用的数据和控制信息每个时钟周期 会随着指令在流水线中的流动往后流动一段。 增加了向后传递IR和从MEM/WB.IR回送到通用寄存 器组的连接。 将对PC的修改移到了IF段,以便PC能及时地加 4,为取下一条指令做好准备。 3.5 流水线的实现 每一个流水段进行的操作 IR[rs]=IR6..10 IR[rt]=IR11..15 IR[rd]=IR16..20 流水段 流水线的每个流水段的操作 所有指令类型 ALU 指令 load/store 指令 分支指令 IF ID EX 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.IR16)16##IF/ID.IR16..31; EX/MEM.IR ← ID/EX.IR; EX/MEM.ALUo ← ID/EX.A func ID/EX.B 或 EX/MEM.ALUo ← ID/EX.A op ID/EX.Imm; EX/MEM.IR ← ID/EX.IR; EX/MEM.ALUo ← ID/EX.A + ID/EX.Imm; EX/MEM.B←ID/EX.B; EX/MEM.IR ← ID/EX.IR; EX/MEM.ALUo ← ID/EX.NPC + ID/EX.Imm2; EX/MEM.cond ← (ID/EX.A ==0); (动画演示) (动画演示) (动画演示) (动画演示) (动画演示) 流水段 任何指令类型 ALU 指令 load/store 指令 分支指令 MEM WB MEM/WB.IR ←EX/MEM.IR; MEM/WB.ALUo ← EX/MEM.ALUo; MEM/WB.IR ← EX/MEM.IR; MEM/WB.LMD ← Mem[EX/MEM.ALUo]; 或 Mem[EX/MEM.ALUo] ← EX/MEM.B; Regs[MEM/WB.IR[rd]] ← MEM/WB.ALUo; 或 Regs[MEM/WB.IR[rt]] ← MEM/WB.ALUo; Regs[MEM/WB.IR[rt]] ← MEM/WB.LMD; 流水线的每个流水段的操作 (动画演示) (动画演示) (动画演示) (动画演示) 3.5 流水线的实现 流水线的控制 主要是如何控制4个多路选择器。 MUX2:若ID/EX.IR中的指令是分支指令,则选择ID/EX.NPC,否则选ID/EX.A。 MUX3:若ID/EX.IR中的指令是寄存器-寄存器型ALU指令,则选ID/EX.B,否则选ID/EX.Imm。 MUX1:若EX/MEM.IR中的指令是分支指令,而且EX/MEM.cond为真,则选EX/MEM.ALUo,即分支目标地址,否则选PC+4。 MUX4:若MEM/WB.IR中的指令是load指令,则选MEM/WB.LMD,否则选MEM/WB.ALUo。 3.5 流水线的实现 第5个多路器:从MEM/WB回传至通用寄存器组的写入 地址应该是从MEM/WB.IR[rd] 和MEM/WB.IR[rt]中选 一个。 寄存器-寄存器型ALU指令:选择MEM/WB.IR[rd] ; 寄存器-立即数型ALU指令和load指令:选择MEM/WB.IR[rt] 。 解决数据冲突的问题 所有的数据冲突均可以在ID段检测到。 如果存在数据冲突,就在
文档评论(0)