Rocket - debug - TLDebugModuleInner - Drive Custom Access
https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw
简单介绍TLDebugModuleInner中的针对Custom的访问。
1. customNode
customNode定义为DebugCustomSink类型的节点:
根据DebugCustomSink的定义,customNode所属的模块为调试模块:
这与customNode所属的模块为TLDebugModuleInner相符。
Custom相关节点到连接图如下,供参考:
2. needCustom
needCustom标志着是否需要生成Custom逻辑:
其中到两个条件为:
a. 包含一个以上的输入边;
b. 包含一个以上的地址可供访问;
customNode代表调试模块,customNode.in代表与被调试模块到连接。这两个条件到意义也就是存在被调试模块,被调试模块存在可被访问到地址。
3. accessRegIsCustom
accessRegIsCustom表示抽象命令访问到寄存器是否属于Custom节点:
其中:
a. 如果customNode没有输入边,也就是没有被调试模块,则直接返回假;
b. 如果存在输入边,则把访问到寄存器地址与输入边中的地址相比较;
这里只比较了customNode.in.head的地址,也就是第一个输入边相对应到模块到地址。难道不能有多个被调试模块吗?
可以有,他们都通过DebugCustomXbar与调试模块相连,所以与调试模块相连到也就只有DebugCustomXbar这一个模块了:
DebugCustomXbar也限定了只有一个输出边连接一个Sink节点:
也就是只有一个调试模块与之相连。
4. goCustom
在检测生成的命令阶段,如果访问到寄存器地址在Custom源节点,那么会进入Custom状态:
否则,进入命令执行状态。也就是命令由Custom相关节点执行。
在Custom状态,设置goCustom为真:
如果custom.ready和custom.valid同时为真,也就是命令执行结束(数据从Custom源节点返回),就进入下一个状态(Waiting)。
5. Drive Custom Access
抽象命令中的寄存器编号就是要访问的地址(custom.addr):
根据地址是否属于Custom源节点(goCustom)确定custom.valid是否为真。
6. abstractDataMem
当数据从Custom源节点返回时,将其存入abstractDataMem中:
参考注释:
最新文章
- 关于CSV文件 Excel打开乱码问题的解决方案
- Linux添加开机启动命令
- jQuery初探 jQuery选取和操纵元素的特点
- C# C++联调
- Zabbix简介(第一章第一节)
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述
- [King.yue]Ext.JS 弹出窗体取值赋值
- Java中数组的初始化方式
- LINUX 内核代码 errno 错误代码提示 /include/asm/errno.h
- Bogo排序
- Womany女人迷 | 氪加
- 关于Dropdownlist使用的心得体会
- hdu1029
- bi api 软件
- 面试阿里前端P6血和泪换来的收获
- Windows下U盘管理程序
- SQLServer之删除视图
- hdu 5116--Everlasting L(计数DP)
- python(45)内置函数:os.system() 和 os.popen()
- 纯CSS绘制的三角形箭头图案【原创】
热门文章
- 错误:Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.
- 如何将项目上传至GitHub?
- quartus II Warning 好的时序是设计出来的,不是约束出来的
- aui移动端UI库
- Git与GitHub常用操作
- 对background: url(";~assets/img/common/collect.svg";) 0 0/14px 14px 的理解
- 漫谈Huawei LiteOS五大内核模块
- Python内置函数示例
- MYSQL8 常用操作
- 贝叶斯优化(Bayesian Optimization)只需要看这一篇就够了,算法到python实现