Rocket - debug - TLDebugModuleInner - ROM Generation

Posted wjcdx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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地址处生成一组只读寄存器:

技术图片             

 

 

以上是关于Rocket - debug - TLDebugModuleInner - ROM Generation的主要内容,如果未能解决你的问题,请参考以下文章

Rocket - debug - DebugTransport

Rocket - debug - Custom

Rocket - debug - DebugCustomXbar

Rocket - debug - TLDebugModule

Rocket - debug - SBA

Rocket - debug - DMI