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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt/C++编写视频监控系统81-Onvif报警抓图和录像并回放

一、前言 视频监控系统中的图文警情模块,是通过Onvif协议的事件订阅拿到的,通过事件订阅后,设备的各种报警事件比如入侵报警/遮挡报警/越界报警/开关量报警等,触发后都会主动往订阅者发送,而且一般都是会发送两次&…

Node.js crypto模块 加密算法

背景 微信小程序调用飞蛾热敏纸打印机,需要进行参数sig签名校验,使用的是sha1进行加密 // 通过crypto.createHash()函数,创建一个hash实例,但是需要调用md5,sha1,sha256,sha512算法来实现实例的…

企业架构LNMP学习笔记7

PHP介绍: HTML:超文本标记语言 http: 超文本传输协议 端口80 浏览器将html代码解析成web页面。 PHP:超文本预处理器。后端语言开发,页面上需要动态改变修改的,需要连接数据库查询数据,转为html。 主要…

流媒体弱网优化之路(BBR应用)——GCC与BBR的算法思想分析

流媒体弱网优化之路(WebRTC)——GCC与BBR的算法思想分析 —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全配置&…

WebSocket(一)

一.什么是WebSocket 【1】WebSocket是一种协议,设计用于提供低延迟,全双工和长期运行的连接。 全双工:通信的两个参与方可以同时发送和接收数据,不需要等待对方的响应或传输完成。 【2】比较 传统通信(http协议&am…

Docker 的快速使用

ubuntu安装 centos安装 安装完毕之后执行一下这条命令,可以避免每次使用docker命令都需要sudo权限 sudo usermod -aG docker $USER阿里云docker镜像加速 DockerHub 遇到不懂或者不会使用的命令可以使用docker --help查看文档 docker --help 如: dock…

JavaWeb 文件上传和下载

目录 一、文件上传 1.文件上传和下载的使用说明 : 2.文件上传基本原理 : 3.文件上传经典案例 : 3.1 页面实现: 3.2 servlet实现 : 3.3 工具类实现 : 3.4 运行测试 : 3.5 注意事项 : 二、文件下载 1.文件下载基本原理 : 2.文件下载经典案例 : 2.1 准备工作 2.2 页面…

关于C语言参数传递的

一、C语言参数传递是整体带入 #include <stdio.h> #define DF(a,b) (a2*b) int main() { int s5; int k DF((s1),(s-3)); printf("%d",k); }输出结果 原因&#xff1a; #define DF(a,b) (a2*b) int k DF((s1),(s-3)); //等效 int k DF((s1)2 * (s-3)); …

useEffect 不可忽视的 cleanup 函数

在 react 开发中&#xff0c; useEffect 是我们经常会使用到的钩子&#xff0c;一个基础的例子如下&#xff1a; useEffect(() > {// some code here// cleanup 函数return () > {doSomething()} }, [dependencies])上述代码中&#xff0c; cleanup 函数的执行时机有如下…

代码随想录笔记--栈与队列篇

目录 1--用栈实现队列 2--用队列实现栈 3--有效的括号 4--删除字符串中的所有相邻重复项 5--逆波兰表达式求值 6--滑动窗口的最大值 7--前k个高频元素 1--用栈实现队列 利用两个栈&#xff0c;一个是输入栈&#xff0c;另一个是输出栈&#xff1b; #include <iostrea…

Windows 重新映射 CapsLock 大写锁定到 Ctrl

Windows 重新映射 CapsLock 大写锁定到 Ctrl 本要点中的这些方法适用于我的美国键盘布局。我不确定其他布局。如果出现问题&#xff0c;请恢复您的更改&#xff1b;删除您创建的注册表项&#xff08;并重新启动&#xff09;。 强烈推荐 方法5 ctrl2cap&#xff0c;因为不会影…

Modbus通信协议

Modbus通信协议 一、概述 Modbus通信协议是一种工业现场总线协议标准&#xff0c;常用的Modbus协议有以下三种类型&#xff1a;Modbus TCP、Modbus RTU、Modbus ASCll。 Modbus通信协议解决了通过串行线路在电子设备之间发送信息的问题。该协议在遵循该协议的体系结构中实现主…

Elasticsearch 7.6 - API高阶操作篇

ES 7.6 - API高阶操作篇 分片和副本索引别名添加别名查询所有别名删除别名使用别名代替索引操作代替插入代替查询 场景实操 滚动索引索引模板创建索引模板查看模板删除模板 场景实操一把索引的生命周期数据迁移APIGEO(地理)API索引准备矩形查询圆形查询多边形查询 自定义分词器…

小白学Go基础01-Go 语言的介绍

Go 语言对传统的面向对象开发进行了重新思考&#xff0c;并且提供了更高效的复用代码的手段。Go 语言还让用户能更高效地利用昂贵服务器上的所有核心&#xff0c;而且它编译大型项目的速度也很快。 用 Go 解决现代编程难题 Go 语言开发团队花了很长时间来解决当今软件开发人员…

ThinkPHP 文件上传 fileSystem 扩展的使用

ThinkPHP 文件上传 ThinkPHP 文件上传 扩展 filesystem一、安装 FileSystem 扩展二、认识 filesystem 配置文件 config/filesystem.php三、上传验证&#xff08;涉及到验证器的知识点&#xff09;四、文件上传demo ThinkPHP 文件上传 扩展 filesystem ThinkPHP 为我们 提供了 …

C语言每日一练---Day(14)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;统计每个月兔子的总数 数列的和 &#x1f493;博主csdn个人主页&#x…

Stable Diffusion 多视图实践

此教程是基于秋叶的webui启动器 1.Stable Diffsuion 使用多视图需要准备一个多角度open pose 图 我给大家提供一个可使用的。 2.需要添加图片到到controlnet当中,不要选择预处理器,选择模型为openpose的模型,然后需要点选同步图片尺寸。 3.然后填写关键字可以参照一下这个…

zookeeper 理论合集

目录 系统背景 集群结构 多个节点之间的角色 节点的状态 为什么引入 Observer 存储结构 ZNode 节点结构 ZNode 创建类型 内存数据存储 数据持久化 zookeeper 的容量大小 数据同步 消息广播 崩溃恢复 如何保证顺序一致性 核心流程 Leader 选举流程 脑裂问题 …

【nginx】access.log按照时间分割

access.log 大的网络访问下没有几天文件就变得非常大了&#xff0c;一直累计也不是办法啊 查看文件大小 du -sh *access.log 13G 按照时间把access.log分割一下 修改 nginx.conf 修改前的文件 修改后的文件 增加的内容 map $time_iso8601 $logdate {~^(?<ymd>\d{4}…

【ArcGIS Pro二次开发】(65):进出平衡SHP转TXT、TXT转SHP

最近一个小伙伴提了这么一个需求&#xff0c;需要把TXT和SHP进行互转。 这种TXT文件其实遇到了好几个版本&#xff0c;都有一点小差异。之前已经做过一个TXT转SHP的工具&#xff0c;但好像不适用。于是针对这个版本&#xff0c;做了互转的2个工具。 【SHP转TXT】 一、要实现的…