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中的程序之后,执行…
https://mp.weixin.qq.com/s/RdJzE06mMkh2x__vVj_fEA 介绍riscv debug接口的使用实例:使用抽象命令读取寄存器. 1. Read s0 using abstract command 1) abstract command 抽象命令,Debug模块支持一些可选的抽象命令.一般情况下,debugger执行命令时,CPU核心是被暂停的: 命令是否支持只能通过执行之后判断返回的错误码来确定: debugger通过写command寄存器来执行命令: 使…
https://mp.weixin.qq.com/s/EJVqw7JPjjaib68tENl5AQ 简单介绍TLDebugModuleInner中的Program Buffer Access. 1. implementation-specific bits set by harts executing code 1) haltedBitRegs/resumeReqRegs haltedBitRegs和resumeReqRegs在dmactive为假的情况下,值为0.在dmactive为真的情况下…
https://mp.weixin.qq.com/s/kjhJJ3moRQzxHt6pJOXEgg 简单介绍TLDebugModuleInner中Program Buffer寄存器的实现. 1. programBufferMem 1) 定义 以字节为单位的Program Buffer寄存器: 2) 复位值 dmactive为假时,其值为0: 2. programBufferNxt 用于存放programBufferMem寄存器的将要使用的值. 3. 寄存器组 programBufferMem是一…
https://mp.weixin.qq.com/s/jkiHceU0HaJbHGvHiU-QOA 简单介绍TLDebugModuleInner的实现. 1. 引入全局配置 1) cfg 引入DebugModulePrams: 2) hartSelFuncs 定义hartsel与hart id之间的映射函数: 2. 多个diplomacy node 1) dmiNode dmiNode是一个寄存器节点,包含除了DMCONTROL/HAWINDOWSEL/HAWINDOW三个寄存器之外的0x000…
https://mp.weixin.qq.com/s/9nMo6IYmDCz7S-ALFx824g 简单介绍TLDebugModuleOuter的实现. 1. DebugModuleAccessType 定义调试模块访问宽度: 2. DebugAbstractCommandError 定义抽象命令访问错误: 3. DebugAbstractCommandType 定义抽象命令类型: 4. DebugModuleParams 定义调试模块参数: 其中: a. nDMIAddrSize:调试总线地址…
https://mp.weixin.qq.com/s/tI41wu0xaIQ5PRq6F82tNw 简单介绍TLDebugModuleInner中生成DMI控制和状态寄存器使用到的状态. 1. abstractCommandBusy 表示是否处于等待状态,如果不是在等待状态,则视为Busy: 2. ABSTRACTCSWrEnLegal 如果正处于等待状态,则可以合法写入ABSTRACTCS寄存器: 3. COMMANDWrEnLegal 如果正处于等待状态,则可以合法写入COMMAND寄存器:…
https://mp.weixin.qq.com/s/0zKSTktxgzo5uCUphqaWSQ 介绍抽象命令的解码和生成. 1. accessRegisterCommandReg accessRegisterCommandReg是从COMMANDReg取值解析而来的一个带结构变量: 解析出来的结构是ACCESS_REGISTERFields: 这是当command为访问寄存器时的结构: 注:我手上使用的代码比较老了,一直使用所以没有更新. quick access命令暂时没有实现: 2. G…
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步恢复核心的执行.所以正常情况下,快速访问抽象命令…
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. sbacces…