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中调试模块部分的总体结构图如下(可以单独打开图片查看):
Rocket - debug - Periphery的更多相关文章
- Rocket - debug - TLDebugModuleInner - Hart Bus Access
https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...
- Rocket - debug - DebugTransport
https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...
- Rocket - debug - TLDebugModule
https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...
- Rocket - debug - TLDebugModuleInner - ROM Generation
https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...
- Rocket - debug - Example: DMI
https://mp.weixin.qq.com/s/7suuJ7m2BKCpsHk1K2FzJQ 介绍riscv-debug的使用实例:如何使用DMI. 1. dm Debug Module实现了调 ...
- Rocket - debug - Example: Triggers
https://mp.weixin.qq.com/s/zPNyrBOhsytkRrZTDTEvpw 介绍riscv-debug的使用实例:配置Triggers功能. 1. Trigger Trigge ...
- Rocket - debug - Example: Accessing Registers Using Program Buffer
https://mp.weixin.qq.com/s/8yYLVg-RXX3XX0T431lxeA 介绍riscv debug接口的使用实例:使用Program Buffer读取寄存器. 1. Wri ...
- Rocket - debug - Example: Accessing Registers Using Abstract Command
https://mp.weixin.qq.com/s/RdJzE06mMkh2x__vVj_fEA 介绍riscv debug接口的使用实例:使用抽象命令读取寄存器. 1. Read s0 using ...
- Rocket - debug - TLDebugModuleInnerAsync
https://mp.weixin.qq.com/s/Xf4VFTHIDFh1NHmfwlTX3w 简单介绍TLDebugModuleInnerAsync的实现. 1. dmInner dmInner ...
随机推荐
- Kubernetes笔记(二):了解k8s的基本组件与概念
前文 Kubernetes笔记(一):十分钟部署一套K8s环境 介绍了如何快速搭建一个k8s系统.为了继续使用k8s来部署我们的应用,需要先对k8s中的一些基本组件与概念有个了解. Kubernete ...
- JAVA设计模式之单例(singleton)
一.饿汉式 /** * 饿汉式 */public class Singleton01 { private static final Singleton01 instance = new Singlet ...
- kafka学习 之 简介
文章目录 [Topics and Logs](http://kafka.apache.org/intro#intro_topics): Distribution: Producers: Consume ...
- 036_python的大文件下载以及进度条展示
复习 1.黏包现象 粘包现象的成因: tcp协议的特点,面向流的,为了保证可靠传输,所以有很多优化的机制. 无边界 所有在连接建立的基础上传递的数据之间没有界限. 收发消息很有可能不完全相等. 缓存机 ...
- 【Spark】这一篇或许能让你大概了解如何通过JavaAPI实现DataFrame的相关操作
文章目录 需求概述 步骤 一.创建Maven工程并导包 二.选用第一种方法:利用反射机制配合样例类构建DataFrame 开发代码 选用第二种方法:通过StrucType配合Row构建DataFram ...
- 【Scala】用实例弄清楚scala几种函数的定义和特点
文章目录 作为参数的函数 匿名函数 柯里化函数(currying) 闭包函数 作为参数的函数 scala> val a1 = Array(1,2,3,4) //这是一个数组 a1: Array[ ...
- Spring JDBC 框架使用JdbcTemplate 类的一个实例
JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...
- A*启发式搜索
A*启发式搜索 其实是两种搜索方法的合成( A*搜索算法 + 启发式搜索),但要真正理解A*搜索算法,还是得先从启发式搜索算法谈起. 何为启发式搜索 启发式搜索算法有点像广度优先搜索,不同的是,它会优 ...
- [hdu5396 Expression]区间DP
题意:给一个表达式,求所有的计算顺序产生的结果总和 思路:比较明显的区间dp,令dp[l][r]为闭区间[l,r]的所有可能的结果和,考虑最后一个符号的位置k,k必须在l,r之间,则l≤k<r, ...
- ASP.NET 开源导入导出库Magicodes.IE 完成Csv导入导出
Magicodes.IE Csv导入导出 说明 本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出. 主要步骤 1.安装包Magicodes.IE.Csv Install-Pack ...