当前位置: 首页 > news >正文

【RISC-V】RISC-V寄存器

一、通用寄存器

32位RISC-V体系结构提供32个32位的整型通用寄存器
寄存器别名全称说明
X0zero零寄存器可做源寄存器(rs)或目标寄存器(rd)
X1ra链接寄存器保存函数返回地址
X2sp栈指针寄存器指向栈的地址
X3gp全局寄存器用于链接器松弛优化
X4tp线程寄存器常用于在OS中保存指向进程控制块(task_struct)数据结构的指针
X5 ~ X7
X28 ~ X31
t0 ~ t6临时寄存器
X8s0/fp帧指针寄存器用于函数调用,被调用函数需保存数据
X9s1用于函数调用 ,被调用函数需要保存的数据
X10 ~ X17a0 ~ a7用于函数调用,传递参数和返回值
X18 ~ X27s2 ~ s11用于函数调用 ,被调用函数需要保存的数据

二、系统寄存器

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

CSR指令编码结构
CSR地址空间映射:

地址范围bit[11:10]bit[9:8]bit[7:4]访问模式访问权限
0x000 ~ 0x0FF0000xxxxURW
0x400 ~ 0x4FF0100xxxxURW
0x800 ~ 0x8FF1000xxxxURW(用户自定义系统寄存器)
0xC00 ~ 0xC7F11000xxxURO
0xC80 ~ 0xCBF110010xxURO
0xCC0 ~ 0xCFF110011xxURO
0x100 ~ 0x1FF0001xxxxSRW
0x500 ~ 0x57F01010xxxSRW
0x580 ~ 0x5BF010110xxSRW
0x5C0 ~ 0x5FF010111xxSRW(用户自定义系统寄存器)
0x900 ~ 0x97F10010xxxSRW
0x980 ~ 0x9BF100110xxSRW
0x9C0 ~ 0x9FF100111xxSRW(用户自定义系统寄存器)
0xD00 ~ 0xD7F11010xxxSRO
0xD80 ~ 0xDBF110110xxSRO
0xDC0 ~ 0xDFF110111xxSRO(用户自定义系统寄存器)
0x300 ~ 0x3FF0011xxxxMRW
0x700 ~ 0x77F01110xxxMRW
0x780 ~ 0x79F1011100xMRW
0x7A0 ~ 0x7AF01111010MRW(用于调试寄存器)
0x7B0 ~ 0x7BF01111011MRW(只能用于调试寄存器)
0x7C0 ~ 0x7FF011111xxMRW(用户自定义系统寄存器)
0xB00 ~ 0xB7F10110xxxMRW
0xB80 ~ 0xBBF101110xxMRW
0xBC0 ~ 0xBFF101111xxMRW(用户自定义系统寄存器)
0xF00 ~ 0xF7F11110xxxMRO
0xF80 ~ 0xFBF111110xxMRO
0xFC0 ~ 0xFFF111111xxMRO(用户自定义系统寄存器)
  • 出发非法指令异常的行为:
    • 访问不存在或未实现的寄存器;
    • 写入RO的系统寄存器
    • 低级别处理器模式下访问高级别处理器模式的系统寄存器(模式级别:M > S > U)

2.1 U模式 系统寄存器

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

2.2 S模式 系统寄存器

地址CSR名称属性说明
0x100sstatusSRWS模式下的处理器状态寄存器
0x104sieSRWS模式下的中断使能寄存器
0x105stvecSRWS模式下的异常向量表入口地址寄存器
0x106scounterenSRWS模式下的计数使能寄存器
0x10AsenvcfgSRWS模式下的环境配置寄存器
0x140scratchSRW用于异常处理的临时寄存器
0x141sepcSRWS模式下的异常模式程序计数器(PC)寄存器
0x142scauseSRWS模式下的异常原因寄存器
0x143stvalSRWS模式下的异常向量寄存器(记录发生异常的虚拟地址)
0x144sipSRWS模式下的中断待定寄存器
0x180satpSRWS模式下的地址转换与保护寄存器
0x5A8scontextSRWS模式下的上下文寄存器(用于调试)
  • 说明:
    • scounteren用于在S模式下,使能U模式下的硬件性能检测和计数寄存器(cycle, time, instret, HPM3~31)
      scratch在从S模式返回U模式时,保存S模式时的进程控制块。

