Rocket - core - pipeline和replay

发布时间:2022-06-24 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Rocket - core - pipeline和replay脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

https://mp.weixin.qq.com/s/6PBY-seJ6Cj2-yzQD_HAJg

 

简单介绍流水线对replay的处理。本文不研究为什么会发生replay。

 

Rocket - core - pipeline和replay

 

1. replay的效果

 

replay经流水线传递之后,最终在wb阶段起作用:

Rocket - core - pipeline和replay

即触发take_pc_wb,以wb_reg_pc作为地址重新取指进行执行:

Rocket - core - pipeline和replay

这个wb_reg_pc中存放的就是wb阶段当前指令的地址。也就是说要重新执行一遍,即replay。

 

2. replay的触发

 

replay的触发,包括如下几种情况。

 

id阶段的ibuf.io.inst(0).bits.replay声明指令需要重新执行:

Rocket - core - pipeline和replay

 

两个是ex阶段的hazard导致:

Rocket - core - pipeline和replay

 

两个是mem阶段的dcache_kill_mem和fpu_kill_mem导致:

Rocket - core - pipeline和replay

 

一个是WB阶段io.dmem.s2_nack导致:

Rocket - core - pipeline和replay

可以看到,几乎每个阶段都会触发指令的重新执行。

 

3. replay在流水线上的传播

 

1) ID阶段

 

ibuf.io.inst(0).bits.replay声明指令是否需要重新执行,在经过相应条件过滤之后,其值用于更新ex_reg_replay:

Rocket - core - pipeline和replay

这里ibuf.io.inst(0).bits.replay导致了ctrl_killd,使得id阶段被kill,无法正常传播到ex阶段。跟中断的处理类似,当前指令的pc可以随流水线传递下去,以在wb阶段决定重新执行哪一条指令:

Rocket - core - pipeline和replay

 

2) EX阶段

 

在EX阶段,ex_reg_replay的值用于生成replay_ex信号,而后replay_ex经过take_pc_xxx的过滤,用于更新mem_reg_replay:

Rocket - core - pipeline和replay

这里除了ex_reg_replay之外,又增加了replay_ex_structural和replay_ex_load_use两种情况,触发replay_ex。

 

replay_ex触发ctrl_killx,导致ex阶段被kill,无法正常传播到mem阶段。跟中断的处理类似,当前指令的pc可以随流水线传递下去,以在wb阶段决定重新执行哪一条指令。所以这里ex_reg_replay用于改变ex_pc_valid的值。

 

3) MEM阶段

 

在MEM阶段,mem_reg_replay用于生成replay_mem信号,而后replay_mem经过take_pc_xxx的过滤,用于更新wb_reg_replay:

Rocket - core - pipeline和replay

这里除了mem_reg_replay之外,又增加了dcache_kill_em和fpu_kill_mem两种情况,触发replay_mem。

 

replay_mem触发ctrl_killm,导致mem阶段被kill,无法正常传播到mem阶段。跟中断的处理类似,当前指令的pc可以随流水线传递下去,以在wb阶段决定重新执行哪一条指令。所以这里mem_reg_replay用于改变mem_pc_valid的值。

 

4) WB阶段

 

在WB阶段,wb_reg_replay用于生成replay_wb信号(不考虑rocc),而后用于生成take_pc_wb信号:

Rocket - core - pipeline和replay

这里除了wb_reg_replay之外,又增加了io.dmem.s2_nack这种情况(不考虑rocc),触发replay_wb。

 

而后take_pc_wb触发take_pc,要求流水线重新取指,把WB阶段的当前指令重新执行。

 

脚本宝典总结

以上是脚本宝典为你收集整理的Rocket - core - pipeline和replay全部内容,希望文章能够帮你解决Rocket - core - pipeline和replay所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: