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中调试模块部分的总体结构图如下(可以单独打开图片查看):
最新文章
- C# Redis Server分布式缓存编程 --网络转载
- Codeforces Round #163 (Div. 2)
- PIC32MZ tutorial -- Change Notification
- JMeter简介
- 深入浅出ES6(八):Symbols
- css改变谷歌浏览器的滚动条样式
- OC与Swift的区别二(常量、变量、运算符)
- SQL语句の循环添加数据
- UIPickerView 地区解析 -- 全国省、市、区 plist 解析 -- 读取UIPickerView 当前显示内容
- Netty笔记--ByteBuf释放
- Yii中常用路径(转)
- 怎么样eclipse发达国家多重聚合关系maven项目和使用git管理
- Spring in Action --- 第二章 装配Bean
- Nginx负载均衡反向代理 后端Nginx获取客户端真实IP
- Strut、Spring、Hibernate如何实现资源整合(SSH)呢?
- 在 Mac 中安装 MySQLdb (Python mysql )
- 高级DirectDraw
- 使用location.href跳转页面在火狐浏览器中报错404
- codeforces29A
- Spring boot多模块(moudle)中的一个注入错误(Unable to start embedded container; nested exception is org)