码迷,mamicode.com
首页 > 其他好文 > 详细

Rocket - tile - CustomCSRs

时间:2020-07-09 22:09:24      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:div   csr   查找   tor   src   介绍   信号   obj   生成   

https://mp.weixin.qq.com/s/VbidBjB6QsaQG-KWRIM8zQ

 

简单介绍CustomCSRs的实现。

 

技术图片

 

1. CustomCSR

 

CustomCSR定义自定义CSR寄存器的信息。

 

1) case class

 

用于封装自定义CSR寄存器的信息:

技术图片

其中:

a. id:CSR寄存器的编号:

技术图片

b. mask:暂时不清楚;

c. init:初始值;

 

2) object

 

定义一个constant方法用于生成CustomCSR:

技术图片

 

2. CustomCSRIO

 

定义CustomCSR的读写接口:

技术图片

其中:

a. wen:写使能;

b. wdata:写寄存器时使用的数据源;

c. value:读寄存器时使用的数据源;

 

3. CustomCSRs

 

CustomCSRs继承自CoreBundle,定义了一个核心的输入输出接口类型:

技术图片

 

1) csr id

 

定义包含CSR的id,包括bpmCSR和chikenCSR(目前不知bpm/chiken的意义):

技术图片

 

2) decls

 

decls(声明)把bpmCSR和chikenCSR汇总到一起:

技术图片

在CustomCSRs的子类中,需要覆盖decls这个方法,并使用super.decls获取父类中定义的CSRs,再与子类中的CSRs加总到一起。

 

3) csrs

 

根据decls.size生成相应的CustomCSRIO:

技术图片

 

4) getOrElse

 

A. getOrElse

 

getOrElse的声明如下:

技术图片

根据csr的取值,选择返回一个值:

a. 如果csr是None,则使用alt;

b. 如果csr不是None,则取出其中的CustomCSR,与f参数一起传递给getByIdOrElse方法获取返回值;

 

B. getByIdOrElse

 

getByIdOrElse的声明如下:

技术图片

其中:

a. 使用indexWhere方法从decls中查找与参数id相同的寄存器的编号;如果没有找到,则返回-1:

技术图片

b. 如果没找到,则使用alt;

c. 如果找到了,则使用函数f从相应的CustomCSRIO中取出数据;

 

5) flushBTB

 

flushBTB的定义如下:

技术图片

a. 如果bpmCSR未定义,则为false.B;

b. 如果定义了,则查找decls中是否存在相应id的csr,如果没有,还是使用false.B;

c. 如果有,则取出相应CustomCSRIO中的wen信号;也就是说,在该CSR存在的情况下,只要写使能,就需要刷新BTB;

 

6) 其他

 

如下四个方法,定义了bpmCSR的第0位和chikenCSR的低三位的用法:

技术图片             

 

 

Rocket - tile - CustomCSRs

标签:div   csr   查找   tor   src   介绍   信号   obj   生成   

原文地址:https://www.cnblogs.com/wjcdx/p/13276288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!