Rocket - debug - TLDebugModuleInner - ROM Generation
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) - WHERETO)把跳转地址设置为ABSTRACT:
当pc=WHERETO时,跳转目标地址即是ABSTRACT。
jalAbstract的值存放在地址WHERETO处,亦即jalAbstract是存放在WHERETO地址处的指令:
2. goReg
goReg是一个寄存器:
其复位值为假:
如果goAbstract为真,其值为真:
如果hartGoingWrEn为真,其值为假:
hartGoingWrEn是写GOING寄存器的标志:
GOING寄存器位于核心访问的地址空间中,所以写GOING寄存器的是核心执行的指令。
总结一下:
a. 要执行抽象命令时(goAbstract=true)为真;
b. 开始执行抽象命令时(begins executing Debug Mode Instructions)为假;
3. goAbstract
goAbstract是一个标志位:
表示将要执行command寄存器中的命令:
4. goCustom
goCustom也是一个标志位:
表示是否访问Custom地址区间的寄存器:
5. flags
flags由1024个flagsBundle组成:
其中go的值由goReg确定:
resume的值由resume请求确定:
flags用于在FLAGS地址处生成一组只读寄存器: