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/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/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/ChXNTbx94WDC72GvmE9bGA 介绍riscv-debug的使用实例:使用三种方法读取内存. 1. Using System Bus Access 1) System Bus Access 除了抽象命令,Program Buffer之外,调试模块可以包含一个系统总线访问模块,以在不依赖核心的情况下,访问系统总线(使用物理地址): 访问大小可以是8/16/32/64/128位: 需要自己保证访问的缓存一致性: 2) sbcs/sb…
https://mp.weixin.qq.com/s/0zKSTktxgzo5uCUphqaWSQ 介绍抽象命令的解码和生成. 1. accessRegisterCommandReg accessRegisterCommandReg是从COMMANDReg取值解析而来的一个带结构变量: 解析出来的结构是ACCESS_REGISTERFields: 这是当command为访问寄存器时的结构: 注:我手上使用的代码比较老了,一直使用所以没有更新. quick access命令暂时没有实现: 2. G…
https://mp.weixin.qq.com/s/RcXI8uEHvZHGCvX3DoVR4Q 简单介绍TLDebugModuleInner中处理抽象命令时的状态机. 1. CtrlState 定义抽象命令相关的四个状态: 1) ctrlStateReg ctrlStateReg是一个寄存器,记录了当前的状态: 2) ctrlStateNxt ctrlStateNxt记录了ctrlStateReg的下一个状态: 其值会输出到ctrlStateReg寄存器中: 3) reset 当io.dma…
https://mp.weixin.qq.com/s/DOLkEi-_qQt6lWOhJ2hxVQ 简单介绍TLDebugModuleInner中抽象数据寄存器的实现. 1. abstractDataMem 以字节为单位,表示抽象数据寄存器: dmactive为假时,其值为零: 2. abstractDataNxt 用于存放abstractDataMem寄存器的将要使用的值. 3. 寄存器组 abstract data是一组寄存器,包含了多个寄存器.这里使用RegFieldGroup来定义: 这…
https://mp.weixin.qq.com/s/Lz_D43YdhbRhiGiyoCBxDg 简单介绍TLDebugModuleInner中COMMAND寄存器的实现. 1. COMMANDReset 寄存器复位时使用的值: 当dmactive为假时,存入寄存器中: 2. COMMANDReg 带结构的寄存器: 3. 写 不带结构的32位写入值: 转换为带结构的写入值: 寄存器写入逻辑: 其中:COMMANDWrEnMaybe标志是否正在写入. COMMANDWrEnLegal标志写入的数…
https://mp.weixin.qq.com/s/P48K17TyRoZC7xBMltbXKQ 简单介绍调试模块中每个寄存器的定义. 1. DMI_RegAddrs 记录DMI访问的各个寄存器的地址: 在规范中定义如下: 2. DMSTATUSFields 在规范中定义如下: 3. DMCONTROLFields 寄存器dmcontrol中各个域的定义如下: 4. HARTINFOFields 寄存器hartinfo中各个域的定义如下: 5. HAWINDOWSELFields 寄存器haw…
https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbstract是一条指令,跳转到抽象命令的指令: Instruction.JAL是jump and link指令: GeneratedUJ用于生成一个UJ格式的指令结构: JAL属于J-format. GeneratedUJ的定义如下: jalAbstract.setImm(ABSTRACT(cfg)…