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的更多相关文章

  1. Rocket - debug - Example: Read Memory

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

  2. 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 ...

  3. Rocket - debug - TLDebugModuleInner - Hart Bus Access

    https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...

  4. Rocket - debug - Example: Triggers

    https://mp.weixin.qq.com/s/zPNyrBOhsytkRrZTDTEvpw 介绍riscv-debug的使用实例:配置Triggers功能. 1. Trigger Trigge ...

  5. Rocket - debug - Periphery

    https://mp.weixin.qq.com/s/uGxn-Xec0LkwdaSsCtQBvw 简单介绍Periphery的实现. 1. ExportDebugDMI/ExportDebugJTA ...

  6. Rocket - debug - DebugTransport

    https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...

  7. Rocket - debug - TLDebugModule

    https://mp.weixin.qq.com/s/EhUb1z5oiIw6dJ-90ifDJA 简单介绍TLDebugModule中的实现. 1. device device是一个设备描述符,包含 ...

  8. Rocket - debug - TLDebugModuleInner - ROM Generation

    https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...

  9. Rocket - debug - Example: DMI

    https://mp.weixin.qq.com/s/7suuJ7m2BKCpsHk1K2FzJQ 介绍riscv-debug的使用实例:如何使用DMI. 1. dm Debug Module实现了调 ...

随机推荐

  1. Dreamoon Likes Coloring(模拟+构造)

    \(这题刚好撞到我的思路了,但是因为模拟......我看了几十遍测试数据....\) $首先当\sum_^m$小于n时一定无解 大于呢?那我们就要浪费一些区间(覆盖一些点,也就是多出来的点) 但是又不 ...

  2. java基础篇 之 非静态内部类

    什么是非静态内部类: public class Outer { Outer() { System.out.println("我是外部类"); } class Inner { Inn ...

  3. mac下使用xampp中php显示1044/1045/1046(卸载xampp)

    问题描述 在mac下使用xampp,访问http://192.168.64.3/phpmyadmin/可以正常显示php页面,当创建数据库时提示1044也就是普通用户没有权限 问题猜测 猜测在使用xa ...

  4. 面向开发者的Docker实践

    show me the code and talk to me,做的出来更要说的明白 本文源码,请点击learnSpringboot 我是布尔bl,你的支持是我分享的动力! 一. 引入 有开发经验的都 ...

  5. 002_python的in,while else,格式化输出,逻辑运算符,int与bool转换,编码

    数据 1.什么是数据? x=10,10是我们要存储的数据 2.为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3.数据类型 数字 字符串 列表 元组 字典 集合 ...

  6. shell 循环结构

    前言 循环结构在编程中十分常见,也是程序中是较为重要的一部分,在bash中有 for,until,while 这三种语句可以进行重复执行部分程序流程,下面会进一步讨论这三个指令的使用以及注意事项 fo ...

  7. 利用一个VI写入或读取另一个VI的控件值

    利用一个VI写入或读取另一个VI的控件值(转载自浅浅的小草) 有一个VI,叫未命名1.vi.   还有一个vi,叫未命名2.vi     现在,我在 1.vi里要对2.vi的字符串控件进行写入.  可 ...

  8. 设计模式之GOF23观察者模式

    观察者模式Observer 广播机制 场景:多个观察者--被通知改变 CS的时候,人物移动坐标变化,更新每个人地图上的坐标 核心:当目标对象(Subject)的状态值改变时,需要及时告知所有观察者(O ...

  9. beego中Controller的GetControllerAndAction方法

    beego中Controller的GetControllerAndAction方法 GetControllerAndAction方法在beego中的源码 // GetControllerAndActi ...

  10. iview tree 绑定数据

    官方文档 :https://www.iviewui.com/components/tree 效果图 1 主体分析 <Tree ref="tree" :data="t ...