RISC-V特权架构 - CSR寄存器

2024-03-01 09:12
文章标签 架构 risc 寄存器 csr 特权

本文主要是介绍RISC-V特权架构 - CSR寄存器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RV32/64 特权架构 - CSR寄存器

  • 1 CSR地址空间
  • 2 CSR定义
    • 2.1 用户级
    • 2.2 监管级
    • 2.3 超级监管级
    • 2.4 机器级
  • 3 CSR访问
    • 3.1 CSRRW
    • 3.2 CSRRS
    • 3.3 CSRRC
    • 3.4 CSRRWI
    • 3.5 CSRRSI
    • 3.6 CSRRCI

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。

1 CSR地址空间

RISC-V架构中定义了一些控制和状态寄存器(control and status register),简称CSR,与32个物理寄存器不同(物理寄存器可以认为是5位地址寻址的),这些CSR是用12位地址进行寻址的,因此理论上最多可以有4096个CSR寄存器,并且地址空间是私有独立的,不同于全局地址空间。

CSR地址空间,定义如下:
在这里插入图片描述
CSR地址的高4bits,用于编码CSR在各个权级上的可读写性:

  • [11:10],表示该寄存器是可读写(00,01或10),还是只读(11)。
  • [9:8],表示允许访问该寄存器的最低权级。
    00:用户级,用户模式及以上权级(用户、监管、机器)可访问。
    01:监管级,监管模式及以上权级(监管、机器)可访问。
    10:超级监管级(扩展模式),仅在虚拟化时使用,用于访问虚拟化专用的CSR。
    11:机器级,仅机器模式可访问。
    从上图也可以看到,根据[9:8]的值,整个CSR地址空间被分为了4个部分。

除此之外,上图还指定了哪些CSR地址是标准用途,而哪些是自定义用途。
用于自定义的CSR地址,不会在未来标准扩展中被重新定义。

2 CSR定义

我们知道,CSR寄存器被划分为4个级别:用户级、监管级、超级监管级、机器级。
接下来,我们看看各个权级,具体定义了哪些寄存器。

2.1 用户级

用户级CSR,定义了两个部分的寄存器:

  • Unprivileged Floating-Point CSRs
  • Unprivileged Counter/Timers

在这里插入图片描述
以上Number列,给出了该寄存器的12位地址。
具体寄存器含义见规范手册。

2.2 监管级

监管级CSR,定义了五个部分的寄存器:

  • Supervisor Trap Setup
  • Supervisor Configuration
  • Supervisor Trap Handling
  • Supervisor Protection and Translation
  • Debug/Trace Registers

在这里插入图片描述
具体寄存器含义见规范手册。

2.3 超级监管级

超级监管级CSR,定义了七个部分的寄存器:

  • Hypervisor Trap Setup
  • Hypervisor Trap Handling
  • Hypervisor Configuration
  • Hypervisor Protection and Translation
  • Debug/Trace Registers
  • Hypervisor Counter/Timer Virtualization Registers
  • Virtual Supervisor Registers

在这里插入图片描述
具体寄存器含义见规范手册。

2.4 机器级

机器级CSR,定义了九个部分的寄存器:

  • Machine Information Registers
  • Machine Trap Setup
  • Machine Trap Handling
  • Machine Configuration
  • Machine Memory Protection
  • Machine Counter/Timers
  • Machine Counter Setup
  • Debug/Trace Registers (shared with Debug Mode)
  • Debug Mode Registers

在这里插入图片描述
在这里插入图片描述
具体寄存器含义见规范手册。

3 CSR访问

针对CSR寄存器的读写,有相应的特殊指令,这些特殊指令都被定义在RV32I中,如下所示:
在这里插入图片描述
真正的指令只有CSRRW、CSRRS、CSRRC、CSRRWI、CSRRSI、CSRRCI这6条,其他资料中的CSR指令,均为伪指令。

CSR指令机器码中共有12位(第20-31位)用来指示,被“读改写”的是哪一个CSR寄存器,这里通常填写的就是前面讲过的CSR地址,比如:mtvec寄存器那就是0x305。

注意事项:

  • 试图访问一个不存在的CSR将造成一个非法指令异常(illegal instruction exception);
  • 试图在不当的权级下访问CSR,或者尝试写入一个只读寄存器也都将造成非法指令异常;
  • 可读写寄存器中也可能包含一些只读位,此时忽略对只读位的写入。

3.1 CSRRW

在这里插入图片描述
指令形式:csrrw rd, csr, rs1
指令功能:CSR寄存器读后写。记csr值为t,将rs1写入csr,再将t写入rd。

t = csr
csr = rs1
rd = t

例如:csrrw t0, mstatus, t0
将 mstatus 的值与 t0 的值交换。

3.2 CSRRS

在这里插入图片描述
指令形式:csrrs rd, csr, rs1
指令功能:CSR寄存器读后置位。记csr值为t,将t和rs1的按位或结果写入csr,再将t 写入rd。

t = csr
csr = t | rs1 
rd = t

3.3 CSRRC

在这里插入图片描述
指令形式:csrrc rd, csr, rs1
指令功能:CSR寄存器读后清位。记csr值为t,将rs1的反码和t按位与,结果写入csr,再将t写入rd。

t = csr
csr = t & ∼rs1
rd = t

3.4 CSRRWI

在这里插入图片描述
指令形式:csrrwi rd, csr, zimm[4:0]
指令功能:CSR寄存器读后写立即数。将csr 的值复制到rd 中,再将5 位立即数zimm 的零扩展结果写入csr。

rd = csr
csr = zimm

3.5 CSRRSI

在这里插入图片描述
指令形式:csrrsi rd, csr, zimm[4:0]
指令功能:CSR寄存器读后置位立即数。记csr 的值为t,将5 位立即数zimm 零扩展后,和t 按位或,结果写入csr,再将t 写入rd(csr 中的第5 及更高的位不变)。

t = csr
csr = t | zimm
rd = t

3.6 CSRRCI

在这里插入图片描述
指令形式:csrrci rd, csr, zimm[4:0]
指令功能:CSR寄存器读后清位立即数。记csr 的值为t,将5 位立即数zimm 零扩展后的反码和t 按位与,结果写入csr,再将t 写入rd(csr 中的第5 及更高的位不变)。

t = csr
csr = t & ∼zimm 
rd = t

此外,需要注意:

  • 若目的通用寄存器为x0,则不会执行读取操作;
  • 若源通用寄存器为x0或立即数0,也不会进行写入CSR操作。

基于以上6条指令和x0这样的特性,衍生出若干CSR伪指令,比如:csrr、csrc、csrci、csrs、csrw等。


参考文档:

  • 《riscv-spec-20191213》
  • 《riscv-privileged-20211203》

这篇关于RISC-V特权架构 - CSR寄存器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761939

相关文章

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

BD错误集锦5——java.nio.file.FileSystemException 客户端没有所需的特权

问题:在运行storm本地模式程序时,java.nio.file.FileSystemException  客户端没有所需的特权   解决方式:以管理员身份运行IDEA即可。

响应式架构

介绍 响应式架构(Reactive Architecture)是一种面向服务和事件的系统设计方法,旨在提高系统的可扩展性、弹性和容错能力。它适用于构建分布式系统,特别是在云环境和微服务架构中。响应式架构的核心理念是通过事件驱动和数据流来实现各个组件之间的解耦,从而提高整个系统的响应能力和可靠性。 响应式架构的主要特点包括: 响应性:系统能够快速响应外部事件和内部变化,确保在各种负载和故障情

Modbus初学者教程,第三章:modbus寄存器说明

第三章:modbus寄存器说明 寄存器种类 Modbus协议中一个重要的概念是寄存器,所有的数据均存放于寄存器中。Modbus寄存器是指一块内存区域。Modbus寄存器根据存放的数据类型以及各自读写特性,将寄存器分为4个部分,这4个部分可以连续也可以不连续,由开发者决定。寄存器的意义如下表所示。 Modbus协议定义了设备间的数据传输方式,包括数据格式和通信规则。Modbus寄存器是协议中用

大型网站架构演化(六)——使用反向代理和CDN加速网站响应

随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大。有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开。为了提供更好的用户体验,留住用户,网站需要加速网站访问速度。      主要手段:使用CDN和反向代理。如图。     使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速

大型网站架构演化(五)——数据库读写分离

网站在使用缓存后,使绝大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过大而成为网站的瓶颈。      目前豆粉的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站利用数据库的这一功能,

大型网站架构演化(四)——使用应用服务器集群改善网站的并发能力

使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要企图去更换更强大的服务器,对大型服务器而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。 对网站架构而言,只要能通过增加一台服务器的方式改善负载压力,就可以以同样的方式持续增加服务器不断改善系统性能,从而实现系统

大型网站架构演化(二)——应用服务和数据服务分离

随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足。这时就需要将应用和数据分离。应用和数据分离后整个网站使用三台服务器:应用服务器、文件服务器和数据库服务器,如图。              这三台服务器对硬件资源的要求各不相同: 应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU;

大型网站架构演化(一)——初始阶段的网站架构

大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得很棘手。大型网站架构主要是解决这类问题。         大型网站都是从小型网站发展而来,网站架构也是一样,是从小型网站架构逐步演化而来。小型网站最开始时没有太多人访问,只需要一台服务器就绰绰有余,这时的网站架构如图所示。

大型网站架构演化(总)

如果把上世纪90年代初CERN正式发布WEB标准和第一个WEB服务的出现当做互联网站的开始,那么互联网站的发展只经历了短短20多年的时间。在20多年的时间里,互联网的世界发生了巨大变化,今天,全球有近一半的人口使用互联网,人们的生活因为互联网而产生了巨大变化。从信息检索到即时通信,从电子购物到文化娱乐,互联网渗透到生活的每个角落,而且这种趋势还在加速。因为互联网,我们的世界正变得越来越小