Rocket - debug - TLDebugModuleOuter
https://mp.weixin.qq.com/s/9nMo6IYmDCz7S-ALFx824g
简单介绍TLDebugModuleOuter的实现。
1. DebugModuleAccessType
定义调试模块访问宽度:
2. DebugAbstractCommandError
定义抽象命令访问错误:
3. DebugAbstractCommandType
定义抽象命令类型:
4. DebugModuleParams
定义调试模块参数:
其中:
a. nDMIAddrSize:调试总线地址宽度;
b. nProgramBufferWords:Program Buffer中包含的字数,每个字包含4个字节;
c. nAbstractDataWords: 抽象命令数据的字数,每个字包含4个字节;
d. nScratch:
e. hasBusMaster:是否包含SBToTL模块;
f. clockGate: 是否使用门控时钟;
g. maxSupportedSBAccess: 支持访问系统总线的最大宽度;
h. supportQuickAccess: 是否支持快速访问抽象命令;
i. supportHartArray: 是否支持核心数组;
j. hasImplicitEbreak: Program Buffer最后是否包含一个隐含的ebreak命令;
限定条件:
a. DMIAddrSize在7-32之间;
b. nAbstractDataWords在0-16之间;
c. nProgramBufferWords在0-16之间;
5. DefaultDebugModuleParams
默认调试模块参数:
除了已有的默认值外:
a. nAbstractDataWords: 根据总线宽度来决定支持的抽象命令数据字数;
b. maxSupportedSBAccess: 根据总线宽度确定;
6. DebugModuleParams
定义用于获取配置的Key:
7. DebugModuleHartSelFuncs
定义hartid和hartsel之间的映射函数:
8. DebugModuleHartSelKey
定义用于获取配置的Key:
9. DebugInternalBundle
用于传递hartsel等信息的结构:
10. DebugCtrlBundle
调试模块顶层信号:
11. WNotifyWire
生成一个只写的寄存器域:
其中:
a. 宽度为n;
b. 读出的数值为0;
c. 值写入value变量,并以set作为写入标志;
12. RWNotify
生成一个读写寄存器域:
其中:
a. 宽度为n;
b. 从rVal中读出值,并以rNotify作为读取标志;
c. 值写入wVal中,并以wNotify作为写入标志;
13. TLDebugModuleOuter
1) 引入全局配置
2) 多个diplomacy node
A. intnode
包含一个中断节点:
B. dmiNode
包含一个DMI节点,这是一个寄存器节点:
3) lazy module
A. 输出中断,但不接收中断
B. 支持的核心数量:
如果只有一个核心,则不需要支持核心数组;
C. 定义模块IO:
D. dmcontrol使用dmiClock时钟:
E. dmcontrol寄存器
a. 复位值:
b. 更新值:
c. 异步复位寄存器:
d. 寄存器读取时使用的数据源:
e. 接收写寄存器时写入的32位值:
f. 把32位值解析成为带结构值:
g. 读写使能标志:
h. 根据dmactive的值,更新dmcontrol的值:
如果不支持核心数组,则hasel=0;
i. 写使能时更新dmactive的值:
j. dmcontrol是一个可读写寄存器:
其中:DMCONTROLRdEn, DMCONTROLWrEn指示正在读和正在写。
F. hawindowsel & hawindow寄存器
a. 每个核心一个掩码位,窗口宽度为32位:
b. 读取hawindowsel寄存器时使用的数据源:
c. 接收写寄存器时写入的值:
- HAWINDOWSELWrDataVal接收写入的32位值;
- HAWINDOWSELWrData把这个32位的值解析成带结构信息的值;
d. hawindowsel寄存器的读写标志:
e. hawindow寄存器相关变量:
f. 如果支持核心窗口,hawindowsel等于当前选择的32个核心的窗口:
为了防止写入值超过支持的值,需要一个掩码进行限定。这里使用的是:log2Up(nComponents) - 5。这个应该是有问题的,需要再取一次对数,如log2Up(log2Up(nComponents) - 5)。
g. 支持的核心数量需要多少个32位窗口:
h. 生成每个窗口的掩码:
- 如果不是最后一个窗口,则32个核心都支持;如果是最后一个窗口,则根据数量计算包含多少个掩码位;
- HAWINDOWRdData:读取时返回的值需要使用掩码进行限定;
- 如果dmactive为假,则使用复位值;
- 否则如果选择的是当前窗口,则把掩码值写入到hamask寄存器中;
i. 更新包含全部掩码的hamask:
- 把写入的新值更新到当前窗口;
- 非当前窗口使用原值;
G. 生成dmcontrol/hawindowsel/hawindow寄存器:
H. Interrupt Registers
每个核心对应一个中断线,通过intnode连接到每一个核心:
中断的值等于haltreq的值:
I. inner & ctrl
把信号向inner传递:
这里只使用了harsello,没有使用hartselhi,也就是支持1024个以内的核心,hartselhi默认为0.
Rocket - debug - TLDebugModuleOuter的更多相关文章
- 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 - TLDebugModule
https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...
- Rocket - debug - TLDebugModuleOuterAsync
https://mp.weixin.qq.com/s/PSeMVZjSjEFHJgCYZzfa9Q 简单介绍TLDebugModuleOuterAsync的实现. 1. dmi2tl dmi2tl是T ...
- Rocket - debug - TLDebugModuleInner - ROM Generation
https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...
- Rocket - debug - TLDebugModuleInner
https://mp.weixin.qq.com/s/jkiHceU0HaJbHGvHiU-QOA 简单介绍TLDebugModuleInner的实现. 1. 引入全局配置 1) cfg 引入Debu ...
- 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 ...
随机推荐
- D - Pearls HDU - 1300 斜率dp+二分
D - Pearls HDU - 1300 这个题目也是一个比较裸的斜率dp,依照之前可以推一下这个公式,这个很好推 这个注意题目已经按照价格升序排列序,所以还是前缀和还是单调的. sum[i] 表示 ...
- SpringBoot:模板引擎 thymeleaf、ContentNegotiatingViewResolver、格式化转换器
目录 模板引擎 thymeleaf ContentNegotiatingViewResolver 格式化转换器 模板引擎 thymeleaf.ContentNegotiatingViewResolve ...
- leetcode_雇佣 K 名工人的最低成本(优先级队列,堆排序)
题干: 有 N 名工人. 第 i 名工人的工作质量为 quality[i] ,其最低期望工资为 wage[i] . 现在我们想雇佣 K 名工人组成一个工资组.在雇佣 一组 K 名工人时,我们必须按照下 ...
- 【Spark】如何用Spark查询IP地址?
文章目录 需求 思路 ip地址转换为Long类型的两种方法 ip地址转换数字地址的原理 第一种方法 第二种方法 步骤 一.在mysql创建数据库表 二.开发代码 需求 日常生活中,当我们打开地图时,会 ...
- 【Scala】代码实现Actor多种需求
文章目录 简单实现Actor并发编程 使用Actor实现发送没有返回值的异步消息 使用Actor实现不间断消息发送 用react方法替代receive方法接收消息 结合case class,通过匹配不 ...
- Spring Cloud 系列之 Config 配置中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Config 配置中心(一) 本篇文章讲解 Config 如何实现配置中心自动刷新. 配置中心自动刷新 点击链接观看: ...
- Keycloak & Asp.net core webapi 整合跳坑之旅
前言 之前,一直使用IdentityServer4作为.net core程序的外部身份认证程序,ID4的优点自不必说了,缺点就是缺乏完善的管理界面. 后来,学习java quarkus框架时,偶然遇到 ...
- 存储过程——公用表表达式(CTE)
目录 0. 背景说明 1. 定义及语法细节 1.1 基本定义 1.2 基本语法 1.3 多个CTE同时声明 1.4 CTE嵌套使用 2. CTE递归查询 2.1 简介 2.2 准备工作 2.3 计算每 ...
- neo4j 图数据库安装及介绍
neo4j 图数据库安装及介绍 一.neo4j图数据库介绍 图数据库,顾名思义就是利用了"图的数据结构来作为数据存储逻辑体现的一种数据库",所以要想学好图数据库当然需要了解一些关于 ...
- linux --自已的域名无法登陆机器的解决办法:同步时间
昨天发现自己的域名无法访问host了,因此我们测试环境便无法安装,显示SSH not connectted ,随后发现时间不同步: 因此以下命令可以实现时间同步: /opt/quest/bin/vas ...