2.3 M模式 系统寄存器

2.3.1 总览表

地址CSR名称属性说明
0xF11mvendoridMRO机器厂商ID寄存器
0xF12marchidMRO处理器体系结构ID寄存器
0xF13mimpidMRO处理器实现版本编号寄存器
0xF14mhartidMRO处理器硬件线程(hart)ID寄存器
0xF15mconfigptrMRO配置数据结构寄存器
0x300mstatusMRWM模式下的处理器状态寄存器
0x301misaMRW指令集体系结构和扩展寄存器
0x302medelegMRWM模式下的异常委托寄存器,把异常委托到S模式下处理
0x303midelegMRWM模式下的中断委托寄存器,把中断委托到S模式下处理
0x304mieMRWM模式下的中断使能寄存器
0x305mtvecMRWM模式下的异常向量入口地址寄存器
0x306mcounterenMRWM模式下的计数使能寄存器。用于使能S模式或U模式下的硬件性能检测和计数寄存器。
0x340mscratchMRW用于异常处理的临时寄存器
0x341mepcMRWM模式下的异常模式PC寄存器。处理器陷入M模式时,保存中断或遇到的异常的指令的虚拟地址
0x342mcauseMRWM模式下的异常原因寄存器
0x343mtvalMRWM模式下的异常向量寄存器。处理器陷入M模式时,mtval记录发生异常的虚拟地址。
0x344mipMRWM模式下的中断待定寄存器。表示哪些中断处与待定状态。
0x34AmtinstMRWM模式下的陷入指令(用于虚拟化)
0x34Bmtval2MRWM模式下的异常向量寄存器(用于虚拟化)

2.3.2 补充

2.3.2.1 misa寄存器

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

2.3.2.2 mstatus寄存器

