Rocket - debug - Periphery

https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw

 

简单介绍Periphery的实现。

 

 

1. ExportDebugDMI/ExportDebugJTAG

 

这是两个参数,用于进行参数查找:

ExportDebugDMI表示导出DMI接口;

ExportDebugJTAG表示导出JTAG接口;

 

2. DebugIO

 

定义系统调试模块接口:

其中:clockeddmi和systemjtag只有一个存在:

 

3. HasPeripheryDebug

 

HasPeripheryDebug是一个trait,引入该trait,即添加一个调试模块:

 

1) debug

 

生成一个调试模块:

 

将其连接到cbus上:

 

cbus是外设控制总线:

 

cbus.coupleTo则是把cbus.outwardNode作为上游节点,连接到TLFragmenter节点上,再连接到debug.node节点上:

 

debug.node即是dmInner.tlNode:

 

核心通过这一个连接访问ROMBASE等地址空间,示意图如下:

 

2) debugCustomXbar

 

用于连接custom sink/source节点:

 

示意图如下:

目前debugCustomXbar没有连接上游节点。

 

3) sb2tl

 

把sb2tl.node连接到fbus上:

 

示意图如下:

 

4) getOMDebugModule

 

用于获取调试设备的描述信息:

 

4. HasPeripheryDebugModuleImp

 

用于实现与调试模块的接口连接逻辑。根据要导出的接口类型,有两种情况:

 

1) 导出DMI接口

 

直接导出DMI接口,DTM由外部自行实现:

 

示意图如下:

 

2) 导出JTAG接口

 

引入一个DTM模块,外部直接使用JTAG接口连接:

 

instantiateJtagDTM中创建一个DTM模块,并与调试模块进行相关连接:

 

示意图如下:

 

3) 其他连接

 

连接ndreset/dmactive/debugUnavail信号:

 

示意图如下:

 

5. SimDTM

 

如果导出的是DMI接口,则使用SimDTM模块仿真一个DTM模块,与DMI接口相连接:

 

6. SimJTAG

 

如果导出的是JTAG接口,则使用SimJTAG仿真一个JTAG接口。

 

1) io

 

定义SimJTAG模块的IO接口:

其中:jtag是标准的JTAG接口:

 

2) connect

 

把SimJTAG的IO接口与系统debug接口相连接:

其中主要的是连接jtag接口,时钟和复位信号:

 

注:这里tbclock/tbreset中的tb,应该是testbench的意思。

 

7. Debug

 

Debug对象用于辅助连接调试模块,或者关闭调试模块:

 

1) 连接调试模块

 

根据导出的两种不同的接口,调用不同的连接方法:

 

在TestHarness中调用:

 

2) 关闭调试模块

 

如果不需要调试模块,则可以选择将其关闭:

 

8. 总体结构图

 

BaseSubSystem中调试模块部分的总体结构图如下(可以单独打开图片查看):

参考链接:https://docs.qq.com/pdf/DUXVXcG54S3RHZExV

 

 

posted @ 2020-04-12 00:47  wjcdx  阅读(455)  评论(0编辑  收藏  举报