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的更多相关文章

  1. Rocket - debug - TLDebugModuleInner - Hart Bus Access

    https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...

  2. Rocket - debug - Periphery

    https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw 简单介绍Periphery的实现. 1. ExportDebugDMI/ExportDebugJTA ...

  3. Rocket - debug - DebugTransport

    https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...

  4. Rocket - debug - TLDebugModule

    https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...

  5. Rocket - debug - TLDebugModuleOuterAsync

    https://mp.weixin.qq.com/s/PSeMVZjSjEFHJgCYZzfa9Q 简单介绍TLDebugModuleOuterAsync的实现. 1. dmi2tl dmi2tl是T ...

  6. Rocket - debug - TLDebugModuleInner - ROM Generation

    https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...

  7. Rocket - debug - TLDebugModuleInner

    https://mp.weixin.qq.com/s/jkiHceU0HaJbHGvHiU-QOA 简单介绍TLDebugModuleInner的实现. 1. 引入全局配置 1) cfg 引入Debu ...

  8. Rocket - debug - Example: DMI

    https://mp.weixin.qq.com/s/7suuJ7m2BKCpsHk1K2FzJQ 介绍riscv-debug的使用实例:如何使用DMI. 1. dm Debug Module实现了调 ...

  9. Rocket - debug - Example: Triggers

    https://mp.weixin.qq.com/s/zPNyrBOhsytkRrZTDTEvpw 介绍riscv-debug的使用实例:配置Triggers功能. 1. Trigger Trigge ...

随机推荐

  1. D - Pearls HDU - 1300 斜率dp+二分

    D - Pearls HDU - 1300 这个题目也是一个比较裸的斜率dp,依照之前可以推一下这个公式,这个很好推 这个注意题目已经按照价格升序排列序,所以还是前缀和还是单调的. sum[i] 表示 ...

  2. SpringBoot:模板引擎 thymeleaf、ContentNegotiatingViewResolver、格式化转换器

    目录 模板引擎 thymeleaf ContentNegotiatingViewResolver 格式化转换器 模板引擎 thymeleaf.ContentNegotiatingViewResolve ...

  3. leetcode_雇佣 K 名工人的最低成本(优先级队列,堆排序)

    题干: 有 N 名工人. 第 i 名工人的工作质量为 quality[i] ,其最低期望工资为 wage[i] . 现在我们想雇佣 K 名工人组成一个工资组.在雇佣 一组 K 名工人时,我们必须按照下 ...

  4. 【Spark】如何用Spark查询IP地址?

    文章目录 需求 思路 ip地址转换为Long类型的两种方法 ip地址转换数字地址的原理 第一种方法 第二种方法 步骤 一.在mysql创建数据库表 二.开发代码 需求 日常生活中,当我们打开地图时,会 ...

  5. 【Scala】代码实现Actor多种需求

    文章目录 简单实现Actor并发编程 使用Actor实现发送没有返回值的异步消息 使用Actor实现不间断消息发送 用react方法替代receive方法接收消息 结合case class,通过匹配不 ...

  6. Spring Cloud 系列之 Config 配置中心(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Config 配置中心(一) 本篇文章讲解 Config 如何实现配置中心自动刷新. 配置中心自动刷新 点击链接观看: ...

  7. Keycloak & Asp.net core webapi 整合跳坑之旅

    前言 之前,一直使用IdentityServer4作为.net core程序的外部身份认证程序,ID4的优点自不必说了,缺点就是缺乏完善的管理界面. 后来,学习java quarkus框架时,偶然遇到 ...

  8. 存储过程——公用表表达式(CTE)

    目录 0. 背景说明 1. 定义及语法细节 1.1 基本定义 1.2 基本语法 1.3 多个CTE同时声明 1.4 CTE嵌套使用 2. CTE递归查询 2.1 简介 2.2 准备工作 2.3 计算每 ...

  9. neo4j 图数据库安装及介绍

    neo4j 图数据库安装及介绍 一.neo4j图数据库介绍 图数据库,顾名思义就是利用了"图的数据结构来作为数据存储逻辑体现的一种数据库",所以要想学好图数据库当然需要了解一些关于 ...

  10. linux --自已的域名无法登陆机器的解决办法:同步时间

    昨天发现自己的域名无法访问host了,因此我们测试环境便无法安装,显示SSH not connectted ,随后发现时间不同步: 因此以下命令可以实现时间同步: /opt/quest/bin/vas ...