其他分享
首页 > 其他分享> > Pipline 中的Hazard, Forwarding, Stall, Flush和其他

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

作者:互联网

设计: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种选则:

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

信号含义解释

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

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