Rocket - debug - Example: Accessing Registers Using Abstract Command
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的更多相关文章
- Rocket - debug - Example: Accessing Registers Using Program Buffer
https://mp.weixin.qq.com/s/8yYLVg-RXX3XX0T431lxeA 介绍riscv debug接口的使用实例:使用Program Buffer读取寄存器. 1. Wri ...
- Rocket - debug - TLDebugModuleInner
https://mp.weixin.qq.com/s/jkiHceU0HaJbHGvHiU-QOA 简单介绍TLDebugModuleInner的实现. 1. 引入全局配置 1) cfg 引入Debu ...
- Rocket - debug - Example: Read Memory
https://mp.weixin.qq.com/s/ChXNTbx94WDC72GvmE9bGA 介绍riscv-debug的使用实例:使用三种方法读取内存. 1. Using System Bus ...
- Rocket - debug - TLDebugModuleInner - Abstract Command Decoding & Generation
https://mp.weixin.qq.com/s/0zKSTktxgzo5uCUphqaWSQ 介绍抽象命令的解码和生成. 1. accessRegisterCommandReg accessRe ...
- Rocket - debug - TLDebugModuleInner - Abstract Command State Machine
https://mp.weixin.qq.com/s/RcXI8uEHvZHGCvX3DoVR4Q 简单介绍TLDebugModuleInner中处理抽象命令时的状态机. 1. CtrlState 定 ...
- Rocket - debug - TLDebugModuleInner - Abstract Data
https://mp.weixin.qq.com/s/DOLkEi-_qQt6lWOhJ2hxVQ 简单介绍TLDebugModuleInner中抽象数据寄存器的实现. 1. abstractData ...
- Rocket - debug - TLDebugModuleInner - COMMAND
https://mp.weixin.qq.com/s/Lz_D43YdhbRhiGiyoCBxDg 简单介绍TLDebugModuleInner中COMMAND寄存器的实现. 1. COMMANDRe ...
- Rocket - debug - dm registers
https://mp.weixin.qq.com/s/P48K17TyRoZC7xBMltbXKQ 简单介绍调试模块中每个寄存器的定义. 1. DMI_RegAddrs 记录DMI访问的各个寄存器的地 ...
- Rocket - debug - TLDebugModuleInner - ROM Generation
https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...
随机推荐
- spring源码解析--上
本文是作者原创,版权归作者所有.若要转载,请注明出处. 首先是配置类 package com.lusai.config; import org.springframework.context.anno ...
- [zoj3593]扩展欧几里得+三分
题意:给一个数A,有6种操作,+a,-a,+b,-b,+(a+b),-(a+b),每次选择一种,用最少的次数变成B. 思路:由于不同的操作先后顺序对最后的结果没有影响,并且加一个数与减一个相同的数不能 ...
- Istio的流量管理(实操一)(istio 系列三)
Istio的流量管理(实操一)(istio 系列三) 使用官方的Bookinfo应用进行测试.涵盖官方文档Traffic Management章节中的请求路由,故障注入,流量迁移,TCP流量迁移,请求 ...
- [Vue warn]: Missing required prop: "value"
tips vue中遇到这个问题 真的是很苦恼 一点一点排查 ,最后发现是因为我在 select的option中写了个默认值 ,所以才报这个错误 注释:去掉默认值那个option 选项就不报错了
- 瞬间教你学会使用java中list的retainAll方法
retainAll方法简介 当我们有两个list集合的时候,我们可以使用retainAll方法求得两个list集合的子集.retainAll是Collection接口中提供的一个方法,各个实现类有自己 ...
- JVM 调优测试 之 故意分配小的堆空间,观察gc回收打印的内容
测试代码如下: @Test public void testPrintGcDetail(){ HashMap<String, List> gcMap = new HashMap<&g ...
- Java ThreadLocal解析
简介 ThreadLocal 类似局部变量,解决了单个线程维护自己线程内的变量值(存.取.删),让线程之间的数据进行隔离.(InheritableThreadLocal 特例) 这里涉及三个类,Thr ...
- python--遇到SyntaxError: Non-UTF-8 code starting with '\xb8' in file
在运行python中因为添加了中文注释,遇到SyntaxError: Non-UTF-8 code starting with '\xb8' in file 经过百度,说是Python的默认编码格式是 ...
- 暴力破解-HTTP Basic认证
0x01 HTTP Basic认证介绍 基本认证 basic authentication ← HTTP1.0提出的认证方法 基本认证步骤: 1. 客户端访问一个受http基本认证保护的资源. 2. ...
- 关于QQ可以发消息但是网页刷不出来问题
相信很多人都遇到过这个问题,明明可以登陆QQ,但是网页就是打不开,而且这种情况经常伴有网卡图标显示叹号的情况.笔者这里就教你一个方法,保证好用. 首先,在开始菜单输入cmd,在命令符模式下点击右键选择 ...