【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:大端。
相关推荐
电子科技圈5 天前
2026 RISC-V中国峰会观察:编译调试工具链的“在场节奏”,释放了什么信号?
大数据·人工智能·设计模式·软件工程·软件构建·代码规范·risc-v
OpenAnolis小助手5 天前
多租户公有云共享 CXL 内存池场景下的内存卸载研究
人工智能·操作系统·龙蜥社区·risc-v·agentic os
@嵌入式扫地僧8 天前
沁恒 MRS Agent RISC-V 开发提效实战:从自然语言需求到芯片工程落地全流程指南
risc-v·代码生成·嵌入式ai·开发效率·沁恒mrs
dadaobusi8 天前
riscv64 ubuntu linux version
risc-v
MounRiver_Studio13 天前
原生集成AI 能力的 RISC-V IDE:第三代 MounRiver Studio 正式发布
ide·ai·agent·risc-v
Imagination官方博客14 天前
从开源驱动到完整软件栈:Imagination 助力 RISC-V 图形生态发展
开源·risc-v
国科安芯14 天前
开放指令集的空间之路:RISC-V微控制器在商业航天中的生态价值与自主性评述
嵌入式硬件·mcu·risc-v·低轨卫星·商业航天·抗辐射
潜创微科技14 天前
CH592:集成 BLE 的青稞 RISC-V 无线 MCU
c语言·单片机·risc-v·无线投屏·低延迟·沁恒
dadaobusi15 天前
学习:RISC-V 虚拟化/H 扩展 语境 VTW 和 VTVM
risc-v
潜创微科技15 天前
CH591:成本优化的青稞 RISC-V 无线 MCU
c语言·单片机·risc-v·低延迟·沁恒·青稞