https://mp.weixin.qq.com/s/7suuJ7m2BKCpsHk1K2FzJQ

介绍riscv-debug的使用实例:如何使用DMI。

1. dm

Debug Module实现了调试模块。

2. dmi

Debug Module Interface是对Debug Module的访问接口。

3. DTM

dmi包含在DTM中。DTM是硬件接口相关的,可以是JTAG DTM,也可以是USB DTM。

4. JTAG DTM Registers

1) 支持的寄存器列表

a. 这里的address实际上是要存入IR中的指令编码;

b. 而这些寄存器则是数据寄存器(Data Register);

c. 使用存入IR中的指令编码来选择相应的数据寄存器(Data Register):

2) dmi Register

实现调试模块(Debug Module)访问的核心寄存器,用以实现对调试模块中各个寄存器的读写:

至于dmi寄存器自身,则通过JTAG接口进行访问:

a. 在IR中填入0x11,选择dmi数据寄存器;

b. In Update-DR, the DTM starts the operation specified in op unless the current status reported in op is sticky.

c. In Capture-DR, the DTM updates data with the result from that operation, updating op if the current op isn't sticky.

3) dmcs Register

用于对DTM进行控制以及获取状态:

5. 实例1:To read an arbitrary Debug Module register

A. scan 0x11 into IR,选择dmi数据寄存器;

B. 通过JTAG TDI引脚scan in a proper value for dmi数据寄存器:

a. with op set to 1,

b. and address set to the desired register address;

C. 在Update-DR状态,读操作开始执行;

Update-DR状态是把(可能是串行扫描入的)数据寄存器的值并行输出。这里就是把dmi寄存器的值并出到调试模块(Debug Module),进而促使调试模块开始执行dmi中指定的操作。

D. 在Capture-DR状态,读dmi寄存器的data域,获取返回的目标寄存器中的数据;

Capture-DR状态是把数据并行存入数据寄存器中,这里就是把调试模块返回的数据并行存入到dmi寄存器中。

E. 返回的不只有dmi.data,还有dmi.op,根据op是否为0来确认返回的数据是否合法。

F. 如果返回的数据不合法,则需要更新IR,选择dmcs数据寄存器,将dmireset写1清除op,方便下次再次在Capture-DR状态读取dmi寄存器,获取调试模块返回的目标寄存器的数据;

G. 如此循环,并根据此次访问的经验,来确定下一次在操作开始到返回数据之间应该等多长时间。

6. 实例2:To write an arbitrary Debug Bus register

A. scan 0x11 into IR,选择dmi数据寄存器;

B. 通过JTAG TDI引脚scan in a proper value for dmi数据寄存器:

a. with op set to 2,

b. and address and data set to the desired register address and data respectively;

C. 接下来的操作与读寄存器一样;

7. almost never scan IR?

这里说几乎不需要扫描IR,言过其实。因为要不停的扫描IR切换dmi和dmcs数据寄存器,读取数据、确定数据是否合法。

如果等待的时间合适,刚好在Capture-DR状态返回的op=0,那么就不需要切换。也就不需要更改IR的值。所以这个“almost never”应该是指最开始学习等待时间时需要使用,而后可能都不需要了。

Rocket - debug - Example: DMI的更多相关文章

  1. Rocket - debug - TLDebugModuleInner - DMI Register Control and Status

    https://mp.weixin.qq.com/s/tI41wu0xaIQ5PRq6F82tNw 简单介绍TLDebugModuleInner中生成DMI控制和状态寄存器使用到的状态. 1. abs ...

  2. Rocket - debug - DMI

    https://mp.weixin.qq.com/s/70BoeS7z4aBZK24zxdZzXA 简单介绍DMI的实现. 1. DMIConsts 定义DMI使用的常量: 其中: a. dmiDat ...

  3. Rocket - debug - Periphery

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

  4. Rocket - debug - DebugTransport

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

  5. Rocket - debug - TLDebugModule

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

  6. Rocket - debug - TLDebugModuleInner - Hart Bus Access

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

  7. Rocket - debug - TLDebugModuleOuterAsync

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

  8. Rocket - debug - TLDebugModuleInner - ROM Generation

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

  9. Rocket - debug - TLDebugModuleInner - Program Buffer Access

    https://mp.weixin.qq.com/s/EJVqw7JPjjaib68tENl5AQ 简单介绍TLDebugModuleInner中的Program Buffer Access. 1. ...

随机推荐

  1. 在web中使用shiro(会话管理,登出,shiro标签库的使用)

    在shiro的主配置文件中配置,登出的请求经过的过滤器就可以了,在shiro的过滤器中有一个名称为logout的过滤 器专门为我们处理登出请求: 一.shiro会话管理器 shiro中也提供了类似于w ...

  2. 【Scala】isInstanceOf 与 classOf的对比,代码+注解简洁明了

    class Animal { } class Cat extends Animal { } object Cat { def main(args: Array[String]): Unit = { / ...

  3. vue-cli3.0读取外部化配置文件来修改公共路径

    之前我写过一篇通过nginx配置代理转发的博客,正常来说也是正确的,但不足之处在了甲方还用了F5负载均衡和gateway来代理转发.所以之前我认为的请求->nginx转发代理->后端服务, ...

  4. 「从零单排HBase 10」HBase集群多租户实践

    在HBase1.1.0发布之前,HBase同一集群上的用户.表都是平等的,大家平等共用集群资源.容易碰到两个问题: 一是某些业务较其他业务重要,需要在资源有限的情况下优先保证核心重要业务的正常运行 二 ...

  5. Mysql常用sql语句(18)- union 全连接

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 其实Mysql并没有全连接,Oracle才有全连 ...

  6. 帝国cms列表页内容简介字段smalltext去除里面html格式代码 设置方法

    帝国cms列表页内容简介字段smalltext去除里面html格式代码帝国cms列表页调用内容简介出现html代码怎么办 近来在用帝国cms的时候,发现一个问题,在列表页调用产品简介的时候出现了这种h ...

  7. Hive环境搭建和SparkSql整合

    一.搭建准备环境 在搭建Hive和SparkSql进行整合之前,首先需要搭建完成HDFS和Spark相关环境 这里使用Hive和Spark进行整合的目的主要是: 1.使用Hive对SparkSql中产 ...

  8. 这或许是最详细的JUC多线程并发总结

    多线程进阶---JUC并发编程 完整代码传送门,见文章末尾 1.Lock锁(重点) 传统 Synchronizd package com.godfrey.demo01; /** * descripti ...

  9. Navicat15 for Mysql激活教程

    1.下载Navicat Premium Navicat15链接:http://www.navicat.com.cn/download/navicat-premium,选择相应版本,这里选择window ...

  10. python mysql数据库基本操作方法

    实现:使用Python实现用户登录,如果用户存在(数据库表中存在)则登录成功(假设该用户已在数据库中) import pymysql username = input('输入用户名:').strip( ...