Rocket - core - Consts

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

 

简单介绍Consts的实现。

 

 

1. ScalarOpConstants

 

定义标量操作相关的常量:

 

1) MT

 

定义操作的内存类型:

 

如下图所示load指令中的使用:

 

 

mtSize表示操作数的大小,以字节数为单位,其值为2的幂,即:

操作数的字节数 = 2^mtSize

 

mtSigned表示操作数是有符号数还是无符号数;

 

2) BR

 

定义branch的类型:

 

如下图所示Branch指令中使用:

 

3) A1

 

定义参数1(argument 1)的信息:

其中:

a. A1_ZERO:表示参数1为0;

b. A1_RS1:表示参数1使用RS1;

c. A1_PC:表示参数1使用PC的值;

 

4) IMM

 

定义立即数的类型:

 

根据指令格式的不同,立即数的编码方式也不相同:

 

5) A2

 

定义参数2(argument 2)的信息:

其中:

a. A2_ZERO:表示参数2的值为0;

b. A2_SIZE:表示参数2的值是一个大小,比如jal指令中为距离当前pc的大小;

c. A2_RS2:使用RS2作为参数2;

d. A2_IMM:使用立即数作为参数2;

 

6) Y/N/X

 

定义三个基本的Patten:

a. X:值未知的一个比特;

b. Y:值为1的一个比特;

c. N:置位0的一个比特;

 

7) DW

 

定义操作数的宽度:

a. DW_32:表示操作数为32位宽;

b. DW_64:表示操作数为64位宽;

c. DW_XPR:表示操作数的宽度与寄存器宽度一致;这里DW_XPR = DW_64,表示当前配置下XLen = 64;这里没有从全局的配置中获取,而是直接写死,是修改时需要注意的一个点。

 

2. MemoryOpConstants

 

定义内存操作相关的常量:

 

1) M

 

定义指令内存操作的相关信息:

 

各操作含义如下表格:

 

LR/SC指令描述如下:

 

2) isXXX

 

定义一些简便方法:

a. isAMOLogical:是否原子逻辑运算;

b. isAMOArithmetic:是否原子数学运算;

c. isAMO:是否原子操作;

d. isPrefetch:是否预处理;

e. isRead:是否读操作;

f. isWrite:是否写操作;

g. isWriteIntent:是否想要写;

 

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