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阶段:

 

 

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