Rocket

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地址处生成一组只读寄存器:

             

 

 

原文地址:https://www.cnblogs.com/wjcdx/p/12545510.html