https://mp.weixin.qq.com/s/8yYLVg-RXX3XX0T431lxeA

介绍riscv debug接口的使用实例:使用Program Buffer读取寄存器。

1. Write mstatus using program buffer

1) csrw s0 MSTATUS

csrw用于写CSR,这里是把s0写入到mstatus中。

2) ebreak

ebreak被debugger用于把控制权返回给调试环境,这里就是执行完Program Buffer中的程序之后,执行ebreak指令,返回调试环境。

3) Program Buffer

Program Buffer用于存放一小段程序,让被暂停的核心执行:

Program Buffer可以与抽象命令结合使用,使能抽象命令中的postexec位,在执行完该抽象命令后即可执行一次Program Buffer中的指令:

Program Buffer中的指令执行完成之后,需要执行ebreak指令返回调试环境:

4) progbuf0

从progbuf0开始的一组寄存器用于提供对Program Buffer的访问,可访问的寄存器数量取决于progbufsize的值。

5) postexec of Accessing Register Abstract Command

当抽象命令用于访问寄存器时,有一位用于使能postexec。其取值决定了执行完该抽象命令后,是否执行Program Buffer中的指令。

6) 实例

首先,准备Program Buffer:

a. 把指令csrw s0, mstatus写入progbuf0;

b. 把指令ebreak写入progbuf1;

其次,准备抽象命令:

c. 把要写入mstatus寄存器的数值写入到data0寄存器;

d. 写command寄存器,执行抽象命令:把data0中的数据,写入到s0寄存器(x8, regno=0x1008);该抽象命令中,postexec置位,即:在执行完该抽象命令后,执行Program Buffer中的指令。

总结一下,写寄存器过程如下:

a. 把数据写入data0;

b. 执行抽象命令,把data0中的数据,写入到s0;

c. 执行Program Buffer中的csrw指令,把s0写入到mstatus;

d. 执行Program Buffer中的ebreak指令,返回调试环境;

2. Read f1 using program buffer

1) fmv

该指令在riscv-spec中定义,用于在浮点寄存器和整型寄存器之间转移数据:

2) 实例

首先,准备Program Buffer:

a. 把指令fmv.x.s s0, f1写入progbuf0;

b. 把指令ebreak写入progbuf1;

其次,执行抽象命令:

c. 把command寄存器中的postexec置位,transfer=0表明抽象命令不执行传输任务,也就是comand只用于触发执行Program Buffer中的指令;指令执行完之后,f1的值被移动到s0;

d. 写command寄存器,transfer=1, write=0,表示该抽象命令是读寄存器;regno=0x1008表示把s0寄存器的值传入data0中;

e. 读取data0寄存器即可获取到从f1传过来的数据;

Rocket - debug - Example: Accessing Registers Using Program Buffer的更多相关文章

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

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

  2. Rocket - debug - TLDebugModuleInner - Program Buffer Access

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

  3. Rocket - debug - TLDebugModuleInner - Program Buffer

    https://mp.weixin.qq.com/s/kjhJJ3moRQzxHt6pJOXEgg 简单介绍TLDebugModuleInner中Program Buffer寄存器的实现. 1. pr ...

  4. Rocket - debug - TLDebugModuleInner

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

  5. Rocket - debug - TLDebugModuleOuter

    https://mp.weixin.qq.com/s/9nMo6IYmDCz7S-ALFx824g 简单介绍TLDebugModuleOuter的实现. 1. DebugModuleAccessTyp ...

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

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

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

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

  8. Rocket - debug - Example: Quick Access

    https://mp.weixin.qq.com/s/SxmX-CY2tqvEqZuAg-EXiQ 介绍riscv-debug的使用实例:配置Quick Access功能. 1. Quick Acce ...

  9. Rocket - debug - Example: Write Memory

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

随机推荐

  1. HTTPS GET | POST | DELETE 请求

    依赖: <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp& ...

  2. 【Hadoop离线基础总结】oozie定时任务设置

    目录 简介 概述 oozie定时任务设置 1.拷贝定时任务的调度模板 拷贝hello.sh脚本 3.修改配置文件 4.上传到hdfs对应路径 5.运行定时任务 简介 概述 在oozie当中,主要是通过 ...

  3. 第一行Kotlin系列(三)Intent 向上一页返回数据onActivityResult的使用

    1.MainActivity.kt跳转处理 声明全局的按钮对象 private lateinit var button8: Button 实例化按钮对象 button8 = findViewById( ...

  4. FPGA的“可编程”使你迷惑吗?

    http://www.alteraforum.com.cn/showtopic-7791.aspx FPGA的“可编程”使你迷惑吗?   任何一个硬件工程师对FPGA都不会陌生,就好比C语言对于软件工 ...

  5. SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter

    SpringBoot解析Json格式数据 @ResponseBody 注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化 1.创建C ...

  6. python --分隔符split()

    描述: python split()是通过指定分隔符对字符串进行切片,且可以指定分隔n+1个字符串. 语法: str.split(str="",num=string.count(s ...

  7. Postman学习宝典(一)

    前言:网上看到的比较好的Postman教程,既然已经有了,我就不重复造轮子了,直接copy过来. 资源来源于:米阳MeYoung Postman 入门1- 安装.变量.代理 简介 Postman 是一 ...

  8. react-debug

    最近练习react的时候遇到一些问题: 在redux模式下,同一个api依据参数获取不同data的时候,返回的data相同 原因:多次调用该接口时,action的type相同,导致对应于该接口的每个r ...

  9. JS的函数和对象二

    复习 递归,在函数内部调用自身  return 匿名函数  function(){   } 创建函数,函数表达式  var fn=function(){   } 自调用   (function(){ ...

  10. Appium自动化(13) - 详解 Keyboard 类里的方法和源码分析

    如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 Keyboard  类在 a ...