RISCV体系结构

HarderHeng Lv5

一、指令集概述

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+Atomic
  • RV64G: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