Rocket - debug - TLDebugModuleInner - Abstract Command Decoding & Generation
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的更多相关文章
- Rocket - debug - TLDebugModuleInner - Abstract Command State Machine
https://mp.weixin.qq.com/s/RcXI8uEHvZHGCvX3DoVR4Q 简单介绍TLDebugModuleInner中处理抽象命令时的状态机. 1. CtrlState 定 ...
- Rocket - debug - TLDebugModuleInner - Abstract Data
https://mp.weixin.qq.com/s/DOLkEi-_qQt6lWOhJ2hxVQ 简单介绍TLDebugModuleInner中抽象数据寄存器的实现. 1. abstractData ...
- Rocket - debug - TLDebugModuleInner
https://mp.weixin.qq.com/s/jkiHceU0HaJbHGvHiU-QOA 简单介绍TLDebugModuleInner的实现. 1. 引入全局配置 1) cfg 引入Debu ...
- Rocket - debug - TLDebugModuleInner - COMMAND
https://mp.weixin.qq.com/s/Lz_D43YdhbRhiGiyoCBxDg 简单介绍TLDebugModuleInner中COMMAND寄存器的实现. 1. COMMANDRe ...
- Rocket - debug - TLDebugModuleInner - ROM Generation
https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...
- Rocket - debug - TLDebugModuleInner - DMI Register Control and Status
https://mp.weixin.qq.com/s/tI41wu0xaIQ5PRq6F82tNw 简单介绍TLDebugModuleInner中生成DMI控制和状态寄存器使用到的状态. 1. abs ...
- Rocket - debug - TLDebugModuleInner - Hart Bus Access
https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...
- Rocket - debug - TLDebugModuleInner - ABSTRACTAUTO
https://mp.weixin.qq.com/s/adSB7lmKcqmwVd80-gmdIw 简单介绍TLDebugModuleInner中ABSTRACTAUTO寄存器的实现. 1. ABST ...
- Rocket - debug - TLDebugModuleInner - Drive Custom Access
https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw 简单介绍TLDebugModuleInner中的针对Custom的访问. 1. customNode ...
随机推荐
- spring的单元测试
如果spring 4.3.18这个版本的spring要使用junit,需要使用junit的junit-4.12之上的版本.使用这个版本junit的时 候需要引入hamcrest-all的jar包.之前 ...
- 使用JDBC连接oracle数据库
需要jar包:ojdbc6.jar
- Linux下3种常用的网络测速工具
大家好,我是良许. 不管你用的是什么操作系统,网速都是你非常关心的一个性能指标,毕竟,谁都不想看个视频结果网速卡到你怀疑人生.本文介绍三个 Linux 命令行下的网络测速工具,让你随时随地知道你的网络 ...
- java使用window builder图形界面开发简易计算器
界面效果: /** * */ package calculator; import java.awt.BorderLayout; import java.awt.EventQueue; import ...
- Kubernetes中 Pod 是怎样被驱逐的?
前言 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 IO).可压缩资源不可能导致 Pod 被驱 ...
- indexDB出坑指南
对于入了前端坑的同学,indexDB绝对是需要深入学习的. 本文针对indexDB的难点问题(事务和数据库升级)做了详细的讲解,而对于indexDB的特点和使用方法只简要的介绍了一下.如果你有一些使用 ...
- 正则表达式在java中的用法
/** * 测试正则表达式的基本用法 Pattern 和 Matcher * @author 小帆敲代码 * */public class Demo01 { public static void m ...
- [CodeForces 344D Alternating Current]栈
题意:两根导线绕在一起,问能不能拉成两条平行线,只能向两端拉不能绕 思路:从左至右,对+-号分别进行配对,遇到连续的两个“+”或连续的两个“-”即可消掉,最后如果全部能消掉则能拉成平行线.拿两根线绕一 ...
- mysql-kettle-superset电商可视化数据分析
1.项目概述 需求 对电商业务中的用户.商品.订单的数据进行分析,观察运营的情况 架构 业务数据库:Mysql:存储最原始的数据 ETL:Kettle 数据仓库:Mysql:存储需要进行分析处理的数据 ...
- 移动端纯css超出盒子出现横向滚动条
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...