https://mp.weixin.qq.com/s/7UY99gEJ8QpVBJIohdqKhA 简单介绍TLDebugModuleInner中innerCtrl相关的寄存器. 1. innerCtrl 接下来用到的innerCtrl来自于io中: io.innerCtrl从整体上看方向是输入,信号经过TLDebugModuleInnerAsync中转,来自Outer: io.innerCtrl一直处于ready状态: 2. selectedHartReg selectedHartReg是一个…
https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考资料: a. https://github.com/pulp-platform/riscv-dbg/blob/master/doc/debug-system.md b. RISC-V External Debug Support Version 0.13.2 Appendix A.2 1. Hart…
https://mp.weixin.qq.com/s/tI41wu0xaIQ5PRq6F82tNw 简单介绍TLDebugModuleInner中生成DMI控制和状态寄存器使用到的状态. 1. abstractCommandBusy 表示是否处于等待状态,如果不是在等待状态,则视为Busy: 2. ABSTRACTCSWrEnLegal 如果正处于等待状态,则可以合法写入ABSTRACTCS寄存器: 3. COMMANDWrEnLegal 如果正处于等待状态,则可以合法写入COMMAND寄存器:…
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/1bIqzDYXM36MIfSsjvvYIw 简单介绍TLDebugModuleInner中的针对Custom的访问. 1. customNode customNode定义为DebugCustomSink类型的节点: 根据DebugCustomSink的定义,customNode所属的模块为调试模块: 这与customNode所属的模块为TLDebugModuleInner相符. Custom相关节点到连接图如下,供参考: 2. needCu…
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)…
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/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标志写入的数…