zoukankan      html  css  js  c++  java
  • Rocket

    https://mp.weixin.qq.com/s/SxmX-CY2tqvEqZuAg-EXiQ

     

    介绍riscv-debug的使用实例:配置Quick Access功能。

     

     

    1. Quick Access

     

    快速访问,即暂停核心执行Program Buffer中的一段短的代码,然后再恢复核心运行。

     

    具体流程如下:

    需要注意的是,Program Buffer一般以ebreak指令结束。执行完Program Buffer最后的ebreak后,才执行第4步恢复核心的执行。所以正常情况下,快速访问抽象命令执行完成后,核心还是在正常运行状态。这也是第3步中,"the program buffer execution ends, but the quick access command continues"的意思,第3步中断后,"continue"继续执行第4步。

     

    寄存器的格式如下:

     

    所以执行快速访问抽象命令时,command寄存器的值为0x1000_0000.

     

    2. 实例1:a single memory write

     

    A. 首先准备好Program Buffer:

    a. 写寄存器progbuf0: transfer arg2, s0:把s0的值保存到arg2寄存器;

    b. 写寄存器progbuf1: transfer s0, arg0:读arg0中保存的目标内存地址;

    c. 写寄存器progbuf2: transfer arg0, s1:把s1的值保存到arg0寄存器;

    d. 写寄存器progbuf3: transfer s1, arg1:把arg1中保存的待写数据读到s1中;

    e. 写寄存器progbuf4: sw s1, 0(s0):写目标内存地址为待存数据;

    f. 写寄存器progbuf5: transfer s1, arg0

    g. 写寄存器progbuf6: transfer s0, arg2

    h. 写寄存器progbuf7: ebreak: 退出执行返回调试环境;

     

    B. 写data0寄存器:写为目标内存地址;也就是Program Buffer中的arg0;

    C. 写data1寄存器:写为待存数据;也就是Program Buffer中的arg1;

    D. 写command寄存器:

    a. cmdtype=1:抽象命令为快速访问命令;

     

    3. 实例2:setting the m bit in mcontrol

     

    这里只提示要点:

    a. tdata1就是mcontrol寄存器,两者的地址是一样的:

    b. mcontrol的bit6是m bit:

     

    c. progbuf3中写的指令是错误的,应该是:transfer s0, arg0. 因为s0保存在arg0而不是arg2中。

     

  • 相关阅读:
    软工第二次作业-集成部署入门
    软工第一次作业
    使用RVM安装特定版本Ruby和Rails
    神奇的位操作(Bit Manipulation)
    多数投票算法——Boyer–Moore majority vote algorithm
    朝花夕拾,温故知新——提问回顾与个人总结
    获得“小黄衫”の 感言
    结对编程纪实
    决胜笔记之巅——案例分析
    工欲善其事——2021软工第二次博客作业
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11945818.html
Copyright © 2011-2022 走看看