【RISC-V】RISC-V寄存器

一、通用寄存器

复制代码
32位RISC-V体系结构提供32个32位的整型通用寄存器
寄存器 别名 全称 说明
X0 zero 零寄存器 可做源寄存器(rs)或目标寄存器(rd)
X1 ra 链接寄存器 保存函数返回地址
X2 sp 栈指针寄存器 指向栈的地址
X3 gp 全局寄存器 用于链接器松弛优化
X4 tp 线程寄存器 常用于在OS中保存指向进程控制块(task_struct)数据结构的指针
X5 ~ X7 X28 ~ X31 t0 ~ t6 临时寄存器
X8 s0/fp 帧指针寄存器 用于函数调用,被调用函数需保存数据
X9 s1 用于函数调用 ,被调用函数需要保存的数据
X10 ~ X17 a0 ~ a7 用于函数调用,传递参数和返回值
X18 ~ X27 s2 ~ s11 用于函数调用 ,被调用函数需要保存的数据

二、系统寄存器

复制代码
系统控制状态寄存器(CSR)。

CSR地址空间映射:

地址范围 bit11:10 bit9:8 bit7:4 访问模式 访问权限
0x000 ~ 0x0FF 00 00 xxxx U RW
0x400 ~ 0x4FF 01 00 xxxx U RW
0x800 ~ 0x8FF 10 00 xxxx U RW(用户自定义系统寄存器)
0xC00 ~ 0xC7F 11 00 0xxx U RO
0xC80 ~ 0xCBF 11 00 10xx U RO
0xCC0 ~ 0xCFF 11 00 11xx U RO
0x100 ~ 0x1FF 00 01 xxxx S RW
0x500 ~ 0x57F 01 01 0xxx S RW
0x580 ~ 0x5BF 01 01 10xx S RW
0x5C0 ~ 0x5FF 01 01 11xx S RW(用户自定义系统寄存器)
0x900 ~ 0x97F 10 01 0xxx S RW
0x980 ~ 0x9BF 10 01 10xx S RW
0x9C0 ~ 0x9FF 10 01 11xx S RW(用户自定义系统寄存器)
0xD00 ~ 0xD7F 11 01 0xxx S RO
0xD80 ~ 0xDBF 11 01 10xx S RO
0xDC0 ~ 0xDFF 11 01 11xx S RO(用户自定义系统寄存器)
0x300 ~ 0x3FF 00 11 xxxx M RW
0x700 ~ 0x77F 01 11 0xxx M RW
0x780 ~ 0x79F 10 11 100x M RW
0x7A0 ~ 0x7AF 01 11 1010 M RW(用于调试寄存器)
0x7B0 ~ 0x7BF 01 11 1011 M RW(只能用于调试寄存器)
0x7C0 ~ 0x7FF 01 11 11xx M RW(用户自定义系统寄存器)
0xB00 ~ 0xB7F 10 11 0xxx M RW
0xB80 ~ 0xBBF 10 11 10xx M RW
0xBC0 ~ 0xBFF 10 11 11xx M RW(用户自定义系统寄存器)
0xF00 ~ 0xF7F 11 11 0xxx M RO
0xF80 ~ 0xFBF 11 11 10xx M RO
0xFC0 ~ 0xFFF 11 11 11xx M RO(用户自定义系统寄存器)
  • 出发非法指令异常的行为:
    • 访问不存在或未实现的寄存器;
    • 写入RO的系统寄存器
    • 低级别处理器模式下访问高级别处理器模式的系统寄存器(模式级别:M > S > U)

2.1 U模式 系统寄存器

地址 CSR名称 属性 说明
0x001 fflags URW 浮点数累积异常(accrued exception)
0x002 frm URW 浮点数动态舍入模式(dynamic rounding mode)
0x003 fcsr URW 浮点数控制和状态寄存器
0xC00 cycle URO 读取时钟周期,映射到RDCYCLE伪指令
0xC01 time URO 读取time系统寄存器的值,映射到RDTIME伪指令
0xC02 instret URO 执行指令数目,映射到RDINSTRET伪指令
0xC03 ~ 0xC1F hpmcounter3 ~hpmcounter31 性能检测寄存器
  • 补充:
    • RDCYCLE伪指令读取cycle系统寄存器的值,返回物理处理器内核的时钟周期数(并非处理器硬件线程的始终周期数)。主要用于性能监控和调优;
    • RDTIME伪指令读取time系统寄存器的值,获取系统实际时间。系统每次启动时读取CMOS上的RTC计数值,当时钟中断到来时,更新该计数;
    • RDINSTRET伪指令读取instret系统寄存器的值,返回处理器执行线程已经执行的指令数量;
    • hpmcounter用于系统性能检测的寄存器,这些计数器的计数记录平台的事件,并通过额外的特权寄存器进行配置。

