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)。
图示如下: