【RISC-V】RISC-V寄存器

news2024/9/21 7:04:59

一、通用寄存器

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.coloradmin.cn/o/957614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金融风控数据分析-信用评分卡建模(附数据集下载地址)

本文引用自: 金融风控:信用评分卡建模流程 - 知乎 (zhihu.com) 在原文的基础上加上了一部分自己的理解,转载在CSDN上作为保留记录。 本文涉及到的数据集可直接从天池上面下载: Give Me Some Credit给我一些荣誉_数据集-阿里云…

数字化新零售平台系统提供商,门店商品信息智慧管理-亿发进销存

传统的批发零售业务模式正面临着市场需求变化的冲击。用户日益注重个性化、便捷性和体验感,新兴的新零售模式迅速崛起,改变了传统的零售格局。如何在保持传统业务的基础上,变革发展,成为了业界亟需解决的问题。 在这一背景下&…

Abaqus三维随机多面体插件—AbyssFish – Random Polyhedron Aggregate

插件介绍 AbyssFish – Random Polyhedron Aggregate 插件可在Abaqus软件内批量生成随机分布的三维多面体骨料模型。插件可指定骨料分布的区域、三种尺寸的粒径分布范围、多面体面数、各尺寸骨料的数量等信息,同时可控制骨料间的最小间距及插件的运行时间控制。 使…

Linux常用工具(pidstat stress cgroup)

目录 1.pidstat 2.stress 3.cgroup 4.使用cgroup进行内存限制 5.使用cgroup进行cpu使用率控制 1.pidstat 安装和使用(centos): yum install sysstats yum remove sysstats pidstat -u(默认),查看进程cpu使用情况: pidstat …

Spring MVC: 请求参数的获取

Spring MVC 前言通过 RequestParam 注解获取请求参数RequestParam用法 通过 ServletAPI 获取请求参数通过实体类对象获取请求参数附 前言 在 Spring MVC 介绍中,谈到前端控制器 DispatcherServlet 接收客户端请求,依据处理器映射 HandlerMapping 配置调…

解决 beego上传文件时 报http: no such file 错误

上传时文件上传失败: 关键报错的代码: //获得文件名filename := header.Filename//上传文件//注意,这里SaveToFile参数要跟传入的文件名的key一致,否则就会报http: no such fileerr = f.SaveToFile(filename, "./static/file/"+filename)if err != nil {logs.Error(e…

大数据课程K13——Spark的距离度量相似度度量

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的距离度量和相似度度量; ⚪ 掌握Spark的欧氏距离; ⚪ 掌握Spark的曼哈顿距离; ⚪ 掌握Spark的切比雪夫距离; ⚪ 掌握Spark的最小二乘法; 一、距离度量和相似度度量 1. …

linux系统(centos、Ubuntu、银河服务器)备份

制作u盘启动盘 下载usblive系统镜像 Get Kali | Kali Linux 下载u盘启动工具 balenaEtcher - Flash OS images to SD cards & USB drives 点击下载,等待下载完成 双击安装,等待安装完成 双击 启动 选择镜像 选择U盘 开始烧录 等地制作完成 进入…

PowerBuilder连接SQLITE3

PowerBuilder,一个古老的IDE,打算陆续发些相关的,也许还有人需要,内容可能涉及其他作者,但基本都是基于本人实践整理,如涉及归属,请联系. SQLite,轻型数据库,相对与PowerBuilder来说是个新事务,故发数来,以供参考. PB中使用OLE Microsoft OLE DB方式进行连接,如下 // Profile…

苹果启动2024年SRDP计划:邀请安全专家使用定制iPhone寻找漏洞

苹果公司昨天(8月30日)正式宣布开始接受2024 年iPhone安全研究设备计划的申请,iOS 安全研究人员可以在 10 月底之前申请安全研究设备 SRD。 SRD设备是专门向安全研究人员提供的iPhone14Pro,该设备具有专为安全研究而设计的特殊硬…

Message: ‘chromedriver‘ executable may have wrong permissions.

今天运行项目遇到如下代码 driverwebdriver.Chrome(chrome_driver, chrome_optionsoptions)上述代码运行报错如下: Message: chromedriver executable may have wrong permissions. Please see https://sites.google.com/a/chromium.org/chromedriver/home出错的原…

ROS2学习(一):Ubuntu 22.04 安装 ROS2(Iron Irwini)

文章目录 一、ROS2(Iron Irwini)介绍二、ROS2(Iron Irwini)安装1.设置编码2.使能代码库3.安装ROS2 Iron 三、ROS2测试四、ROS2卸载 一、ROS2(Iron Irwini)介绍 官方文档 Iron Irwini版本支持的平台如下: 二、ROS2(Iron Irwini)安装 1.设置编码 sudo apt update…

MyBatis——MyBatis插件原理

摘要 本博文主要介绍MyBatis插件机原理,帮助大家更好的理解和学习MyBatis。 一、插件机制概述 MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis允许使用插件来拦截的方法调用包括: Executor (update, que…

高级IO(select、poll、epoll)

在介绍本文之前,先提出一个问题 什么是IO? 等数据拷贝 1.等 - IO事件就绪(检测功能成分) 2.数据拷贝 高效的IO就是:单位时间,等的比重越小,IO的效率越高 五种IO模型 IO模型: 阻塞式…

仓库运行状况如何得知?数据挖掘是关键!

库存、订单、出入库记录、物流信息、货物状态等数据,是仓库管理的重要组成部分。 仓库数据的重要性 做好仓库数据管理对企业的重要性不言而喻。通过有效地管理数据,企业可以更好地了解市场需求和库存情况,快速响应市场变化,提高库…

iOS开发Swift-5-自动布局AutoLayout-摇骰子App

1.在iOS坐标系中,以向左、向下为正方向。图片以左上角为基准点。 2.打开之前的摇骰子App,对它的界面做一些适应所有iPhone机型的效果。 3.先对上方logo做一个y轴约束和一个宽高约束。 宽高约束: 水平居中: 对y轴进行约束。将虚线点…

【STM32单片机】STM32F103RCT6 串口1 串口2 串口3 串口4 串口5 初始化,标准库 ,支持printf

文章目录 单片机介绍引脚DMA—直接存储器访问串口 引脚串口1,初始化,发送与接收串口2,初始化,发送与接收串口3,初始化,发送与接收串口4,初始化,发送与接收串口5,初始化&a…

说说Flink on yarn的启动流程

分析&回答 核心流程 FlinkYarnSessionCli 启动的过程中首先会检查Yarn上有没有足够的资源去启动所需要的container,如果有,则上传一些flink的jar和配置文件到HDFS,这里主要是启动AM进程和TaskManager进程的相关依赖jar包和配置文件。接着…

软件架构设计(一) 软件架构的概念

在讲到软件架构的概念时,首先我们要了解到,架构是在做什么样的事情,它在整个软件开发周期中所属什么样的位置。 之前学习软件工程时,我们学到了开发模型,里面涉及到需求分析,概要设计,详细设计,编码,测试。但事实上,没有提到架构这个东西。 为什么这么重要的东西没…

造测试数据

对应sql: from openpyxl import Workbook from faker import Faker# 创建一个Workbook对象 workbook Workbook() # 获取默认的活动工作表 sheet workbook.active# 创建一个Faker对象 fake Faker()# 写入表头 header [Name, Address, Email] sheet.append(heade…