【RISC-V】RISC-V寄存器

这篇具有很好参考价值的文章主要介绍了【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)。

【RISC-V】RISC-V寄存器,RISC-V体系结构编程与实践,risc-v
CSR地址空间映射:文章来源地址https://www.toymoban.com/news/detail-689972.html

地址范围 bit[11:10] bit[9:8] bit[7: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(bit[25: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 bit[0]
SIE bit[1] 中断使能位,用于使能和关闭S模式下所有的中断
MIE bit[3] 中断使能位,用于使能和关闭M模式下所有的中断
SPIE bit[5] 中断使能保存位。当一个异常陷入S模式时,SIE的值保存到SPIE中,SIE设置为0。当调用SRET指令返回时,从SPIE中恢复SIE,然后SPIE设置为1
UBE bit[6] 控制U模式下加载和存储指令访问内存的大小端模式。
0:小端。
1:大端。
MPIE bit[7] 中断使能保存位。当一个异常陷入M模式时,MIE的值保存到MPIE中,MIE设置为0。当调用MRET指令返回时,从MPIE中恢复MIE,然后MPIE设置为1
SPP bit[8] 陷入S模式之前的CPU处理模式。
0:从U模式陷入到S模式。
1:在S模式触发的异常。
VS bir[10:9] 使能可伸缩矢量扩展
MPP bit[12:11] 陷入M模式之前CPU的处理模式。
0:从U模式陷入到M模式。
1:从S模式陷入到M模式
2:在M模式触发的异常。
FS bit[14:13] 使能浮点数单元
XS bit[16:15 使能U模式下扩展的其他状态
MPRV bit[17] 修改有效特权模式:
0:加载和存储指令按照当前的处理器模式进行地址转换和内存保护。
加载和存储指令按照MPP字段中存储的处理器模式的权限进行内存保护与检查
SUM bit[18] 指定在S模式下是否允许访问U模式的内存。
0:在S模式下访问U模式下的内存是会触发异常。
1:在S模式下可以访问U模式下的内存
MXR bit[19] 指定访问内存的权限。
0:可以加载只读页面。
1:可以加载可读和可执行的页面
TVM bit[20] 支持拦截S模式下的虚拟内存管理操作
TW bit[21] 支持拦截WFI指令。
0:WFI指令可以在低权限模式下执行。
1:
TSR bit[22] 支持拦截SRET指令。
0:在S模式下正常执行SRET指令。
1:在S模式下执行SRET指令会触发非法指令异常。
UXL bit[33:32] U模式下寄存器长度
SXL bit[35:34] S模式下寄存器长度
SBE bit[36] 控制S模式下加载和内存访问的大小端模式。
0:小端。
1:大端。
MBE bit[37] 控制M模式下加载和内存访问的大小端模式。
0:小端。
1:大端。

到了这里,关于【RISC-V】RISC-V寄存器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RISC-V体系结构的U-Boot引导过程 第一阶段

    RISC-V体系结构的U-Boot引导过程 第一阶段 flyfish .globl使符号对链接器可见相当于C语言中的Extern,声明此变量,并且告诉链接器此变量是全局变量,外部可以访问.u-boot.lds里的ENTRY(_start)也是这里的_start。 即指定入口为_start,_start就是整个start.S的开始的地方,是整个uboot的代码的开

    2024年02月10日
    浏览(32)
  • FPGA原理与结构——移位寄存器(Shift Registers)

    系列文章目录:FPGA原理与结构(0)——目录与传送门 目录 一、移位寄存器概述 1、基本概念      2、LUT实现移位寄存器 3、移位寄存器的应用 4、移位寄存器的功能 5、移位寄存器结构 6、移位寄存器级连 二、移位寄存器数据流 1、动态读操作(移位长度不固定) 2、静态读

    2024年02月12日
    浏览(80)
  • FPGA原理与结构(5)——移位寄存器(Shift Registers)

    系列文章目录:FPGA原理与结构(0)——目录与传送门 目录 一、移位寄存器概述 1、基本概念      2、LUT实现移位寄存器 3、移位寄存器的应用 4、移位寄存器的功能 5、移位寄存器结构 6、移位寄存器级连 二、移位寄存器数据流 1、动态读操作(移位长度不固定) 2、静态读

    2024年02月08日
    浏览(26)
  • stm32的BRR寄存器和BSRR寄存器

    1、BRR---   bit   RESET(置0)  register   //高16位无,低16位置1为0,不能写1 2 、BSRR---   bit   SET(设置1或0)       register   //低16位设置1为0 BSRR:用于低16位的作用是让指定的IO口置1;而高16位的作用是让指定的IO口置0。  

    2024年02月11日
    浏览(33)
  • 【汇编中的寄存器分类与不同寄存器的用途】

    寄存器分类 在计算机体系结构中,8086CPU,寄存器可以分为以下几类: 1. 通用寄存器: 通用寄存器是用于存储数据和执行算术运算的寄存器。在 x86 架构中,这些通用寄存器通常包括 AX、BX、CX、DX、SI、DI、BP 和 SP。其中,AX、BX、CX 和 DX 寄存器可以分别作为累加器(accumulat

    2024年02月09日
    浏览(35)
  • 寄存器内存读写指令(二) —— 多寄存器读写 LDM / STM

    有的时候,CPU可能会遇到 a++; b++; c++,这个时候为了提升效率,CPU可能会一次将多个寄存器里的变量保存到内存中。这个时候之前介绍的 LDR / STR 指令虽然也能实现,但只能操作一个寄存器的读写。 因此,考虑到这点,下面介绍多个寄存器的读写指令 将 多个寄存器 的数据写

    2024年02月07日
    浏览(47)
  • 锁存器、D触发器、寄存器理解

    1、锁存器        锁存器对脉冲的电平敏感,也就是电平触发,在有效的电平下,锁存器处于使能状态,输出随着输入发生变化,此时它不锁存信号,就像一个缓冲器一样;在锁存器没有使能时,则数据被锁住,输入信号不起作用,此时输出一直为锁存的状态信息(锁存最后

    2024年02月09日
    浏览(28)
  • FPGA之 寄存器、触发器、锁存器

    每个slice有8个存储元素,每个存储元素如下图所示:  其中四个为DFF/LATCH,可以配置为边沿触发D型触发器或电平敏感锁存器输入上图。D输入可以通过AFFMUX, BFFMUX, CFFMUX或DFFMUX的LUT输出直接驱动,也可以通过AX, BX, CX或DX输入绕过函数发生器的 BYPASS slice输入直接驱动。当配置为锁存

    2024年01月18日
    浏览(38)
  • ARM寄存器组

    CM3 拥有通用寄存器 R0‐R15 以及一些特殊功能寄存器。 R0-R7也被称为低组寄存器,所有指令可以访问它们,它们的字长为32位,复位后的初始值是不可预料的。 R8-R12也被称为高组寄存器,所有指令可以访问它们,它们的字长为32位,复位后的初始值是不可预料的。 R13寄存器中

    2024年02月10日
    浏览(37)
  • 寄存器(详解)

            想象你在做菜的过程中,寄存器的作用可以类比为你在炒菜时使用的炉灶上的炊具和炊具支架。炊具支架上放置的是你即将使用的食材和调料,而这些食材和调料就相当于寄存器中的数据。 炊具支架: 炊具支架类似于CPU内部的寄存器。它们都是容量相对较小、位

    2024年02月05日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包