码迷,mamicode.com
首页 > 其他好文 > 详细

Rocket - debug - TLDebugModuleInner - Abstract Command Decoding & Generation

时间:2020-03-22 13:52:34      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:height   roc   col   abs   back   field   doc   generate   pos   

https://mp.weixin.qq.com/s/0zKSTktxgzo5uCUphqaWSQ

 

介绍抽象命令的解码和生成。

 

技术图片

 

1. accessRegisterCommandReg

 

accessRegisterCommandReg是从COMMANDReg取值解析而来的一个带结构变量:

技术图片

 

解析出来的结构是ACCESS_REGISTERFields:

技术图片

 

这是当command为访问寄存器时的结构:

技术图片

注:我手上使用的代码比较老了,一直使用所以没有更新。

 

quick access命令暂时没有实现:

技术图片

 

2. GeneratedI

 

用于生成I-type的指令:

技术图片

 

其定义为:

技术图片

 

3. GeneratedS

 

用于生成S-type的指令:

技术图片

 

4. GeneratedUJ

 

用于生成U-type/J-type类型的指令:

技术图片

 

5. abstractGeneratedMem

 

用于存放根据抽象命令生成的两条指令:

技术图片

 

abstractGeneratedMem中的值用于生成核心地址空间地址ABSTRACT处的值(两条指令):

技术图片

 

6. abstractGeneratedI

 

用于存放一条I-type的指令:

技术图片

 

这是一条LW指令,用于把DATA中的值传到regno代表的寄存器中:

技术图片

 

LW/SW指令的定义如下:

技术图片

 

7. abstractGeneratedS

 

用于存放一条S-type的指令:

技术图片

 

这是一条SW指令,用于把regno代表的寄存器中的值写入到DATA地址处:

技术图片

 

8. nop

 

用于存放一条I-type指令:

技术图片

 

这是一条ADDI指令,没有实际的意义:

技术图片

 

ADDI指令定义如下:

技术图片

 

9. goAbstract

 

如果goAbstract为真,即要执行抽象命令,则把生成的指令填入到abstractGeneratedMem中:

技术图片

 

1) abstractGeneratedMem(0)

 

a. 如果transfer为假,则使用nop;

b. 如果transfer为真,从LW/SW中选择;

c. 如果write为真,则使用abstractGeneratedI把DATA中的值传到regno代表的寄存器中(LW);

d. 如果write为假,则使用abstractGeneratedS把regno代表的寄存器中的值写入到DATA地址处(SW);

 

2) abstractGeneratedMem(1)

 

如果postexec为假,则使用EBREAK指令。执行EBREAK指令可以退出执行,把控制权交给调试器:

技术图片

 

如果postexec为真,则使用nop。执行nop没有操作,一个效果就是会紧接着执行下一条指令。而下一条指令就是Program Buffer的第一条指令:

技术图片

 

这也是postexec的用意,即执行完抽象命令之后,立即执行Program Buffer中的指令:

技术图片             

 

 

Rocket - debug - TLDebugModuleInner - Abstract Command Decoding & Generation

标签:height   roc   col   abs   back   field   doc   generate   pos   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!