字段尾段说明
UIEbit[0]
SIEbit[1]中断使能位,用于使能和关闭S模式下所有的中断
MIEbit[3]中断使能位,用于使能和关闭M模式下所有的中断
SPIEbit[5]中断使能保存位。当一个异常陷入S模式时,SIE的值保存到SPIE中,SIE设置为0。当调用SRET指令返回时,从SPIE中恢复SIE,然后SPIE设置为1
UBEbit[6]控制U模式下加载和存储指令访问内存的大小端模式。
0:小端。
1:大端。
MPIEbit[7]中断使能保存位。当一个异常陷入M模式时,MIE的值保存到MPIE中,MIE设置为0。当调用MRET指令返回时,从MPIE中恢复MIE,然后MPIE设置为1
SPPbit[8]陷入S模式之前的CPU处理模式。
0:从U模式陷入到S模式。
1:在S模式触发的异常。
VSbir[10:9]使能可伸缩矢量扩展
MPPbit[12:11]陷入M模式之前CPU的处理模式。
0:从U模式陷入到M模式。
1:从S模式陷入到M模式
2:在M模式触发的异常。
FSbit[14:13]使能浮点数单元
XSbit[16:15使能U模式下扩展的其他状态
MPRVbit[17]修改有效特权模式:
0:加载和存储指令按照当前的处理器模式进行地址转换和内存保护。
加载和存储指令按照MPP字段中存储的处理器模式的权限进行内存保护与检查
SUMbit[18]指定在S模式下是否允许访问U模式的内存。
0:在S模式下访问U模式下的内存是会触发异常。
1:在S模式下可以访问U模式下的内存
MXRbit[19]指定访问内存的权限。
0:可以加载只读页面。
1:可以加载可读和可执行的页面
TVMbit[20] 支持拦截S模式下的虚拟内存管理操作
TWbit[21]支持拦截WFI指令。
0:WFI指令可以在低权限模式下执行。
1:
TSRbit[22]支持拦截SRET指令。
0:在S模式下正常执行SRET指令。
1:在S模式下执行SRET指令会触发非法指令异常。
UXLbit[33:32]U模式下寄存器长度
SXLbit[35:34]S模式下寄存器长度
SBEbit[36]控制S模式下加载和内存访问的大小端模式。
0:小端。
1:大端。
MBEbit[37]控制M模式下加载和内存访问的大小端模式。
0:小端。
1:大端。

相关文章:

【RISC-V】RISC-V寄存器

一、通用寄存器 32位RISC-V体系结构提供32个32位的整型通用寄存器寄存器别名全称说明X0zero零寄存器可做源寄存器(rs)或目标寄存器(rd)X1ra链接寄存器保存函数返回地址X2sp栈指针寄存器指向栈的地址X3gp全局寄存器用于链接器松弛优化X4tp线程寄存器常用于在OS中保存指向进程控…...

Python爬虫异常处理实践:处理被封禁和网站升级问题

在这篇文章中,我们将一起探讨Python爬虫异常处理实践,特别关注处理被封禁和网站升级问题。让我们一起来看看如何解决这些问题,提高我们爬虫程序的稳定性和可靠性。   首先,我们要了解为什么会遇到这些问题。网站封禁爬虫的原因主…...

重大工程建造云服务平台源码 SpringCloud+Vue

技术架构: 微服务JavaSpring Cloud VueUniApp MySql 开发语言:Java 开发工具:Idea 前端框架:Vue 后端框架:Spring Cloud 数 据 库:MySql 移 动 端:UniApp 系统端口:PC端&…...

MyBatisPlus简单入门

1、简单介绍MyBatisPlus MyBatisPlus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,完全去SQL化,封装好了大量的CRUD操作。甚至吧CRUD操作封装到了Service层,可以直接在Controller调用现成的CRUD服务层&#xff0c…...

神经网络入门

神经网络的基本骨架 1. nn.Module的使用 所有的模型都要继承 Module 类需要重写初始化函数和运算步骤函数 eg: import torch.nn as nn import torch.nn.functional as Fclass Model(nn.Module): # 继承父类Module def __init__(self): # 重写初始化函数super()…...

【面试经典150题】多数元素

🔗题目链接 ✈题目描述: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 ⌊ n/2 ⌋表示n/2结果向下取…...

c#垃圾回收(Garbage Collection)

在C#中,垃圾回收(Garbage Collection)是一种自动管理内存的机制。它负责跟踪和释放不再使用的内存,以便程序可以有效地使用内存资源。 C#中的垃圾回收器是由.NET运行时(CLR)提供和管理的。它使用了一种叫做…...

vue 基于element-plus el-button封装按钮组件

封装组件的原则是&#xff1a;组件只是数据流通的一个管道&#xff0c;不要糅合太多的逻辑在里面&#xff0c;是一个纯组件&#xff0c;还要根据自己项目的业务场景做具体的处理。 // MyButton.vue // 基于element-plus中el-button来封装按钮 <template><el-button c…...

smbus只能再python2.7下运行?不能再python3.8下运行吗?

不是的&#xff0c;SMBus并不只能在Python 2.7下运行&#xff0c;它也可以在Python 3.8及更高版本下运行。SMBus是用于访问系统上的I2C设备&#xff08;Inter-Integrated Circuit&#xff0c;一种串行通信协议&#xff09;的Python库&#xff0c;它应该与Python 3.8兼容。 要在…...

python中is和==的区别

is 和 的区别 在Python中&#xff0c;is和是两个用于比较对象的操作符&#xff0c;它们有不同的作用和用法。 is操作符&#xff1a; is用于比较两个对象的身份标识&#xff0c;即判断两个对象是否引用同一个内存地址的对象。当is操作符用于比较两个对象时&#xff0c;它会判断…...

Viobot回环使用

Viobot回环是使用词袋匹配的方式&#xff0c;&#xff0c;当新的关键帧能够匹配词袋里面记录过的关键帧时&#xff0c;触发回环&#xff0c;将设备的当前位姿拉到历史位姿。 一.上位机操作 词袋使用方法 连接上设备&#xff0c;先停止算法。UI上点 设置 选到 loop 选项卡&…...

React钩子函数之forward结合useImperativeHandle钩子的基本使用

React钩子函数是React框架中非常重要的一部分&#xff0c;其中forward和useImperativeHandle是两个常用的钩子函数。这两个钩子函数可以结合使用&#xff0c;用来实现一些高级的功能。 首先&#xff0c;让我们来了解一下forward钩子函数。它的作用是将父组件中的props传递给子…...

c++中移动语义和完美转发

C 中的移动语义和完美转发是 C11 引入的两个重要特性&#xff0c;它们分别用于提高性能和灵活性。 移动语义&#xff08;Move Semantics&#xff09;: 移动语义允许有效地将资源&#xff08;如堆上分配的内存或其他资源&#xff09;从一个对象转移到另一个对象&#xff0c;而…...

【linux命令讲解大全】040. 文件操作:使用touch命令创建和更新文件

文章目录 touch补充说明语法选项参数示例 从零学 python touch 创建新的空文件或更新已存在文件的时间标签。 补充说明 touch命令具有两个功能&#xff1a; 更新已存在文件的时间标签为当前系统时间&#xff08;默认方式&#xff09;&#xff0c;文件的数据保持不变。创建新…...

Redis之MoreKey问题及Scan命令解读

目录 MoreKey问题讨论 Scan命令 Sscan命令 Hscan命令 Zscan命令 MoreKey问题讨论 keys * 查看当前库所有key 对于海量数据执行key *会造成严重服务卡顿、影响业务。在实际环境中最好不要使用。生产制造过程中keys * / flushdb/flushall等危险命令以防止误删误用。 大量的…...

QA工具开发流程

前言 在项目上线前期&#xff0c;这边根据需求制作了一套QA测试工具。主要分为以下四个模块的测试**图1** **数值测试&#xff1a;**主要包括了角色的等级变更、游戏里货币的变更、&#xff08;目前已制作的&#xff09;游戏道具的数量变更。这些可能归一为一类测试模型**动画…...

JSON.toJSONString首字母大小写问题

前言 开发过程中遇到的&#xff0c;对象转字符串时&#xff0c;有个字段首字母是大写的&#xff0c;转换之后就变成了小写&#xff0c;在这里记录下 代码示例 String jsonString JSON.toJSONString(obj,SerializerFeature.PrettyFormat,SerializerFeature.WriteMapNullValue,…...

ant-vue1.78版a-auto-complete表单自动搜索返回列表中的关键字标红

a-auto-complete表单自动搜索返回列表中的关键字标红 通常在做关键字标红的场景&#xff0c;都是后端返回html结构&#xff0c;前端直接渲染实现&#xff0c;但是如果需要前端处理的话&#xff0c;实现也是很简单的&#xff0c;接下来我直接上应用场景吧 应用场景就是通过关键…...

Elasticsearch 优化

Elasticsearch 优化 2.1硬件选择 Elasticsearch 的基础是 Lucene &#xff0c;所有的索引和文档数据是存储在本地的磁盘中&#xff0c;具体的 路径可在 ES 的配置文件 ../config/elasticsearch.yml 中配置&#xff0c;如下&#xff1a; #----------------------------…...

spring boot的自动装配原理

spring boot的自动装配原理 解释和使用关键技术思想总结 解释和使用 自动装配是什么&#xff1a;自动将第三方组件的bean装载到ioc容器里&#xff0c;不需要开发人员再去写bean相关的一些配置 spring boot怎么做&#xff1a;在启动类上加SpringBootApplication注解就可以实现自…...

GRF (1-43) (rat)

一、基础信息中文名称&#xff1a;大鼠生长激素释放因子 (1-43)英文名称&#xff1a;Growth Hormone-Releasing Factor (1-43), rat三字母序列&#xff1a;His-Ala-Asp-Ala-Ile-Phe-Thr-Ser-Ser-Tyr-Arg-Arg-Ile-Leu-Gly-Gln-Leu-Tyr-Ala-Arg-Lys-Leu-Leu-His-Glu-Ile-Met-Asn-…...

3分钟快速上手vJoy:如何为Windows创建专业级虚拟游戏手柄

3分钟快速上手vJoy&#xff1a;如何为Windows创建专业级虚拟游戏手柄 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 您是否曾经因为缺少游戏手柄而无法畅玩那些只支持手柄操作的游戏&#xff1f;或者需要为特殊软件设计自定…...

【紧急更新】Midjourney 6.2已悄悄禁用glass关键词!替代方案+3套可直接复用的prompt模板(限24小时公开)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney 6.2玻璃质感禁用事件全貌解析 2024年7月&#xff0c;Midjourney官方悄然更新至v6.2版本&#xff0c;并在未发布正式公告的情况下&#xff0c;对部分高精度材质描述词实施了隐性限制——其中…...

RWKV vs Llama2:在论文审稿任务上,我们为什么第一版选了它?(附长上下文模型选型避坑指南)

RWKV与Llama2在论文审稿任务中的技术选型思考 当面对论文审稿这一知识密集型任务时&#xff0c;模型选型往往成为项目成败的关键。2023年第三季度&#xff0c;我们在构建首个论文审稿GPT系统时&#xff0c;曾在RWKV与Llama2之间面临艰难抉择。本文将深入剖析两种架构的核心差异…...

固定翼无人机遥控器对频与天线摆放:一个细节没做好,你的飞机可能就‘失联’了

固定翼无人机遥控器对频与天线摆放&#xff1a;一个细节没做好&#xff0c;你的飞机可能就‘失联’了 第一次操控固定翼无人机升空的时刻总是令人兴奋的&#xff0c;但在这之前&#xff0c;确保遥控系统可靠工作是关键中的关键。许多新手飞手往往将注意力集中在机身组装和动力调…...

中兴光猫终极破解指南:3步解锁永久Telnet访问权限

中兴光猫终极破解指南&#xff1a;3步解锁永久Telnet访问权限 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 您是否曾经因为中兴光猫的高级功能被限制而感到困扰&#xff1f;无法配置…...

Kimi推出超实用插件!让AI真正像你一样操作浏览器

月之暗面&#xff08;Moonshot AI&#xff09;正式推出了一款名为 Kimi WebBridge 的浏览器扩展插件。这款产品的核心理念是让AI Agent像你本人一样操作浏览器。它带着你的登录状态、你的Cookie、你的账号&#xff0c;去点击、滑动、输入&#xff0c;填写表单、提取信息、跨站点…...

Show-o2 3D Causal VAE空间:为文本、图像和视频模态提供可扩展解决方案

Show-o2 3D Causal VAE空间&#xff1a;为文本、图像和视频模态提供可扩展解决方案 【免费下载链接】Show-o [ICLR & NeurIPS 2025] Repository for Show-o series, One Single Transformer to Unify Multimodal Understanding and Generation. 项目地址: https://gitcod…...

从AVX512到Tensor Core:聊聊那些‘纸上算力’和‘实际跑分’为啥总对不上

从AVX512到Tensor Core&#xff1a;揭秘理论算力与实际性能的鸿沟 当你在产品手册上看到某款CPU标称2.4T FLOPS的峰值算力&#xff0c;或是GPU宣称能提供数十TFLOPs的AI加速性能时&#xff0c;是否曾兴奋地购入设备&#xff0c;却在运行实际工作负载时大失所望&#xff1f;这种…...

告别复制粘贴!手把手教你封装可复用的Echarts-for-weixin图表组件

微信小程序Echarts组件化实战&#xff1a;打造高复用图表解决方案 在数据驱动的产品设计中&#xff0c;图表可视化已成为微信小程序不可或缺的组成部分。面对多页面复用、动态数据更新等实际需求&#xff0c;直接使用原生ec-canvas组件往往会导致代码冗余和维护困难。本文将分享…...