Rocket - debug - TLDebugModuleOuterAsync
https://mp.weixin.qq.com/s/PSeMVZjSjEFHJgCYZzfa9Q
简单介绍TLDebugModuleOuterAsync的实现。
1. dmi2tl
dmi2tl是TLDebugModuleOuterAsync中的一个子模块,用于把dmi接口转换为tilelink接口。
其结构图如下:
2. dmiXbar
dmiXbar是一个TLXbar模块,用于连接多个TileLink模块:
3. dmOuter
dmOuter也是一个子模块:
4. intnode
intnode是一个别名,dmOuter.intnode经过一个IntSyncCrossingSource生成的结构:
结构示意如下:
5. dmiInnerNode
dmiInnerNode是dmiXbar.node经过TLAsyncCrossingSource之后生成的结构:
结构示意如下:
6. 内部子节点
1) TLDebugModuleOuterAsync各个内部子节点如下:
2) 对内部部分节点进行了连接:
结构示意图如下:
可以看到io.dmi经过dmi2tl转换为tilelink接口,连接到dmiXbar节点。
a. 进而连接到dmOuter节点的dmiNode访问dmOuter中的寄存器;
b. 也经过TLAsyncCrossingSource节点跨域与inner节点连接;
7. lazy val module
lazy val module实现了TLDebugModuleOuterAsync的内部逻辑。
1) 这里声明了IO接口:
2) 又进行了一定的接口连接:
示意图如下(可以单独打开图片查看):
8. 总结
1) io.dmi
io.dmi用于实现DMI访问。通过DMI接口读写DMI地址空间的寄存器对调试模块进行控制。
在实现中,DMI地址空间被分为了outer和inner两个部分。outer部分对应的是dmiNode:TLRegisterNode;inner部分通过TLAsyncCrossingSource模块跨域进行访问。
2) io.ctrl
io.ctrl的定义如下:
其方向无论是在TLDebugModuleOuter中还是在TLDebugModuleOuterSync中都没有进行转向(flip)。所以这里就是:
a. debugUnavail从outerSync输出到outer
debugUnavail用于从外部控制调试模块是否可用,在outerSync内部并没有被使用。
b. ndreset从outer输出到outerSync
ndreset的值来自于DMCONTROL寄存器的ndmcontrol位:
其意义在于复位系统中除调试模块之外的其他部分:
ndreset最终用于控制系统其他模块复位:
c. dmactive从outer输出到outerSync;
dmactive的值来自于DMCONTROL寄存器的dmactive位:
用于复位调试模块:
3) io.innerCtrl
io.innerCtrl定义如下:
根据注释,用于从outer传递控制信息到inner。因为其定义中没有方向信息,所以整个结构全部信号值传递的方向是一致的:都是从outer到inner。
Rocket - debug - TLDebugModuleOuterAsync的更多相关文章
- Rocket - debug - TLDebugModule
https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...
- Rocket - debug - TLDebugModuleInner - Hart Bus Access
https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...
- Rocket - debug - Periphery
https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw 简单介绍Periphery的实现. 1. ExportDebugDMI/ExportDebugJTA ...
- Rocket - debug - DebugTransport
https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...
- 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 ...
随机推荐
- indexDB出坑指南
对于入了前端坑的同学,indexDB绝对是需要深入学习的. 本文针对indexDB的难点问题(事务和数据库升级)做了详细的讲解,而对于indexDB的特点和使用方法只简要的介绍了一下.如果你有一些使用 ...
- Spring方法注入的使用与实现原理
一.前言 这几天为了更详细地了解Spring,我开始阅读Spring的官方文档.说实话,之前很少阅读官方文档,就算是读,也是读别人翻译好的.但是最近由于准备春招,需要了解很多知识点的细节,网上几乎 ...
- 如何将Altera官方提供的CADENCE.OLB应用于altium Designer中
- [hdu4495]二分,字符串hash,DP
题意:在一个有字母和数字组成的矩形里面找最大的等腰对称直角三角形,直角边分别平行于矩形边,对称的意思是对称轴两边的字符相同. 思路:首先考虑一种情况,三角形的直角边在右方和下方,对于其它情况可以通过旋 ...
- 【SMB源码解析系列】——001.JumpEngine函数
在SMB的源码中大概有不到20处看起来很奇怪的指令,它的格式是通过jsr指令调用一个名为JumpEngine的函数,其后并不是跟随某些后续的逻辑指令,而是通过.dw定义了一系列16位地址. 我们可以看 ...
- java 四舍五入 保留n为数
double x1 = 0.026;String format = String.format("%.2f", x1);System.out.println(format); St ...
- 【图机器学习】cs224w Lecture 10 - PageRank
目录 PageRank Problems Personalized PageRank 转自本人:https://blog.csdn.net/New2World/article/details/1062 ...
- java十大排序
0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序:不通过比较来决 ...
- 静态MAC地址配置案例
目录导航: 1.静态MAC地址简介 2.组网需求 3.配置思路 4.配置步骤 5.配置文件 1.静态MAC地址简介 返回目录导航 >MAC地址表项是交换机通过报文的源MAC地址学习过程而自动生成 ...
- 都0202年了,你还不知道javascript有几种继承方式?
前言 当面试官问你:你了解js哪些继承方式?es6的class继承是如何实现的?你心中有很清晰的答案吗?如果没有的话,可以通过阅读本文,帮助你更深刻地理解js的所有继承方式. js ...