RISCV体系结构
一、指令集概述
RISCV是一套开源的精简指令集。
RISCV是一种模块化的指令集。RISCV由一个基本的ISA和多个可选的扩展指令集构成。基础的指令集是固定的永远不会改变。这意味着使用RISCV基础指令集,为编译器编写者,操作系统开发人员和汇编语言程序员提供了稳定的目标。并且使用基础指令集使得RISCV在低能耗和小型化方面很有优势。并且要实现更高性能的,或者更多的CPU支持特性,RISCV指令集也可以使用扩展指令集来来模块化的达到自己的目标。
- 基本指令集
- RV32I:32位的整数指令集
- RV32E:RV32I的子集,用于小型的嵌入式场景
- RV64I:64位的整数指令集,兼容RV32I
- RV128I:128位的整数指令集,兼容RV64I和RV32I
- 扩展指令集
- M:整数乘法(multiplication)与除法指令集
- A:存储器原子(Atomic)指令
- F:单精度(32bit)浮点(Float)指令集
- D:双精度(64bit)浮点(Float)指令集
- C:压缩(Compressed)指令集
- ……其他标准指令集和非标准的扩展指令集
用基础指令集加上扩展指令集的后缀来表示一个完整的RISCV指令集,用G(general)表示支持所有的标准扩展指令集。
例如
RV32IMA
:32位的整数指令集+Multiplication+AtomicRV64G
:64位实现IMAFD
嵌入式指令集RV32E
- 嵌入式指令集常和C压缩指令集一起使用,用于提高代码密度
- 嵌入式指令集不支持浮点指令子集。要使用浮点指令集必须使用RV32I
- 嵌入式架构仅支持机器模式和用户模式不支持其他的特权模式
- 嵌入式架构仅支持直接的物理地址管理,而不支持虚拟地址
二、架构特性
1.寄存器
- RISC-V 的 Unprivileged Specification 定义了32个通用寄存器,以及一个PC
- 对 RV32I/RV64I/RV128I 都一样。
- 如果实现支持 F/D 扩展则需要额外支持32个 浮点(Float Point)寄存器。
- RV32E 将32个通用寄存器缩减为16个。
- 寄存器的宽度由 ISA 指定
- RV32的寄存器宽度为 32 位,RV64的寄存器宽度为64位,依次类推。
- 每个寄存器具体编程时有特定的用途以及各自的别名。由RISC-V Application Binary Interface(ABI)定义。
寄存器说明:
- X0(zero):0寄存器,始终为0
- X1(ra):用于返回地址(return address)
- X2(sp):用于栈指针(stack pointer)
- X3(gp):用于通用指针
- X4(tp):用于线程指针(thread pointer)
- X5(t0):用于存放临时数据,或者作为备用链接寄存器
2. 工作模式
- Title: RISCV体系结构
- Author: HarderHeng
- Created at : 2025-02-13 15:11:11
- Updated at : 2025-02-17 09:05:16
- Link: https://harderheng.life/2025/02/13/RISCV体系结构/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments