https://mp.weixin.qq.com/s/RdJzE06mMkh2x__vVj_fEA

介绍riscv debug接口的使用实例:使用抽象命令读取寄存器。

1. Read s0 using abstract command

1) abstract command

抽象命令,Debug模块支持一些可选的抽象命令。一般情况下,debugger执行命令时,CPU核心是被暂停的:

命令是否支持只能通过执行之后判断返回的错误码来确定:

debugger通过写command寄存器来执行命令:

使用data寄存器进行传参和接收返回值:

目前支持的抽象命令有三种:

2) command寄存器

3) Access Register Command

如果抽象命令是访问寄存器,那么command寄存器的格式如下:

在当前这个实例中:

a. aarsize=2:表示Access the lowest 32 bits of the register;

b. transfer=1:表示Do the operation specied by write;

c. write=0:表示Copy data from the specified register into arg0 portion of data,即把目标寄存器的数据拷贝到data0;

d. regno=0x1008:这应该是寄存器s0的编号;

4) s0

s0在riscv-spec中定义:

s0是ABI中使用的助记词,原名是x8:

x8是一个GPR,即General Purpose Register,通用寄存器的意思:

根据regno的描述,寄存器的编号在Table 3.3中定义:

GPRs的范围是0x1000-0x101f,刚好32个。可以推知,x8的编号是0x1008。

5) 实例

这里实例的用意就很好理解了:

a. 写command寄存器,表明把regno=0x1008也就是寄存器s0的值传输到data0寄存器中;

b. 然后读取data0,获取s0的值;

当然这里面省略了一些步骤,比如读取cmderr判断命令执行结果等等。

2. Write mstatus using abstract command

1) Access Register command

在这个实例的命令中:

a. aarsize=2:表示Access the lowest 32 bits of the register;

b. transfer=1:表示Do the operation specied by write;

c. write=1:表示Copy data from arg0 portion of data into the specified register.,即把data0的数据拷贝到目标寄存器;

d. regno=0x300:这应该是寄存器mstatus的编号;

2) mstatus

根据regno使用的表格即Table 3.3,CSR的范围在0x0000-0x0fff。

mstatus在riscv-priviledged规范中定义,即Machine Status Register。其格式如下:

其编号为0x300:

所以这里使用的mstatus的regno=0x0000+0x300=0x300.

3) 实例

a. 首先把要写到mstatus的数据写入到寄存器data0;

b. 然后写command寄存器,执行写寄存器命令,把data0中的数据写入到mstatus寄存器中;

当然,这里面也省略了一些步骤。

Rocket - debug - Example: Accessing Registers Using Abstract Command的更多相关文章

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

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

  2. Rocket - debug - TLDebugModuleInner

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

  3. Rocket - debug - Example: Read Memory

    https://mp.weixin.qq.com/s/ChXNTbx94WDC72GvmE9bGA 介绍riscv-debug的使用实例:使用三种方法读取内存. 1. Using System Bus ...

  4. Rocket - debug - TLDebugModuleInner - Abstract Command Decoding & Generation

    https://mp.weixin.qq.com/s/0zKSTktxgzo5uCUphqaWSQ 介绍抽象命令的解码和生成. 1. accessRegisterCommandReg accessRe ...

  5. Rocket - debug - TLDebugModuleInner - Abstract Command State Machine

    https://mp.weixin.qq.com/s/RcXI8uEHvZHGCvX3DoVR4Q 简单介绍TLDebugModuleInner中处理抽象命令时的状态机. 1. CtrlState 定 ...

  6. Rocket - debug - TLDebugModuleInner - Abstract Data

    https://mp.weixin.qq.com/s/DOLkEi-_qQt6lWOhJ2hxVQ 简单介绍TLDebugModuleInner中抽象数据寄存器的实现. 1. abstractData ...

  7. Rocket - debug - TLDebugModuleInner - COMMAND

    https://mp.weixin.qq.com/s/Lz_D43YdhbRhiGiyoCBxDg 简单介绍TLDebugModuleInner中COMMAND寄存器的实现. 1. COMMANDRe ...

  8. Rocket - debug - dm registers

    https://mp.weixin.qq.com/s/P48K17TyRoZC7xBMltbXKQ 简单介绍调试模块中每个寄存器的定义. 1. DMI_RegAddrs 记录DMI访问的各个寄存器的地 ...

  9. Rocket - debug - TLDebugModuleInner - ROM Generation

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

随机推荐

  1. Edge Weight Assignment(树-异或-贪心)

    大意: 给定一棵无根树,要求你任意设置n-1条边的边权. 使得任意叶子节点间边权的XOR值为0: 此时,令f为所有边权数值不同的个数,求最小的f和最大的f. \(\color{Red}{------- ...

  2. tp5中提示错误A non well formed numeric value encountered

    问题因为自动完成时间导致的 原来我的数据库是这样的 修改成下面这样就好了

  3. dbcp数据源连接池

    一.数据源连接池 我们之前利用jdbc连接数据库,每次都要创建连接对象,销毁连接对象,如果并发访问量比较大,这样肯定比较辣 浪费数据库的效率,我们可以像之前mybatis中缓存查询到的数据一样,可以把 ...

  4. 前后端bug定位

    否一致一个商品状态为status,待上架status=0,上架中status=1,下架status=2 前端bug:如:一个商品上架成功后,数据库显示的状态status=1,这时候可能是前端对应值的定 ...

  5. 多线程高并发编程(8) -- Fork/Join源码分析

    一.概念 Fork/Join就是将一个大任务分解(fork)成许多个独立的小任务,然后多线程并行去处理这些小任务,每个小任务处理完得到结果再进行合并(join)得到最终的结果. 流程:任务继承Recu ...

  6. X Error:BadDrawable (individ Pixmap or Window parameter 9)

    #描述 平台:aarch64 系统:ubuntu16.04.02 Qt Version:4.8.7 Qt程序可以正常运行,界面渲染出现问题以及乱码,控制提示错误内容: "unable to ...

  7. 这些Kubernetes常见安全问题,你遇到过几个?

    导语:在 Threat Stack 公布的2020年第一季度安全报告中,列举了在AWS Web服务部署Kubernetes的组织所遇到的最常见安全问题. 该报告建议已部署Kubernetes的IT组织 ...

  8. mybatis 自动生成代码工具

    配置官网: http://www.mybatis.org/generator/configreference/xmlconfig.html 源码:https://github.com/mybatis/ ...

  9. 使用windows(win7和win10),最好用chocolatey

    Win10平台使用PowerShell命令行choco来安装所需开源软件. 步骤如下: 打开Chocolatey 官方网站,The package manager for windows,这很巨硬. ...

  10. python之模块、类、对象

    模块就像字典 字典是python中唯一映射关系,它用一个事物对应另外一个事物,也就是所谓的key->value. 模块包含一些变量和函数,可以导入,并且可以用点(·)来操作访问变量和函数. 记住 ...