Rocket - debug - Example: Accessing Registers Using Program Buffer
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的更多相关文章
- Rocket - debug - Example: Accessing Registers Using Abstract Command
https://mp.weixin.qq.com/s/RdJzE06mMkh2x__vVj_fEA 介绍riscv debug接口的使用实例:使用抽象命令读取寄存器. 1. Read s0 using ...
- Rocket - debug - TLDebugModuleInner - Program Buffer Access
https://mp.weixin.qq.com/s/EJVqw7JPjjaib68tENl5AQ 简单介绍TLDebugModuleInner中的Program Buffer Access. 1. ...
- Rocket - debug - TLDebugModuleInner - Program Buffer
https://mp.weixin.qq.com/s/kjhJJ3moRQzxHt6pJOXEgg 简单介绍TLDebugModuleInner中Program Buffer寄存器的实现. 1. pr ...
- Rocket - debug - TLDebugModuleInner
https://mp.weixin.qq.com/s/jkiHceU0HaJbHGvHiU-QOA 简单介绍TLDebugModuleInner的实现. 1. 引入全局配置 1) cfg 引入Debu ...
- Rocket - debug - TLDebugModuleOuter
https://mp.weixin.qq.com/s/9nMo6IYmDCz7S-ALFx824g 简单介绍TLDebugModuleOuter的实现. 1. DebugModuleAccessTyp ...
- Rocket - debug - TLDebugModuleInner - DMI Register Control and Status
https://mp.weixin.qq.com/s/tI41wu0xaIQ5PRq6F82tNw 简单介绍TLDebugModuleInner中生成DMI控制和状态寄存器使用到的状态. 1. abs ...
- Rocket - debug - TLDebugModuleInner - Abstract Command Decoding & Generation
https://mp.weixin.qq.com/s/0zKSTktxgzo5uCUphqaWSQ 介绍抽象命令的解码和生成. 1. accessRegisterCommandReg accessRe ...
- Rocket - debug - Example: Quick Access
https://mp.weixin.qq.com/s/SxmX-CY2tqvEqZuAg-EXiQ 介绍riscv-debug的使用实例:配置Quick Access功能. 1. Quick Acce ...
- Rocket - debug - Example: Write Memory
https://mp.weixin.qq.com/s/on1LugO9fTFJstMes3T2Xg 介绍riscv-debug的使用实例:使用三种方法写内存. 1. Using System Bus ...
随机推荐
- M - Little Pony and Harmony Chest 状压dp
M - Little Pony and Harmony Chest 怎么感觉自己越来越傻了,都知道状态的定义了还没有推出转移方程. 首先这个a的范围是0~30 这里可以推出 b数组的范围 0~60 ...
- webpack-基础知识
一.webpack介绍 webpack是一个前端模块化工具,简单解释:webpack就是处理多个文件,根据设置的规则,对文件进行合并和修改. 正式说:webpack是一个模块化打包工具.从入口模块出发 ...
- [LA7139 Rotation(2014 shanghai onsite)]二维树状数组
题意:有一个n*m的矩形,一辆车从左上角出发,沿一条路径走,路径是由矩形上每个单元格的边构成的,最后回到左上角,求车子在每个格子转过圈数的平方和. 思路:假设需要记录每个格子转的顺时针的圈数(为负表示 ...
- Linux vim 常用命令(不定时update)
1.退出 先esc 再:q 2.保存退出 先Esc 再:wq 3.强制退出 先Esc 再:q! 4.寻找关键字 先 shift+ 再/keyword 5.查看行数 set nu 6.跳到指定行(例如 ...
- 学习Echarts:(二)异步加载更新
这部分比较简单,对图表的异步加载和更新,其实只是异步获取数据然后通过setOption传入数据和配置而已. $.get('data.json').done(function (data) { myCh ...
- String的正则函数
String的正则函数: 查找敏感词: 4种情况 1. 查找一个固定的敏感词的位置i: var i=str.indexOf("敏感词",fromi) 在str中,从fromi位置开 ...
- 14.5 Go 爬虫
14.5 Go 爬虫 爬虫库/框架 henrylee2cn/pholcus 幽灵蛛 星5200 gocrawl 星1700 colly 星7169 hu17889/go_spider 星1400 go ...
- linux常用命令---中英文设置
中英文设置 LANG变量 echo $LANG---------查看当前编码 locale -----------------设置之后可查看详细信息 中文设置 # vim /etc/profile.d ...
- 使用Xtrabackup进行MySQL备份 zz
zz from http://www.magedu.com/ 一.安装 1.简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对i ...
- POJ3436
题目链接:http://poj.org/problem?id=3436 题目大意: 一台电脑可以分成P个部分,在生产过程中,半成品电脑有的部分已经完成(记为1),而有的部分还没有完成(记为0).电脑生 ...