Rocket - core - id_load_use

https://mp.weixin.qq.com/s/QbFEuvix7kgFssqDK6OyKQ

 

简单介绍id_load_use相关的实现。

 

1. id_load_use

 

id_load_use是一个线型信号:

 

其赋值为:

其包含的三个条件中:

a. mem_ctrl.mem表示MEM阶段当前指令涉及内存操作;

b. data_hazard_mem表示MEM阶段指令与ID阶段指令之间存在data hazard;

 

id_load_use的值用于更新ex_reg_load_use:

由其命名和使用可以知道,id_load_use从ID阶段指令的视角被使用,其值随ID阶段的指令向EX阶段传递。

 

2. ex_reg_load_use

 

当ID阶段的指令前进到EX阶段时,原MEM阶段的指令也前进到了WB阶段了。在WB阶段,dcache是否命中,已经可以确定了:

如果dcache没有命中,而EX阶段的指令又需要其从内存中获取的数据,则EX阶段的指令无法正确执行。因为在当前的实现中,只有ID阶段的指令可以被stall,所以这里已经前进到EX阶段的指令被要求重新执行(replay)。

 

图示如下:

 

posted @ 2022-03-21 20:18  wjcdx  阅读(98)  评论(0编辑  收藏  举报