Rocket - core - mem_reg_valid vs. mem_pc_valid
https://mp.weixin.qq.com/s/fWbfACM87AhrLe-b9j4j-Q
简单介绍mem_reg_valid和mem_pc_valid的用法。
本文目录:
1. 概述
2. reg_valid
3. pc_valid
以下正文:
1. 概述
概括而言,reg_valid表示某个流水线阶段的流水线寄存器是否合法。pc_valid表示某个流水线阶段的pc寄存器是否合法。
2. reg_valid
EX/MEM/WB每个阶段都定义了一组流水线寄存器。入EX的流水线寄存器如下:
其中,ex_reg_valid用于表示这组寄存器是否合法。
如果id阶段被kill,则ex_reg_valid为假:
如果ex阶段被kill,则mem_reg_valid为假:
3. pc_valid
pc的值也经过流水线向下游传递。pc_valid用于表示每个阶段xx_reg_pc寄存器的值是否合法,是否要向下游传递。
既然每个阶段存放pc的寄存器也是流水线寄存器,那么为什么不直接使用reg_valid来表示呢?
因为在某些情况下,并不是全部流水线寄存器都是合法的,只有pc这个流水线寄存器合法。目前所知的情况,就是中断和异常的情况。
ex_pc_valid控制pc从ex传递到mem:
mem_pc_valid控制pc从ex传递到wb阶段: