Rocket - debug - TLDebugModuleInner - Abstract Data

https://mp.weixin.qq.com/s/DOLkEi-_qQt6lWOhJ2hxVQ

 

简单介绍TLDebugModuleInner中抽象数据寄存器的实现。

 

 

1. abstractDataMem

 

以字节为单位,表示抽象数据寄存器:

 

dmactive为假时,其值为零:

 

2. abstractDataNxt

 

用于存放abstractDataMem寄存器的将要使用的值。

 

3. 寄存器组

 

abstract data是一组寄存器,包含了多个寄存器。这里使用RegFieldGroup来定义:

 

这段代码针对abstractDataMem中的每一个字节生成一个读写逻辑:

a. 读直接使用abstractDataMem中相应字节作为数据源;

b. dmiAbstractDataRdEn(i)读指示标志;

c. 写的数据先存入abstractDataNxt中的相应字节中;

d. dmiAbstractDataWrEnMaybe(i)为写指示标志;

 

4. dmi写入

 

抽象数据寄存器可以使用dmi接口访问:

只有正在写入,并且针对抽象数据的访问合法时,才可以把abstractDataNxt中的值存入对应的抽象数据寄存器中。

 

5. custom写入

 

抽象数据寄存器也可以使用custom接口写入:

当custom.ready和custom.valid同时为真时,把custom_data中的相应字节写入到对应的abstractDataMem字节中。这里没有使用abstractDataNxt。

 

6. shadow

 

abstractDataMem还在另一个地方使用:

 

这是供核心总线(Hart Bus)访问的地址空间。生成的DATA寄存器组直接针对abstractDataMem中的每个字节进行读写:

其中,形参rw对应的实参就是x。

 

结合HARTINFO中的描述,即可明白数据寄存器在核心的内存空间投影(shadow)的含义:

 

 

posted @ 2020-03-14 16:45  wjcdx  阅读(218)  评论(0编辑  收藏  举报