【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:大端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/92955.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【安全】原型链污染 - Code-Breaking 2018 Thejs

目录 准备工作 环境搭建 加载项目 复现 代码审计 payload 总结 准备工作 环境搭建 Nodejs BurpSuite 加载项目 项目链接 ① 下载好了cmd切进去 ② 安装这个项目 可以检查一下 ③运行并监听 可以看到已经在3000端口启动了 复现 代码审计 const fs require(fs) cons…

Streamlit 讲解专栏(十一):数据可视化-图表绘制详解(中)

文章目录 1 前言2 绘制交互式散点图3 定制图表主题4 增强数据可视化的交互性与注释步骤1步骤二 5 结语 1 前言 在上一篇博文《 Streamlit 讲解专栏(十):数据可视化-图表绘制详解(上)》中,我们学习了一些关…

开源项目-数据可视化分析平台

哈喽,大家好,今天给大家带来一个开源项目-数据可视化分析平台。项目通过SpringBoot实现 数据可视化分析平台主要有数据源管理,项目管理,数据集管理,图表管理,看板管理等功能 登录 数据源管理 数据源管理功能可以添加MySQL,Oracle,PostgreSQL等类型的数据源信息 项目…

Unity OnDrawGizmos的简单应用 绘制圆形

编辑器和配置表各有各的好。 卡牌游戏即使再复杂,哪怕是梦幻西游,大话西游那种,甚至wow那种,用配表都完全没问题。但是崩坏3,或者鬼泣,格斗游戏,可视化编辑器是唯一的选择。 开发初期刚开始配技…

学习创建第一个 React 项目

目标 本篇的目标是配置好基础的环境并创建出第一个 React 项目。 由于之前没接触过相关的知识,所以还需要了解其依赖的一些概念。 步骤主要参考First React app using create-react-app | VS code | npx | npm - YouTube 0. 简单了解相关概念 JavaScript 一种语…

kali 2023.3新增工具

在终端模拟器中运行 sudo apt update && sudo apt full-upgrade 命令来更新其安装 Kali Linux 2023.3 发布中包含了九个新工具,分别是: Calico:云原生网络和网络安全。 cri-tools:用于Kubelet容器运行时接口的命令行界面…

【马拉车算法/动态规划】最长回文字串

最长回文字串 1.问题描述2.中心扩展法(O(N^2))3.动态规划4.Manacher(马拉车算法) 1.问题描述 常用有3种算法:中心扩展法、动态规划和Manacher算法 2.中心扩展法(O(N^2)) 解释: 从中心向外扩展。 分为两种…

【C++进阶(二)】STL大法--vector的深度剖析以及模拟实现

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 vector 1. 前言2. 熟悉vector的接口函数2.1 vec…

微服务中间件--多级缓存

多级缓存 多级缓存a.JVM进程缓存1) Caffeine2) 案例 b.Lua语法1) 变量和循环2) 条件控制、函数 c.多级缓存1) 安装OpenResty2) 请求参数处理3) 查询Tomcat4) Redis缓存预热5) 查询Redis缓存6) Nginx本地缓存 d.缓存同步1) 数据同步策略2) 安装Canal2.a) 开启MySQL主从2.b) 安装…

【动手学深度学习】--21.锚框

锚框 学习视频:锚框【动手学深度学习v2】 官方笔记:锚框 1.锚框 目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(gro…

6个最受欢迎的3D点云查看工具【在线/离线】

推荐:用 NSDT编辑器 快速搭建可编程3D场景 免费3D点云软件有点像寻找大脚怪… 性质神秘。 模糊的目击。 有些人甚至认为这是民间传说。 但令人惊讶的是,免费的3D点云软件确实存在。 与大脚野人不同的是,我们已经证明了它的存在。 本文将介…

spark中排查Premature EOF: no length prefix available

报错信息 /07/22 10:20:28 WARN DFSClient: Error Recovery for block BP-888461729-172.16.34.148-1397820377004:blk_15089246483_16183344527 in pipeline 172.16.34.64:50010, 172.16.34.223:50010: bad datanode 172.16.34.64:50010 [DataStreamer for file /bdp/data/u9…

YOLOv5、v8改进:CrissCrossAttention注意力机制

目录 1.简介 2. yolov5添加方法: 2.1common.py构建CrissCrossAttention模块 2.2yolo.py中注册 CrissCrossAttention模块 2.3修改yaml文件。 1.简介 这是ICCV2019的用于语义分割的论文,可以说和CVPR2019的DANet遥相呼应。 和DANet一样,…

maven下载不了仓库地址为https的依赖jar,配置参数忽略ssl安全检查

问题原因 私服使用的https地址,然后安全证书过期的或没有,使用maven命令时,可以添加以下参数,忽略安全检查 mvn -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue -Dmaven.wagon.http.ssl.ignore.vali…

《机器学习核心技术》分类算法 - 决策树

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 决策树 1、决策树API2、决策时实际应用2.1、获取数据集2.2、划分数据集2.3、决策…

【算法专题突破】双指针 - 快乐数(3)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 1. 题目解析 题目链接:202. 快乐数 - 力扣(Leetcode) 这道题的题目也很容易理解, 看一下题目给的示例就能很容易明白, 但是要注意一个点&#…

redux中间件理解,常见的中间件,实现原理。

文章目录 一、Redux中间件介绍1、什么是Redux中间件2、使用redux中间件 一、Redux中间件介绍 1、什么是Redux中间件 redux 提供了类似后端 Express 的中间件概念,本质的目的是提供第三方插件的模式,自定义拦截 action -> reducer 的过程。变为 actio…

Ceph入门到精通-大流量10GB/s LVS+OSPF 高性能架构

LVS 和 LVSkeepalived 这两种架构在平时听得多了,最近才接触到另外一个架构LVSOSPF。这个架构实际上是LVSKeepalived 的升级版本,我们所知道LVSKeepalived 架构是这样子的: 随着业务的扩展,我们可以对web服务器做水平扩展&#xf…

4G WiFi LoRa无线外夹式超声波管道流量计MQTT/http协议 json数据说明

ip:114.128.112.131 port:1883 uname:scwl_flowmeter pwd:b123 topic:iot/data/scwlflowmeter { “deviceId”:“设备序列号”, “flow”:“瞬时流量(浮点数)”, “heatFlow”:“瞬时热流量&am…

Vue脚手架中安装ElementUi

目录 ElementUi简介: ElementUi下载: npm 安装: 引入ElementUi: 测试是否引入成功: Element-ui官网:组件 | Element ElementUi简介: ElementUi,是由国内的饿了么团队开发并开源的一套为开…