https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA

简单介绍TLDebugModule中的实现。

1. device

device是一个设备描述符,包含了设备的各种信息:

2. dmOuter

dmOuter是一个TLDebugModuleOuterAsync模块:

其结构示意图如下:

3. dmInner

dmInner是一个TLDebugModuleInnerAsync模块:

其结构示意图如下:

4. node

node是dmInner.tlNode的别名:

5. intnode

intnode是dmOuter.intnode的别名:

6. 连接DMI同步接口

连接dmOuter的dmi同步接口(source)和dmInner的dmi同步接口(sink):

7. lazy val module

lazy val module实现了TLDebugModule的内部逻辑。

1) io

lazy val module定义了一组IO接口:

其示意图如下:

2) 为dmOuter指定时钟和复位信号

dmOuter模块使用外部供入的时钟和复位信号:

从目前的实现看,这里的外部是指TestHarness:

TestHarness是顶层模块,其reset信号是最外层的复位信号:

a. dut也就是RocketSystem的复位信号来自于TestHarness.reset和调试模块的ndreset;

b. TestHarness的复位信号和时钟信号同时也输出给dut.debug模块:

如果是不需要调试模块,则不需要驱动时钟信号,同时一直保持复位信号即可:

3) 内部连接

将io与dmOuter/dmInner相连,将dmOuter与dmInner相连:

8. 总结

TLDebugModule总体结构示意图(可以单独打开图片查看)如下:

其中:

a. TLDebugModuleOuterAsync使用外部供入的时钟和复位信号;

b. TLDebugModuleOuterAsync的io.innerCtrl连接到TLDebugModuleInnerAsync的io.innerCtrl,中间有时钟同步逻辑。io.innerCtrl中包含了调试器通过写DMCONTROL寄存器传递的控制信息;

c. io.ctrl.debugUnavail同时传递给TLDebugModuleOuterAsync和TLDebugModuleInnerAsync;只是TLDebugModuleOuterAsync中不使用;

d. dmOuter.intnode用于对核心发起中断请求,这里暂时没有连接;

e. dmInner.tlNode中包含了调试模式下核心要执行的代码,需要连接到核心的总线,并入核心的地址空间;

Rocket - debug - TLDebugModule的更多相关文章

  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 - TLDebugModuleInner - ROM Generation

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

  5. Rocket - debug - Example: DMI

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

  6. Rocket - debug - Example: Triggers

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

  7. Rocket - debug - Example: Accessing Registers Using Program Buffer

    https://mp.weixin.qq.com/s/8yYLVg-RXX3XX0T431lxeA 介绍riscv debug接口的使用实例:使用Program Buffer读取寄存器. 1. Wri ...

  8. Rocket - debug - Example: Accessing Registers Using Abstract Command

    https://mp.weixin.qq.com/s/RdJzE06mMkh2x__vVj_fEA 介绍riscv debug接口的使用实例:使用抽象命令读取寄存器. 1. Read s0 using ...

  9. Rocket - debug - TLDebugModuleInnerAsync

    https://mp.weixin.qq.com/s/Xf4VFTHIDFh1NHmfwlTX3w 简单介绍TLDebugModuleInnerAsync的实现. 1. dmInner dmInner ...

随机推荐

  1. 修改MySQL表中的字段属性

    登录数据库 >mysql -u root -p 数据库名称 查询所有数据表 mysql>show tables; 查询表的字段信息 mysql>desc 表名称; 1.修改某个表的字 ...

  2. Kubernetes管理员手边必备的9个kubectl命令

    导语:将这9个关键的kubectl命令放在手边,它们可以帮您快速排除故障并管理Kubernetes集群. Kubernetes是当今基础架构的主导技术,这意味着系统管理员需要熟悉其管理.多年来,笔者一 ...

  3. python--字典基本操作

    字典 格式  key  :value # string list dict#  1.取数据方便# 2.速度快, 定义一个空字典: d = dict() 或者 d = { } infos  =  {'n ...

  4. js 正则(部分)

    /** * 增加大于某个值的验证 */window.ParsleyValidator.addValidator( 'greater', function (value,greater) { if(is ...

  5. Python dict字典方法完全攻略(全)

    我们知道,Python 字典的数据类型为 dict,我们可使用 dir(dict) 来查看该类型包含哪些方法,例如: >>> dir(dict)['clear', 'copy', ' ...

  6. webpack指南(一)HRM+Tree Shaking

    参考:https://www.cnblogs.com/PasserByOne/p/12084323.html https://blog.csdn.net/qq593249106/article/det ...

  7. webpack配置篇

    开发环境(development)和生产环境(production)的构建目标差异很大.在开发环境中,我们需要具有强大的.具有实时重新加载(live reloading)或热模块替换(hot modu ...

  8. 曹工谈Spring Boot:Spring boot中怎么进行外部化配置,一不留神摔一跤;一路debug,原来是我太年轻了

    spring boot中怎么进行外部化配置,一不留神摔一跤:一路debug,原来是我太年轻了 背景 我们公司这边,目前都是spring boot项目,没有引入spring cloud config,也 ...

  9. 使用Xtrabackup进行MySQL备份 zz

    zz from  http://www.magedu.com/ 一.安装 1.简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对i ...

  10. fastDFS多线程并发执行出现的问题

    ---------------------  原作者:Java高级开发  来源:CSDN  原文:https://blog.csdn.net/hang1995/article/details/7924 ...