Rocket - core - ctrl_killd的作用
https://mp.weixin.qq.com/s/oWJb2NIl9poyBFBwVNNJ-A
简单介绍ctrl_killd的作用。
1. 概述
ctrl_killd表示id阶段被kill,也就是id阶段的指令被废弃,不再执行。
2. ctrl_killd发生的时钟周期: cycle t
1) 停止id到ex的流水线
如果ctrl_killd为真,则id阶段不再向ex阶段传递数据:
导致ex阶段的流水线寄存器不进行更新。
2) ctrl_killd使ex阶段的流水线寄存器失效
如果ctrl_killd为真,则ex_reg_valid为假,导致ex流水线寄存器的值非法,不能使用。
3) ctrl_killd可以使ex_reg_pc失效
在不存在中断的情况下,如果ctrl_killd为真,则ibuf.io.pc无法向ex_reg_pc传递。ex_reg_pc的值无法得到更新。
3. ctrl_killd发生的后一个时钟周期:cycle t+1
在周期t+1:
a. ex_reg_valid为假,导致ctrl_killx为真,进而在下一个时钟周期把mem_reg_valid的更新为假;
b. ex_reg_valid为假,因为上一个时钟周期未发生中断,所以此时ex_reg_xcpt_interrupt为假,如果没有replay发生,则ex_pc_valid为假,导致ex_reg_pc无法向mem_reg_pc传递。
4. 小结
综合2、3的分析,ctrl_killd发生的时钟周期,ID阶段被作废。而后逐渐使得EX阶段、MEM阶段、WB阶段作废。
5. ctrl_killd消失时
在持续了几个时钟周期之后,ctrl_killd信号消失,会发生什么情况?
如果ctrl_killd信号消失,在下一个时钟周期,ex阶段的流水线寄存器将得到更新。然后使得MEM阶段、WB阶段逐渐恢复。