2.2 S模式 系统寄存器

地址 CSR名称 属性 说明
0x100 sstatus SRW S模式下的处理器状态寄存器
0x104 sie SRW S模式下的中断使能寄存器
0x105 stvec SRW S模式下的异常向量表入口地址寄存器
0x106 scounteren SRW S模式下的计数使能寄存器
0x10A senvcfg SRW S模式下的环境配置寄存器
0x140 scratch SRW 用于异常处理的临时寄存器
0x141 sepc SRW S模式下的异常模式程序计数器(PC)寄存器
0x142 scause SRW S模式下的异常原因寄存器
0x143 stval SRW S模式下的异常向量寄存器(记录发生异常的虚拟地址)
0x144 sip SRW S模式下的中断待定寄存器
0x180 satp SRW S模式下的地址转换与保护寄存器
0x5A8 scontext SRW S模式下的上下文寄存器(用于调试)
  • 说明:
    • scounteren用于在S模式下,使能U模式下的硬件性能检测和计数寄存器(cycle, time, instret, HPM3~31)
      scratch在从S模式返回U模式时,保存S模式时的进程控制块。

2.3 M模式 系统寄存器

2.3.1 总览表

地址 CSR名称 属性 说明
0xF11 mvendorid MRO 机器厂商ID寄存器
0xF12 marchid MRO 处理器体系结构ID寄存器
0xF13 mimpid MRO 处理器实现版本编号寄存器
0xF14 mhartid MRO 处理器硬件线程(hart)ID寄存器
0xF15 mconfigptr MRO 配置数据结构寄存器
0x300 mstatus MRW M模式下的处理器状态寄存器
0x301 misa MRW 指令集体系结构和扩展寄存器
0x302 medeleg MRW M模式下的异常委托寄存器,把异常委托到S模式下处理
0x303 mideleg MRW M模式下的中断委托寄存器,把中断委托到S模式下处理
0x304 mie MRW M模式下的中断使能寄存器
0x305 mtvec MRW M模式下的异常向量入口地址寄存器
0x306 mcounteren MRW M模式下的计数使能寄存器。用于使能S模式或U模式下的硬件性能检测和计数寄存器。
0x340 mscratch MRW 用于异常处理的临时寄存器
0x341 mepc MRW M模式下的异常模式PC寄存器。处理器陷入M模式时,保存中断或遇到的异常的指令的虚拟地址
0x342 mcause MRW M模式下的异常原因寄存器
0x343 mtval MRW M模式下的异常向量寄存器。处理器陷入M模式时,mtval记录发生异常的虚拟地址。
0x344 mip MRW M模式下的中断待定寄存器。表示哪些中断处与待定状态。
0x34A mtinst MRW M模式下的陷入指令(用于虚拟化)
0x34B mtval2 MRW M模式下的异常向量寄存器(用于虚拟化)

2.3.2 补充

