Rocket - debug - Example: Write Memory
https://mp.weixin.qq.com/s/on1LugO9fTFJstMes3T2Xg
介绍riscv-debug的使用实例:使用三种方法写内存。
1. Using System Bus Access
1) Write a word to memory
A. 写sbaddress0寄存器:写入目标内存地址;
B. 写sbdata0寄存器:写入要写入目标内存地址处的值;触发写内存动作:
2) Write a block of memory
A. 写sbcs寄存器:
a. sbaccess=2:访问大小是32bit;
b. sbautoincrement=1:sbaddress is incremented by the access size (in bytes) selected in sbaccess after every system bus access;
B. 写sbaddress0寄存器:写入目标内存地址;
C. 写sbdata0寄存器:写入要写入目标内存地址处的值;触发写内存动作;
D. 写sbdata0寄存器:写入要写入目标内存地址处的值;触发写内存动作;
E. 如此即可逐个把数据写入内存;
2. Using Program Buffer
1) Write a word to memory
A. 准备好Program Buffer:把寄存器s1中的数据写入寄存器s0中的内存地址中;
B. 写data0寄存器:写入目标内存地址;
C. 写command寄存器:写入要执行的抽象命令:把data0寄存器的值拷贝到寄存器s0中;
D. 写data0寄存器:写入待存数据;
E. 写command寄存器:写入要执行的抽象命令:
a. 把data0中的值拷贝到s1中;
b. postexec=1:执行完抽象命令之后,触发Program Buffer的执行;
2) Write a block of memory
A. 准备好Program Buffer:把寄存器s1中的数据写入寄存器s0中的内存地址中,然后把s0中的地址加4;
B. 写data0寄存器:写入目标内存地址;
C. 写command寄存器:写入要执行的抽象命令:把data0寄存器的值拷贝到寄存器s0中;
D. 写data0寄存器:写入待写数据;
E. 写command寄存器:写入要执行的抽象命令:
a. 把data0中的值拷贝到s1中;
b. postexec=1:执行完抽象命令之后,触发Program Buffer的执行;
F. 写abstractauto寄存器:读data0寄存器触发抽象命令的执行;
a. autoexecdata=1: When a bit in this field is 1, read or write accesses to the corresponding data word cause the command in command to be executed again.
G. 写data0寄存器:写入待写数据;触发抽象命令的执行;进而触发Program Buffer的执行;如此循环即可写入全部数据;
H. 最后清除abstractauto寄存器中的autoexecdata位;
3. Using Abstract Memory Access
1) Write a word to memory
A. 写data1寄存器:存入目标内存地址;
B. 写data0寄存器:写入待存数据;
C. 写command寄存器:存入要执行的抽象命令:
a. cmdtype=2:表示命令的类型为Access Memory;
b. aamsize=2:Access the lowest 32 bits of the memory location.
c. aamvirtual=0:Addresses are physical (to the hart they are performed on).
d. write=1:Copy data from arg0 portion of data into the memory location specified in arg1.
这条命令的效果是:把data0寄存器中的数据,写入data1中的地址中;
2) Write a block of memory
这里只介绍一下要点:
a. aampostincrement=1:每次访问完内存之后,都把data1寄存器中的地址加4;
b. abstractauto.autoexecdata=1:读写data0寄存器会触发抽象命令的执行;
Rocket - debug - Example: Write Memory的更多相关文章
- Rocket - debug - Example: Read Memory
https://mp.weixin.qq.com/s/ChXNTbx94WDC72GvmE9bGA 介绍riscv-debug的使用实例:使用三种方法读取内存. 1. Using System Bus ...
- Xcode6 运行程序后,右侧Debug区域的Memory显示空白解决方法
http://chenyh-blog.com/%E8%9B%8B%E7%96%BC%E7%9A%84%E5%86%85%E5%AD%98-%E7%AC%AC%E4%B8%89%E7%AF%87-sdw ...
- Rocket - debug - TLDebugModuleInner - Hart Bus Access
https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...
- Rocket - debug - Example: Triggers
https://mp.weixin.qq.com/s/zPNyrBOhsytkRrZTDTEvpw 介绍riscv-debug的使用实例:配置Triggers功能. 1. Trigger Trigge ...
- Rocket - debug - Periphery
https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw 简单介绍Periphery的实现. 1. ExportDebugDMI/ExportDebugJTA ...
- Rocket - debug - DebugTransport
https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...
- Rocket - debug - TLDebugModule
https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...
- Rocket - debug - TLDebugModuleInner - ROM Generation
https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...
- Rocket - debug - Example: DMI
https://mp.weixin.qq.com/s/7suuJ7m2BKCpsHk1K2FzJQ 介绍riscv-debug的使用实例:如何使用DMI. 1. dm Debug Module实现了调 ...
随机推荐
- Bootstrap初识
目录 概述 快速入门 响应式布局 CSS样式和JS插件 全局CSS样式 组件 插件 案例:黑马旅游网 概述 概念:一个前端开发的框架,Bootstrap是美国Twitter公司的设计师Mark Ott ...
- 视频文件自动转rtsp流
最近碰到一个项目需要用到 rtsp 视频流做测试, 由于真实环境的 摄像头 并不能满足需求,故尝试了一下用本地视频文件转换成rtsp视频流做测试,记录一下~ 采用方案: Docker + EasyDa ...
- php时间输出结果减去一分钟
如: <?=date("m-d H:i",strtotime($rs["kgtime"]));?> 假设结果是09-03-23:30,如何让它变成0 ...
- Coursera课程笔记----计算导论与C语言基础----Week 7
C语言中的数据成分(Week7) 内存 把内存想象成长带,带子上有许多方格,每个方格有8位(8bit) 2^10 = 1024 1B = 8 b 1KB = 1024Byte MB.GB.TB.PB- ...
- 【MySQL基础总结】运算符的使用
运算符的使用 算数运算符 比较运算符 结果只能为TRUE(1)或FALSE(0) 逻辑运算符 运算符的优先级 可以通过括号改变优先级 示例 算数运算符 比较运算符 逻辑运算符
- 安装stanfordcorenlp成功,import stanfordcorenlp失败,出现错误:importerror-no-module-named-psutil
1.问题描述 安装stanfordcorenlp成功,import stanfordcorenlp失败,pycharm中输入import stanfordcorenlp,然后运行,出现错误:impor ...
- u-boot: Not enough room for program headers, try linking with -N
在编译u-boot的时候出现了以下错误: arm-linux-gnueabi-ld.bfd: u-boot: Not enough room for program headers, try link ...
- 利用一个VI写入或读取另一个VI的控件值
利用一个VI写入或读取另一个VI的控件值(转载自浅浅的小草) 有一个VI,叫未命名1.vi. 还有一个vi,叫未命名2.vi 现在,我在 1.vi里要对2.vi的字符串控件进行写入. 可 ...
- [hdu5225]逆序对统计
题目:给定一个1到n的排列,求字典序小于这个排列的所有排列的逆序对数之和. 思路:既然是求字典序小于这个排列的,不妨将排列根据和它前k位相同来分类,然后枚举第k+1位的数(小于原序列第k+1位的数), ...
- 【Effective Java】第二章-创建和销毁对象——1.考虑用静态工厂方法代替构造器
静态工厂方法的优点: 可以赋予一个具有明确含义的名称 可以复用唯一实例,不必每次新建 可以返回原实例类型的子类对象 可以在返回泛型实例时更加简洁 缺点: 类如果不含有共有的或者受保护的构造器,就不能被 ...