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 ...
随机推荐
- Android中限制输入框最大输入长度
通常情况下只需要在布局文件中加入maxlength这一属性即可 <EditText android:inputType="text" android:singleLine=& ...
- 一文教你快速修改ubuntu终端显示的主机名和用户名
为了让终端的显示更加简洁,清爽,改掉显示的用户名和主机名,改成你喜欢的名字. 创作不易,如果本文帮到了您: 如果本文帮到了您,请帮忙点个赞
- BIO、NIO、AIO的形象比喻
BIO (Blocking I/O):同步阻塞I/O模式. NIO (New I/O):同步非阻塞模式. AIO (Asynchronous I/O):异步非阻塞I/O模型. 先看阻塞和非阻塞的区别, ...
- 【原理探究】女朋友问我ArrayList遍历时删除元素的正确姿势是什么?
简介 我们在项目开发过程中,经常会有需求需要删除ArrayList中的某个元素,而使用不正确的删除方式,就有可能抛出异常.或者在面试中,会遇到面试官询问遍历时如何正常删除元素.所以在本篇文章中,我们会 ...
- leeCode刷题 1078
给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 "first second third" 形式出现的情况,其中 second 紧随 firs ...
- C++内存管理学习笔记(1)
/****************************************************************/ /* 学习是合作和分享式的! /* Auth ...
- Python--oop面向对象的学习1
类和对象的成员分析 ·类和对象都可以存储成员,成员可以归类为所有,也可以归对象所有 ·类存储成员时使用的是与类关联的一个对象 ·独享存储成员时存储在当前对象中 ·对象访问一个成员,如果对象中没有该成员 ...
- windows定时任务schtasks命令详细解
SCHTASKS /Create [/S system [/U username [/P [password]]]] [/RU username [/RP password]] /SC schedul ...
- 5、打断点(bpu)
前言 先给大家讲一则小故事,在我们很小的时候是没有手机的,那时候跟女神聊天都靠小纸条.某屌丝A男对隔壁小王的隔壁女神C倾慕已久,于是天天小纸条骚扰,无奈中间隔着一个小王,这样小王就负责传小纸条了.有一 ...
- yield与park的区别
yield表示放弃本次cpu的时间片,但是操作系统在下一个时间片依旧可能会调用该线程/进程 park表示线程/进程睡眠,需要让其他线程/进程唤醒,才有可能重新被操作系统分配时间片, 非自旋锁,底层一般 ...