2.3.2.1 misa寄存器

  • misa:表示处理器支持的体系结构和扩展
    • Extensions(bit25:0):表示处理器支持的扩展
    • MXL(bit[63:62):表示M模式下寄存器长度
      • 1:32位
      • 2:64位
      • 3:128位
位 名称 说明
0 A 原子操作扩展
1 B 位操作扩展
2 C 压缩指令扩展
3 D 双精度浮点数扩展
4 E RV32E指令集扩展
5 F 单精度浮点数扩展
6 G 保留
7 H 虚拟化扩展
8 I RV32I/RV64I/RV128I基础指令集扩展
9 J 动态翻译语言扩展
10 K 保留
11 L 保留
12 M 整数乘/除扩展
13 N 用户中断扩展
14 O 保留
15 P SIMD扩展
16 Q 4倍精度浮点数扩展
17 R 保留
18 S 支持S模式
19 T 保留
20 U 支持U模式
21 V 可伸缩矢量扩展
22 W 保留
23 X 非标准扩展
24 Y 保留
25 Z 保留

2.3.2.2 mstatus寄存器

字段 尾段 说明
UIE bit0
SIE bit1 中断使能位,用于使能和关闭S模式下所有的中断
MIE bit3 中断使能位,用于使能和关闭M模式下所有的中断
SPIE bit5 中断使能保存位。当一个异常陷入S模式时,SIE的值保存到SPIE中,SIE设置为0。当调用SRET指令返回时,从SPIE中恢复SIE,然后SPIE设置为1
UBE bit6 控制U模式下加载和存储指令访问内存的大小端模式。 0:小端。 1:大端。
MPIE bit7 中断使能保存位。当一个异常陷入M模式时,MIE的值保存到MPIE中,MIE设置为0。当调用MRET指令返回时,从MPIE中恢复MIE,然后MPIE设置为1
SPP bit8 陷入S模式之前的CPU处理模式。 0:从U模式陷入到S模式。 1:在S模式触发的异常。
VS bir10:9 使能可伸缩矢量扩展
MPP bit12:11 陷入M模式之前CPU的处理模式。 0:从U模式陷入到M模式。 1:从S模式陷入到M模式 2:在M模式触发的异常。
FS bit14:13 使能浮点数单元
XS bit[16:15 使能U模式下扩展的其他状态
MPRV bit17 修改有效特权模式: 0:加载和存储指令按照当前的处理器模式进行地址转换和内存保护。 加载和存储指令按照MPP字段中存储的处理器模式的权限进行内存保护与检查
SUM bit18 指定在S模式下是否允许访问U模式的内存。 0:在S模式下访问U模式下的内存是会触发异常。 1:在S模式下可以访问U模式下的内存
MXR bit19 指定访问内存的权限。 0:可以加载只读页面。 1:可以加载可读和可执行的页面
TVM bit20 支持拦截S模式下的虚拟内存管理操作
TW bit21 支持拦截WFI指令。 0:WFI指令可以在低权限模式下执行。 1:
TSR bit22 支持拦截SRET指令。 0:在S模式下正常执行SRET指令。 1:在S模式下执行SRET指令会触发非法指令异常。
UXL bit33:32 U模式下寄存器长度
SXL bit35:34 S模式下寄存器长度
SBE bit36 控制S模式下加载和内存访问的大小端模式。 0:小端。 1:大端。
MBE bit37 控制M模式下加载和内存访问的大小端模式。 0:小端。 1:大端。
相关推荐
luoganttcc2 天前
RISC-V 指令集与机器码:从 32 位编码到程序执行
risc-v·计算机体系
ccbw162 天前
CH32L103低功耗RISC-V MCU的集成外设与选型参考
单片机·嵌入式硬件·risc-v·低功耗mcu·潜创微·青稞risc-v4c
sramdram3 天前
国产32位CH32V系列RISC-V单片机
单片机·嵌入式硬件·risc-v·国产32位单片机·risc-v单片机
OpenAnolis小助手4 天前
报名倒计时3天!2026 RISC-V Summit 中国峰会龙蜥生态分论坛亮点抢先看
操作系统·龙蜥社区·risc-v·agentic cpu
ChipCamp8 天前
零门槛上手的RISC-V项目:nerv(附Verilog-vs-SysVerilog)
risc-v·systemverilog·interface·nerv·modport
ChipCamp8 天前
零门槛上手的RISC-V项目:蜂鸟e203(附RTL-Hierarchy欣赏小技巧)
risc-v·verilator·iverilog·蜂鸟e203·rtl-hierarchy
国科安芯10 天前
商业立方星平台中高集成度抗辐射MCU的功耗优化与批量化应用可行性探讨
单片机·嵌入式硬件·架构·risc-v·抗辐射·as32x601
RISCV_Explorer11 天前
RISC-V RVV向量性能调优实战——LMUL与SEW参数选型、访存瓶颈判断与微基准方法
risc-v
国科安芯14 天前
星载通信载荷信号处理中抗辐射微控制器的选型与适应性分析
人工智能·嵌入式硬件·mcu·信号处理·risc-v·抗辐射·空间信息
RISCV_Explorer15 天前
RISC-V RVV向量编程模型机制解析——vsetvl配置、掩码与尾元素策略及长度无关编程
后端·risc-v