RISC-V 指令集架构概览
本文是我阅读 RISC-V 相关文档的知识整理。尽管 RISC-V 的文档章节较少,只有两三百页,但要是从头到尾一页一页循序渐进的看,对我而言还是很费劲,所以我决定先只看每个章节的开头部分,做一个知识整理,先对 “RISC-V 是什么” 有一个宏观的认识,然后再理论联系实践进行每个章节的细读。出于这个目的,就有了以下概括性的内容。
RISC-V 特点
RISC-V 是加州大学伯克利分校研究人员于 2010 年开始研发的 ISA (指令集架构),它是开源免费的!RISC-V 的设计理念给人的感觉就是简单以及可扩展。
- 简单体现在: RISC-V 的基础指令数目最少只需 40 多条。(主要是基础整数指令集。)
- 可扩展体现在:在基础整数指令集的基础上,可以选择实现多种扩展模块。(M;A;F;D等扩展指令集模块。)
RISC-V 指令集模块
这部分的内容主要来自 《riscv-spec-20191213.pdf》
指令集模块 | 类型 | 概括说明 | 状态 |
---|---|---|---|
RV32I | 基础模块; | 32位基础整数指令集 | 批准 |
Zifencei | 扩展模块; | 用于同步指令和数据流 | 批准 |
RV32E | 基础模块; | 为嵌入式系统设计的RV32I的缩减版 | 草稿 |
RV64I | 基础模块; | 64位基础整数指令集(构建于RV32I之上) | 批准 |
RV128I | 基础模块; | 128位基础整数指令集(构建于RV64I之上) | 草稿 |
M | 扩展模块; | 整数的乘法或除法的指令 | 批准 |
A | 扩展模块; | 原子操作指令 | 批准 |
Zicsr | 扩展模块; | 控制和状体寄存器指令 | 批准 |
F | 扩展模块; | 单精度浮点指令 | 批准 |
D | 扩展模块; | 双精度浮点指令(依赖于基本的单精度浮点指令子集F) | 批准 |
Q | 扩展模块; | 四精度浮点指令(依赖于双精度浮点指令子集D) | 批准 |
L | 扩展模块; | 十进制浮点运算 | 草稿 |
C | 扩展模块; | 压缩指令(通过为常见操作添加简短的16位指令编码来减少静态和动态代码的大小) | 批准 |
B | 扩展模块; | 位操作指令 | 草稿 |
J | 扩展模块; | 支持动态翻译的语言(许多流行的语言通常是通过动态翻译实现的,包括Java和Javascript。这些语言可以从ISA对动态检查和垃圾收集的额外支持中获益。) | 草稿 |
T | 扩展模块; | 用于提供事务性内存操作 | 草稿 |
P | 扩展模块; | 打包 SIMD (单指令流多数据流) | 草稿 |
V | 扩展模块; | 向量操作指令 | 草稿 |
Zam | 扩展模块; | 非对齐的原子指令 | 草稿 |
Ztso | 扩展模块; | 定义了RISC-V总体存储顺序(RVTSO)内存一致性模型。 | 冻结 |
上表是对 RISC-V 各个指令集模块的整理,可以看到里面有很多模块还处于开发当中。目前比较完善的指令集有:RV32I;RV64I;Zifencei;M;A;F;D;Q;C;Zicsr。其他的应该还处于开发当中。
除了指令集以外 riscv-spec 还专门拿出两个章节介绍了以下两个模块:
模块 | 说明 | 状态 |
---|---|---|
Counters | RISC-V ISA 提供的一组高达 32×64 位的性能计数器和计时器 | 草稿 |
RVWMO | 内存一致性模块 | 批准的 |
状态说明
草案:预计将在批准前进行修改
冻结:模块在提交批准之前预计不会发生重大变化。
批准: ISA模块此时已批准,不再发生改变。
RISC-V 指令集目前还处于开发当中,还有很多模块还没有实现,但是常用的模块都已经具备。常用的有 RV32I;RV64I;M;A;F;D;C 。
RISC-V 特权模式
这部分的内容主要来自 《riscv-privileged-20190608.pdf》
RISC-V 处理器大多数时间运行在权限最低的模式下。
处理中断和异常时会把处理器的控制权移交到更高的权限模式,也就是特权模式。
RISC-V 架构定义了三种模式,
- 用户模式。user mode
- 机器模式。machine mode (特权模式)
- 监管者模式。supervisor mode (特权模式)
权限等级从低到高:用户模式 < 监管者模式 < 机器模式.
机器模式
运行可信的代码 。是唯一所有标准 RISC-V 处理器都必须实现的权限模式。
机器模式最重要的特性是具备拦截和处理异常的能力。
异常分为两类 :
- 同步异常:这类异常在指令执行期间产生,如访问了无效的存储器地址或执行了具有无效操作码的指令时。
- 中断:指与指令流异步的外部事件 。
监管者模式
为 Linux, FreeBSD 和 Windows 等操作系统提供支持 。提供了一种传统的虚拟内存系统,它将内存划分为固定大小的页来进行地址转换和对内存内容的保护。