ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Pipline 中的Hazard, Forwarding, Stall, Flush和其他

2021-10-01 18:02:31  阅读:255  来源: 互联网

标签:LW MEM 寄存器 Hazard 修改 Stall Flush ALU ID


设计:cmp和地址计算放在ID级

Flush和Stall

Flush产生的结果是:向上传递一条空指令,寄存器值被维持。

Stall产生的结果是:不向上传递指令,寄存器的值被维持。

对于A->B, 如果A Flush, 那么B得到了一条空指令,流水线在A级停顿,在B级继续。

如果A stall, 那么B的值也不会被更新,流水线在B级也停顿下来。

Hazard检测与解决

对于需要我们解决的Hazard一共有6种,解决方法如下:

冲突位置冲突原因解决方法
ID和EXEEXE级rd被ALU修改使用EXE级ALU结果修改ID级寄存器
ID和EXEEXE级rd被LW修改,此时ID不是SWIF 级Stall, ID级Flush
EXE和MEMMEM级rd被LW修改,此时EXE是SWMEM级读出的值修改EXE级寄存器
ID和MEMMEM级rd被ALU修改使用MEM级ALU结果修改ID级寄存器
ID和MEMMEM级rd被LW修改使用MEM级MEM结果修改ID级寄存器
IF跳转IF flush

Forwarding

Forwarding 一共有4条路线

具体来说,ID级rs1和rs2的修正有3种选则:

  • EXE级ALU的输出
  • MEM级ALU的输出
  • MEM级mem的输出

对于LW和SW的情况,有一种选择,

  • 从MEM的输入口直接接到输入口。
    (注意: 这种情况也满足EXE级是LW, ID级修改了reg的条件,因此stall时必须区分出ID是不是sw, 如果不是才stall)

信号含义解释

信号含义
RegWrite是否写寄存器,用来区别指令是否是LW或者ALU结果修改
DatatoReg/MemRead是否读mem,用来区别是否是lw指令

标签:LW,MEM,寄存器,Hazard,修改,Stall,Flush,ALU,ID
来源: https://blog.csdn.net/HGGshiwo/article/details/120579188

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有