Rocket - debug - DMI
https://mp.weixin.qq.com/s/70BoeS7z4aBZK24zxdZzXA
简单介绍DMI的实现。
1. DMIConsts
定义DMI使用的常量:
其中:
a. dmiDataSize为数据宽度;
b. dmiOpSize为操作宽度;
2. DMIReq
定义DMI请求的结构:
其中:
a. addr为请求地址,其宽度由参数传入;
b. data为请求时使用的数据;
c. op为请求的操作类型;
3. DMIResp
定义DMI响应的结构:
其中:
a. data为响应的数据;
b. resp为响应的状态:
4. DMIIO
定义顶层DMI接口:
其中:请求接口中的地址宽度,从全局配置中获取;
5. ClockedDMIIO
增加了时钟和复位信号输出的DMI接口:
6. DMIToTL
定义DMI接口向TileLink接口转换的逻辑:
1) diplomacy node
这是一个只有输出边没有输入边的节点(TLClientNode):
2) lazy module
lazy module实现具体的转换逻辑:
A. diplomacy node只有输出边,没有输入边:
B. 定义模块IO:
C. 生成通过channel a发起请求所需的fromSource/toAddr/size:
D. 生成读写请求逻辑:
E. 生成NOP逻辑:
其中:mask=0代表不写入:
F. 根据操作类型,选择通过channel a发出的请求:
G. 适配请求的ready/valid:
H. 适配响应的ready/valid:
I. 返回响应状态和数据:
J. 不支持缓存: