Risc-V文档包括:用户层指令集文档和特权架构文档,下面这两个文件的官网链接。
用户层指令集文档现在的版本是2.2。
Risc-V的指令集是模块化的,用户层指令集主要包括以下模块,其中有些模块已经冻结,未来不大可能再变化,有些模块仍在讨论中,我们主要关注已经冻结的模块。
基础模块 | 版本 | 是否冻结 | 注释 |
RV32I | 2.0 | Y | base的32位整数指令集,32位地址空间,寄存器是32位 |
RV32E | 1.9 | N | 嵌入式架构,仅有16个整数寄存器 |
RV64I | 2.0 | Y | base的64位整数指令集,64位地址空间,寄存器是64位 |
RV128I | 1.7 | N | base的128位整数指令集,支持128为地址空间 |
扩展模块 | 版本 | 是否冻结 | |
M | 2.0 | Y | 支持乘法和除法指令 |
A | 2.0 | Y | 支持原子操作指令和Load-Reserved/store-Conditional指令 |
F | 2.0 | Y | 单精度浮点指令 |
D | 2.0 | Y | 双精度浮点指令 |
Q | 2.0 | Y | 四精度浮点指令 |
L | 0.0 | N | 十进制浮点数,IEEE754-2008 |
C | 2.0 | Y | 支持编码长度为16的压缩指令。 |
B | 0.0 | N | 位操作指令 |
J | 0.0 | N | 支持动态转化语言 |
T | 0.0 | N | transactional memory operations |
P | 0.1 | N | Packed-SIMD Instructions |
V | 0.2 | N | 向量操作指令 |
N | 1.1 | N | 用户层的终端和异常指令 |
Risc-V的基础指令集是整数指令集,在任何架构方案中,必须完整实现基础的整数指令集。在整数指令集中,用补码表示符号数。
在整数指令集的基础上,可以选择实现扩展模块,比如RV32IMAFDC,表示当前实现支持这些模块的组合,其中IMAFD是通过组合,用字母G表示,所以RV32IMAFDC,也可以写作RV32GC。现在的Risc-V编译工具链,重点会支持RV32G和RV64G。
Risv-V的指令编码规则:
对于16位压缩指令,它的低两位不等于11,对于RV32,它的[1:0]=11,[4:2]不等于111。对于64位指令,它的低7位位0111111。
我们主要学习一下几个指令集: