Rocket - regmapper - RegField

知识的价值不在于占有,而在于使用。这篇文章主要讲述Rocket - regmapper - RegField相关的知识,希望能为你提供帮助。
https://mp.weixin.qq.com/s/7WKB1QxcVzqm2Q7bWcKHzA
 
简单介绍RegField的实现。
 

Rocket - regmapper - RegField

文章图片

 
1. 简单介绍
 
定义寄存器域相关的参数类型。
 
2. RegFieldAccessType
 
访问类型:读、写、读写:
Rocket - regmapper - RegField

文章图片

 
3. RegFieldWrType
 
写操作类型:
Rocket - regmapper - RegField

文章图片

写一清零,写一置位,写一反转,
写零清零,写零置位,写零反转,
清除,置位,修改
 
4. RegFieldRdAction
 
读操作的作用:清零,置位,修改:
Rocket - regmapper - RegField

文章图片

 
5. RegFieldDesc
 
1) class
 
寄存器域描述,定义寄存器域的各种属性:
Rocket - regmapper - RegField

文章图片

a. name:名称;
b. desc:描述;
c. group:所在组;
d. groupDesc:组描述;
e. access:访问类型,默认为读写类型;
f. wrType:写类型;
g. rdAction:读的动作;
h. volatile:寄存器的值是否会自动变换;
i. reset:复位值;
j. enumberations:推测为寄存器域各个值代表意义的描述:
Rocket - regmapper - RegField

文章图片

 
2) object
 
创建一个reserved的寄存器域:
Rocket - regmapper - RegField

文章图片

 
6. RegFieldGroup
 
使用name和desc描述regs中的寄存器:
Rocket - regmapper - RegField

文章图片

 
7. RegReadFn
 
1) class
 
读寄存器的函数:
Rocket - regmapper - RegField

文章图片

包含两个参数:
a. combinational:是否为组合逻辑;
b. fn:参数为输入信号,返回值为输出信号的用于生成读取逻辑的函数:
Rocket - regmapper - RegField

文章图片

 
2) object
 
用于生成读取逻辑的辅助方法。
a. 直接传入逻辑生成函数作为参数:
Rocket - regmapper - RegField

文章图片

 
b. 使用RegisterReadIO作为参数:
Rocket - regmapper - RegField

文章图片

 
RegisterReadIO在RegisterCrossing中定义:
Rocket - regmapper - RegField

文章图片

 
c. 只输入oready用于生成读取逻辑:
Rocket - regmapper - RegField

文章图片

 
d. 使用ReadValidIO读取:
Rocket - regmapper - RegField

文章图片

 
e. 直接使用一个UInt作为读取逻辑的输出:
Rocket - regmapper - RegField

文章图片

 
f. 把Unit转换为RegReadFn的隐式类型转换方法:
Rocket - regmapper - RegField

文章图片

 
8. RegWriteFn
 
与RegReadFn同理,用于生成写入逻辑的辅助方法。
 
9. RegField
 
用于描述一个寄存器域。
 
1) case class
 
定义了寄存器域的比特位宽度,读函数、写函数,描述信息:
Rocket - regmapper - RegField

文章图片

a. pipelined
 
读写函数中是否有非组合逻辑:
Rocket - regmapper - RegField

文章图片

 
b. readOnly:
 
生成一个只读版本的拷贝:
Rocket - regmapper - RegField

文章图片

 
c. toJson:
 
把寄存器域的各个属性转换为JSON格式的对象,以便输出:
Rocket - regmapper - RegField

文章图片

PS. 可以看到这里需要外部提供字节偏移量和位偏移量信息(因为RegField只有位宽度信息,寄存器域可以复用,具体放在哪个位置可以是变化的)。
 
2) object
 
辅助方法,用于创建各种类型的寄存器域:
Rocket - regmapper - RegField

文章图片

其中:
a. ()表示空函数;
b. r:生成只读寄存器;
c. w:生成只写寄存器;
 
d. w1ToClear:生成一个协议清零的读写寄存器:
Rocket - regmapper - RegField

文章图片

 
e. rwReg:为BlackBox寄存器生成读写逻辑:
Rocket - regmapper - RegField

文章图片

 
f. bytes:生成一个以字节为单位进行读写的逻辑:
 
Rocket - regmapper - RegField

文章图片

【Rocket - regmapper - RegField】其中:
a) fullBytes为全部为有效位的字节;
b) partialBytes为部分位有效位的字节(是否应该为partialByte,因为要么1个字节,要么0个字节,不是复数);
c) padBytes:补到numBytes宽度所需要添加的字节数;
 
g. 为寄存器reg生成一个以字节为单位进行读写的逻辑:
Rocket - regmapper - RegField

文章图片

 
10. HasRegMap
 
该特征为子类引入一个中断向量表,一个生成寄存器访问逻辑的方法:
Rocket - regmapper - RegField

文章图片

 

    推荐阅读