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. 不支持缓存:

 

posted @ 2020-01-29 09:23  wjcdx  阅读(350)  评论(0编辑  收藏  举报