Rocket - decode - Inst Decode
2024-09-04 18:25:36
介绍RocketChip Instruction解码逻辑的实现。
1. RISC-V
RocketChip实现了RISCV ISA:
作为RISC-V的官方实现,实现的规范版本比较新,使用的编码技术也比较激进。
2. decode_table
在RocketImpl类中,定义了decode_table解码表:
里面定义了每个指令的key与译码结果(包含许多参数)的映射表,如IDecode里面的table定义:
key为指令的编码,以BitPat的形式定义的:
值亦即译码结果是一组BitPat,如:
其结构定义为类IntCtrlSigs:
默认值为:
3. 指令解码(ID)的输入与输出
解码的输入即是指令本身,指令从内存中读入;
解码的输出即是IntCtrlSigs中定义的各个信号;
解码的过程:
根据输入指令,使用decode_table中定义的映射表,查找出与其对应的IntCtrlSigs这一组信号。
因为decode_table过大,译码逻辑需要简化,简化的理论根据是布尔代数,方法类似于卡诺图化简。
4. id_ctrl
其中:
a. id_inst(0)为需要解码的指令;
b. id_ctrl为解码的输出;
c. decode_table为查找表;
5. IntCtrlSigs
a. 调用DecodeLogic解出译码结果;
b. decoder中的比特组成及顺序与sigs序列中定义的顺序一一对应:
c. 把decoder中的各个比特组成部分与sigs中的信号一一连接:
6. DecodeLogic
a. mappingIn即为decode_table,其中为key(BitPat)到values(Seq[BitPat])的映射;
b. mapping(i)为key(BitPat)到values中第i个BitPat(如:rocc, br, jal等)的映射表;
c. 调用另外一个apply,每次解出一个value,即每次生成解出一个value的逻辑:
7. 解码单个信号
代码为提高可读性,已做重构:
最新文章
- js 判断浏览器和ie版本号 收集
- nosql数据库学习
- World of Warcraft
- CentOS 配置网络yum源
- 将HTML5 Canvas的内容保存为图片借助toDataURL实现
- Jocket
- 精简CSS代码
- Javascript 笔记与总结(2-4)Javascript 内置对象
- CentOS里下载百度网盘 / 360 网盘资源的方法
- winscp自动执行脚本
- NYOJ128 前缀式计算 【栈】
- ul li a active jquery.cookie.js
- GoF——状态模式
- iOS搜索指定字符在字符串中的位置
- HDU 4256 The Famous Clock
- VUE 与其他常见前端框架对比
- 前端笔记之JavaScript(九)定时器&;JSON&;同步异步/回调函数&;函数节流&;call/apply
- Spark RDD、DataFrame原理及操作详解
- 把linux的man手册转化为windows下可读的格式
- 【Java】-NO.13.Algorithm.1.Java Algorithm.1.001-【Java 常用算法手册 】-
热门文章
- Centos7下tomcat关闭异常问题
- node能做的性能优化
- 201771030115-牛莉梅 实验一 软件工程准备-<;初学《构建之法--现代软件工程》的疑问>;
- 物流配送中心管理系统(SSM+MYSQL)
- go 数组 字符串 切片
- 内存的堆分配和栈分配 &; 字符数组,字符指针,Sizeof总结
- spring MVC--WebApplicationContext做了什么
- java 生成随机字符串
- 《机器学习_02_线性模型_Logistic回归》
- php5.2安装memcached 扩展