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阶段逐渐恢复。

 

 

posted @ 2022-03-12 00:04  wjcdx  阅读(119)  评论(0编辑  收藏  举报