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. B - Lawrence HDU - 2829 斜率dp dp转移方程不好写

    B - Lawrence HDU - 2829 这个题目我觉得很难,难在这个dp方程不会写. 看了网上的题解,看了很久才理解这个dp转移方程 dp[i][j] 表示前面1~j 位并且以 j 结尾分成了 ...

  2. 面试官:小伙子,听说你看过ThreadLocal源码?(万字图文深度解析ThreadLocal)

    前言 Ym8V9H.png (高清无损原图.pdf关注公众号后回复 ThreadLocal 获取,文末有公众号链接) 前几天写了一篇AQS相关的文章:我画了35张图就是为了让你深入 AQS,反响不错, ...

  3. MySQL——关于索引的总结

    索引的优缺点 首先说说索引的优点:最大的好处无疑就算提高查询效率.有的索引还能保证数据的唯一性,比如唯一索引. 而它的坏处很明显:索引也是文件,我们在创建索引时,也会创建额外的文件,所以会占用一些硬盘 ...

  4. Spark离线日志分析,连接Spark出现报错

    首先,我的代码是这样的 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object ...

  5. 【Linux基础总结】Linux基本命令

    Linux基本命令 Linux系统下的文件类型.权限.所属用户与组 文件类型 - (文件) d(目录) ->类似windows系统下的文件夹 l (链接) ->类似windows系统下的快 ...

  6. 深度剖析西门子PLC的开放式TCP通信

    对于自控或电气工程师来说,西门子PLC是每个人都非常熟悉的一款PLC品牌:而对于上位机开发工程师来说,Socket通信或TCP/IP协议也是必须要掌握的一种通信方式.刚好手头有一款西门子的200Sma ...

  7. JDBC11 封装+资源配置文件管理

    封装为Utils类+程序资源文件去配置 public class Utils { static Properties p=null; static { p=new Properties(); try ...

  8. jQuery学习笔记——jQuery基础核心

    代码风格 在jQuery程序中,不管是页面元素的选择.内置的功能函数,都是美元符号“$”来起始的.而这个“$”就是jQuery当中最重要且独有的对象:jQuery对象,所以我们在页面元素选择或执行功能 ...

  9. 【图论算法】LCA最近公共祖先问题

    LCA模板题https://www.luogu.com.cn/problem/P3379题意理解 对于有根树T的两个结点u.v,最近公共祖先LCA(u,v)表示一个结点x,满足x是u.v的祖先且x的深 ...

  10. 题解 洛谷P2959 【[USACO09OCT]悠闲漫步The Leisurely Stroll】

    原题:洛谷P2959 不得不说这道题的图有点吓人,但实际上很多都没有用 通过题上说的“三岔路口”(对于每一个节点有三条连接,其中一条连接父节点,另外两条连接子节点)和数据,可以那些乱七八糟的路和牧场看 ...