RISCV - 2 “Zicsr“, CSR Instructions

news2024/11/25 23:40:05

RISCV - 2 “Zicsr“, CSR Instructions

  • 1 CSR Instructions
  • 2 CSR Access Ordering
  • 3 CSR指令集类型

CSR:Control and Status Register

RISCV - 1 RV32/64G指令集清单

RISC-V defines a separate address space of 4096 Control and Status registers associated with each hart. This chapter defines the full set of CSR instructions that operate on these CSRs.
RISC-V 定义了由 4096 个控制和状态寄存器组成的独立地址空间,这些寄存器与每个 Hart 相关联。本章定义了在这些 CSR 上运行的全套 CSR 指令。
Note:
While CSRs are primarily used by the privileged architecture, there are several uses in unprivileged code including for counters and timers, and for floating-point status.
虽然 CSR 主要由特权架构使用,但在非特权代码中也有一些用途,包括计数器和定时器以及浮点状态。
The counters and timers are no longer considered mandatory parts of the standard base ISAs
计数器和定时器不再被视为标准基本 ISA 的必备部分。

1 CSR Instructions

All CSR instructions atomically read-modify-write a single CSR, whose CSR specifier is encoded in the 12-bit csr field of the instruction held in bits 31-20. The immediate forms use a 5-bit zero-extended immediate encoded in the rs1 field.
所有 CSR 指令都以原子方式读取-修改-写入单个 CSR,其 CSR 指示符在指令的 12 位 csr 字段中编码,该字段位在 31-20 位。立即数形式使用 rs1 字段编码的 5 位零扩展立即数编码。
在这里插入图片描述
The CSRRW (Atomic Read/Write CSR) instruction atomically swaps values in the CSRs and integer registers. CSRRW reads the old value of the CSR, zero-extends the value to XLEN bits, then writes it to integer register rd. The initial value in rs1 is written to the CSR. If rd=x0, then the instruction shall not read the CSR and shall not cause any of the side effects that might occur on a CSR read.
CSRRW(原子读/写 CSR)指令原子交换 CSR 和整数寄存器Rd中的值。CSRRW 读取 CSR 的旧值,将其零扩展到 XLEN 位,然后写入整数寄存器 rd。rs1 中的初始值被写入 CSR。如果 rd=x0,则指令不会读取 CSR,也不会导致读取 CSR 时可能出现的任何副作用。
The CSRRS (Atomic Read and Set Bits in CSR) instruction reads the value of the CSR, zero-extends the value to XLEN bits, and writes it to integer register rd. The initial value in integer register rs1 is treated as a bit mask that specifies bit positions to be set in the CSR. Any bit that is high in rs1 will cause the corresponding bit to be set in the CSR, if that CSR bit is writable. Other bits in the CSR are not explicitly written.
CSRRS(原子读取并设置 CSR 中的位数)指令读取 CSR 的值,将其零扩展到 XLEN 位,并写入整数寄存器 rd。整数寄存器 rs1 中的初始值被视为位掩码,用于指定 CSR 中要设置的位位置。如果 CSR 位可写,rs1 中的任何高位都将导致 CSR 中的相应位被设置。CSR 中的其他位不会被明确写入。
The CSRRC (Atomic Read and Clear Bits in CSR) instruction reads the value of the CSR, zero-extends the value to XLEN bits, and writes it to integer register rd. The initial value in integer register rs1 is treated as a bit mask that specifies bit positions to be cleared in the CSR. Any bit that is high in rs1 will cause the corresponding bit to be cleared in the CSR, if that CSR bit is writable. Other bits in the CSR are not explicitly written.
CSRRC(原子读取并清除 CSR 中的位数)指令读取 CSR 的值,将其零扩展到 XLEN 位,并写入整数寄存器 rd。整数寄存器 rs1 中的初始值被视为位掩码,用于指定 CSR 中要清除的位位置。如果 CSR 位可写,rs1 中的任何高位都将导致 CSR 中相应位被清零。CSR 中的其他位不会被明确写入。
For both CSRRS and CSRRC, if rs1=x0, then the instruction will not write to the CSR at all, and so shall not cause any of the side effects that might otherwise occur on a CSR write, nor raise illegal instruction exceptions on accesses to read-only CSRs. Both CSRRS and CSRRC always read the addressed CSR and cause any read side effects regardless of rs1 and rd fields. Note that if rs1 specifies a register holding a zero value other than x0, the instruction will still attempt to write the unmodified value back to the CSR and will cause any attendant side effects. A CSRRW with rs1=x0 will attempt to write zero to the destination CSR.
对于 CSRRS 和 CSRRC,如果 rs1=x0,则指令根本不会写入 CSR,因此不会导致 CSR 写入时可能出现的任何副作用,也不会在访问只读 CSR 时引发非法指令异常。无论 rs1 和 rd 字段如何,CSRRS 和 CSRRC 始终会读取寻址的 CSR 并产生任何读取副作用。需要注意的是,如果 rs1 指定的寄存器除 x0 外的值为零,该指令仍将尝试将未修改的值写回 CSR,并会导致任何相应的副作用。rs1=x0 的 CSRRW 将尝试向目标 CSR 写入零值。
The CSRRWI, CSRRSI, and CSRRCI variants are similar to CSRRW, CSRRS, and CSRRC respectively, except they update the CSR using an XLEN-bit value obtained by zero-extending a 5-bit unsigned immediate (uimm[4:0]) field encoded in the rs1 field instead of a value from an integer register. For CSRRSI and CSRRCI, if the uimm[4:0] field is zero, then these instructions will not write to the CSR, and shall not cause any of the side effects that might otherwise occur on a CSR write, nor raise illegal instruction exceptions on accesses to read-only CSRs. For CSRRWI, if rd=x0, then the instruction shall not read the CSR and shall not cause any of the side effects that might occur on a CSR read. Both CSRRSI and CSRRCI will always read the CSR and cause any read side effects regardless of rd and rs1 fields.
CSRRWI、CSRRSI 和 CSRRCI 变体分别与 CSRRW、CSRRS 和 CSRRC 类似,但它们更新 CSR 时使用的是通过将 rs1 字段中编码的 5 位无符号立即值(uimm[4:0])字段置零而获得的 XLEN 位值,而不是整数寄存器中的值。对于 CSRRSI 和 CSRRCI,如果 uimm[4:0] 字段为零,则这些指令不会写入 CSR,也不会导致 CSR 写入时可能出现的任何副作用,也不会在访问只读 CSR 时引发非法指令异常。对于 CSRRWI,如果 rd=x0,则指令不会读取 CSR,也不会导致读取 CSR 时可能出现的任何副作用。CSRRSI 和 CSRRCI 将始终读取 CSR 并导致任何读取副作用,与 rd 和 rs1 字段无关。

Conditions determining whether a CSR instruction reads or writes the specified CSR:
决定 CSR 指令读取或写入指定 CSR 的条件
在这里插入图片描述
Table summarizes the behavior of the CSR instructions with respect to whether they read and/or write the CSR.
表中总结了 CSR 指令在读取和/或写入 CSR 时的行为。
For any event or consequence that occurs due to a CSR having a particular value, if a write to the CSR gives it that value, the resulting event or consequence is said to be an indirect effect of the write. Indirect effects of a CSR write are not considered by the RISC-V ISA to be side effects of that write.
对于因 CSR 具有特定值而产生的任何事件或后果,如果对 CSR 的写入使其具有该值,则所产生的事件或后果被称为写入的间接影响。RISC-V ISA 不会将 CSR 写入的间接影响视为写入的副作用。
Note:
An example of side effects for CSR accesses would be if reading from a specific CSR causes a light bulb to turn on, while writing an odd value to the same CSR causes the light to turn off. Assume writing an even value has no effect. In this case, both the read and write have side effects controlling whether the bulb is lit, as this condition is not determined solely from the CSR value. (Note that after writing an odd value to the CSR to turn off the light, then reading to turn the light on, writing again the same odd value causes the light to turn off again. Hence, on the last write, it is not a change in the CSR value that turns off the
light.)
访问 CSR 副作用的一个例子是,如果从特定 CSR 读取会导致灯泡打开,而向同一 CSR 写入奇数值会导致灯泡熄灭。假设写入偶数值没有影响。在这种情况下,读取和写入都会产生控制灯泡是否点亮的副作用,因为这一条件并不完全由 CSR 值决定。(请注意,向 CSR 写入奇数值关灯后,再读取奇数值开灯,再次写入相同的奇数值会导致灯再次熄灭。因此,在最后一次写入时,并不是 CSR 值的变化使灯熄灭。
On the other hand, if a bulb is rigged to light whenever the value of a particular CSR is odd, then turning the light on and off is not considered a side effect of writing to the CSR but merely an indirect effect of such writes.
另一方面,如果在某个 CSR 的值为奇数时安装一个灯泡,那么灯的亮与灭并不被认为是写入 CSR 的副作用,而只是写入 CSR 的间接作用。
More concretely, the RISC-V privileged architecture defined in Volume II specifies that certain combinations of CSR values cause a trap to occur. When an explicit write to a CSR creates the conditions that trigger the trap, the trap is not considered a side effect of the write but merely an indirect effect.
更具体地说,第二卷中定义的 RISC-V 特权架构规定,CSR 值的某些组合会导致陷阱发生。当对 CSR 的显式写入产生了触发陷阱的条件时,陷阱并不被视为写入的副作用,而只是一种间接影响。
Standard CSRs do not have any side effects on reads. Standard CSRs may have side effects on writes. Custom extensions might add CSRs for which accesses have side effects on either reads or writes.
标准 CSR 对读取没有任何副作用。标准 CSR 可能会对写入产生副作用。自定义扩展可能会添加对读取或写入都有副作用的 CSR。

Some CSRs, such as the instructions-retired counter, instret, may be modified as side effects of instruction execution. In these cases, if a CSR access instruction reads a CSR, it reads the value prior to the execution of the instruction. If a CSR access instruction writes such a CSR, the write is done instead of the increment. In particular, a value written to instret by one instruction will be the value read by the following instruction.
某些 CSR(如指令退役计数器 instret)可能会因指令执行的副作用而被修改。在这种情况下,如果 CSR 访问指令读取 CSR,则会在指令执行前读取该值。如果 CSR 存取指令写入这样的 CSR,则是写入而不是递增。特别是,一条指令写入 instret 的值将成为下一条指令读取的值。
The assembler pseudoinstruction to read a CSR, CSRR rd, csr, is encoded as CSRRS rd, csr, x0. The assembler pseudoinstruction to write a CSR, CSRW csr, rs1, is encoded as CSRRW x0, csr, rs1, while CSRWI csr, uimm, is encoded as CSRRWI x0, csr, uimm.
读取 CSR 的汇编伪指令 CSRR rd, csr 编码为 CSRRS rd, csr, x0。写入 CSR 的汇编伪指令 CSRW csr, rs1 编码为 CSRRW x0, csr, rs1,而 CSRWI csr, uimm 编码为 CSRRWI x0, csr, uimm。
Further assembler pseudoinstructions are defined to set and clear bits in the CSR when the old value is not required: CSRS/CSRC csr, rs1; CSRSI/CSRCI csr, uimm.
此外,还定义了一些汇编伪指令,用于在不需要旧值时设置和清除 CSR 中的位: CSRS/CSRC csr、rs1;CSRSI/CSRCI csr、uimm。

2 CSR Access Ordering

Each RISC-V hart normally observes its own CSR accesses, including its implicit CSR accesses, as performed in program order. In particular, unless specified otherwise, a CSR access is performed after the execution of any prior instructions in program order whose behavior modifies or is modified by the CSR state and before the execution of any subsequent instructions in program order whose behavior modifies or is modified by the CSR state. Furthermore, an explicit CSR read returns the CSR state before the execution of the instruction, while an explicit CSR write suppresses and overrides any implicit writes or modifications to the same CSR by the same instruction.
每个 RISC-V hart 通常按照程序顺序执行自己的 CSR 访问,包括隐式 CSR 访问。具体而言,除非另有规定,否则 CSR 访问是在执行程序顺序中任何其行为修改或被 CSR 状态修改的先前指令之后,以及执行程序顺序中任何其行为修改或被 CSR 状态修改的后续指令之前进行的。此外,显式 CSR 读取会在指令执行前返回 CSR 状态,而显式 CSR 写入会抑制和覆盖同一指令对同一 CSR 的任何隐式写入或修改。
Likewise, any side effects from an explicit CSR access are normally observed to occur synchronously in program order. Unless specified otherwise, the full consequences of any such side effects are observable by the very next instruction, and no consequences may be observed out-of-order by preceding instructions. (Note the distinction made earlier between side effects and indirect effects of CSR writes.)
同样,显式 CSR 访问产生的任何副作用通常都会按程序顺序同步发生。除非另有规定,否则任何此类副作用的全部后果都可以在下一条指令中观察到,而前面的指令则不能观察到任何非顺序后果。(注意前面对 CSR 写入的副作用和间接影响所做的区分)。
For the RVWMO memory consistency model (Chapter 17), CSR accesses are weakly ordered by default, so other harts or devices may observe CSR accesses in an order different from program order. In addition, CSR accesses are not ordered with respect to explicit memory accesses, unless a CSR access modifies the execution behavior of the instruction that performs the explicit memory access or unless a CSR access and an explicit memory access are ordered by either the syntactic dependencies defined by the memory model or the ordering requirements defined by the Memory-Ordering PMAs section in Volume II of this manual. To enforce ordering in all other cases, software should execute a FENCE instruction between the relevant accesses. For the purposes of the FENCE instruction, CSR read accesses are classified as device input (I), and CSR write accesses are classified as device output (O).
对于 RVWMO 内存一致性模型(第 17 章),默认情况下 CSR 访问是弱排序的,因此其他 Harts 或设备可能会观察到 CSR 访问的顺序与程序顺序不同。此外,除非 CSR 访问修改了执行显式内存访问的指令的执行行为,或者 CSR 访问和显式内存访问根据内存模型定义的语法依赖关系或本手册第二卷内存排序 PMA 部分定义的排序要求排序,否则 CSR 访问相对于显式内存访问不排序。为了在所有其他情况下执行排序,软件应在相关访问之间执行 FENCE 指令。就 FENCE 指令而言,CSR 读取访问被归类为设备输入 (I),CSR 写入访问被归类为设备输出 (O)。
Note:
Informally, the CSR space acts as a weakly ordered memory-mapped I/O region, as defined by the Memory-Ordering PMAs section in Volume II of this manual. As a result, the order of CSR accesses with respect to all other accesses is constrained by the same mechanisms that constrain the order of memory-mapped I/O accesses to such a region.
正如本手册第二卷 "内存排序 PMA "部分所定义的那样,CSR 空间是一个弱排序的内存映射 I/O 区域。因此,相对于所有其他访问,CSR 访问的顺序受制于限制内存映射 I/O 访问顺序的相同机制。
These CSR-ordering constraints are imposed to support ordering main memory and memory-mapped I/O accesses with respect to CSR accesses that are visible to, or affected by, devices or other harts. Examples include the time, cycle, and mcycle CSRs, in addition to CSRs that reflect pending interrupts, like mip and sip. Note that implicit reads of such CSRs (e.g., taking an interrupt because of a change in mip) are also ordered as device input.
实施这些 CSR 排序约束,是为了支持对主存储器和内存映射 I/O 访问进行排序,使其与设备或其他硬件可见或受其影响的 CSR 访问保持一致。例如时间、周期和 mcycle CSR,以及反映待处理中断的 CSR,如 mip 和 sip。需要注意的是,对此类 CSR 的隐式读取(例如,因 mip 发生变化而进行中断)也会被排序为设备输入。
Most CSRs (including, e.g., the fcsr) are not visible to other harts; their accesses can be freely reordered in the global memory order with respect to FENCE instructions without violating this specification.
大多数 CSR(包括 fcsr 等)对其他 harts 都是不可见的;它们的访问可以根据 FENCE 指令在全局内存中自由重新排序,而不会违反本规范。
The hardware platform may define that accesses to certain CSRs are strongly ordered, as defined by the Memory-Ordering PMAs section in Volume II of this manual. Accesses to strongly ordered CSRs have stronger ordering constraints with respect to accesses to both weakly ordered CSRs and accesses to memory-mapped I/O regions.
根据本手册第二卷 "内存排序 PMA "部分的定义,硬件平台可定义对某些 CSR 的访问为强排序。与访问弱排序 CSR 和访问内存映射 I/O 区域相比,访问强排序 CSR 具有更强的排序约束。

3 CSR指令集类型

在这里插入图片描述

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

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

相关文章

Java集合之Map

HashMap集合 HashMap的特点 HashMap的常用方法 ①.put(K key, V value) 将键&#xff08;key&#xff09;/值&#xff08;value&#xff09;映射存放到Map集合中 public class Test {public static void main(String[] args) {HashMap<String, Integer> map new Hash…

Python入门【生成器推导式创建元组、字典、字典元素添加、修改、删除、序列解包、字典核心底层原理、集合 】(六)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

HTML :深入了解超文本标记语言

文章目录 前言HTML 简介HTML 基本结构HTML 标记HTML 文本标记HTML 图像标记HTML 链接标记 HTML 表单HTML 表格HTML 列表HTML 媒体元素HTML 语义化 前言 欢迎来到本篇博客&#xff0c;我将带你深入了解 HTML&#xff08;超文本标记语言&#xff09;。作为前端开发的基础&#x…

论文工具——ChatGPT结合PlotNeuralNet快速出神经网络深度学习模型图

文章目录 引言正文PlotNeuralNet安装使用使用python进行编辑使用latex进行编辑 样例利用chatGPT使用chatGPT生成Latex代码利用chatGPT生成对应的python代码 总结引用 引言 介绍如何安装PlotNeuralNet工具&#xff0c;并结合chatGPT减少学习成本&#xff0c;快速出图。将按照软…

06-Vue基础之事件处理

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…

Cloudreve搭建云盘系统,并实现随时访问

文章目录 1、前言2、本地网站搭建1.环境使用2.支持组件选择3.网页安装4.测试和使用5.问题解决 3、本地网页发布1.cpolar云端设置2.cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#xff0c;一时间公…

LabelImg 标注工具的使用

目录 1 安装及使用1.1 安装1.2 使用 2 标注格式 1 安装及使用 1.1 安装 Win R输入cmd进入终端界面 LabelImg 安装命令&#xff1a; pip install labelimg没有配置国内 pip 源的&#xff0c;请看 ⇒ \Rightarrow ⇒ 临时办法&#xff1a;在上述命令末尾添加源&#xff0c…

详解C语言自定义类型(结构体,枚举,联合)

❤️ 作者简介 &#xff1a;RO-BERRY 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识&#xff0c;对纯音乐有独特的喜爱 &#x1f4d7; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;如果你也感兴趣的话欢迎关注博主&#xff0c;期待更新 自定义类型 1.结构体1.1 …

【GUI】使用PID控制器进行台式过程控制实验,以保持热敏电阻的温度(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码、操作说明 &#x1f4a5;1 概述 本实验是温度控制的反馈控制应用。特别是&#xff0c;本实验讲解&#xff1a; 手动和自动控制的区别 生成动态数据的 步进测试 拟合动态数…

【动态规划part05】| 1049. 最后一块石头的重量 II 、494. 目标和 、474.一和零

目录 &#x1f388;LeetCode 1049.最后一块石头的重量|| &#x1f388; LeetCode494. 目标和 &#x1f388;LeetCode 474.一和零 &#x1f388;LeetCode 1049.最后一块石头的重量|| 链接&#xff1a;1049.最后一块石头的重量 有一堆石头&#xff0c;用整数数组 stones 表示…

深入理解 PostgreSQL 的架构和内部工作原理

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

HTML渐变效果:线性渐变与径向渐变详解

简介 在HTML中,你可以使用CSS来创建渐变效果,给元素添加丰富的背景样式。本文将详细介绍HTML中的渐变效果,并提供示例代码帮助你理解和应用。 线性渐变(Linear Gradient) 线性渐变通过沿一条直线给元素应用颜色的渐变效果。你可以定义起始点和结束点之间的颜色过渡方式。…

西门子plc的通信联网不同网段通讯

你是否曾经遇到过需要将不同品牌的PLC数据进行交换的情况&#xff1f;今天我们要介绍的就是远创智控YC8000-PN的ModbusTCP客户机功能&#xff0c;它可以帮助你实现这一需求。 1, 远创智控YC8000-PN的lan1口连接西门子S7-1200的网口&#xff0c;FX5U自带以太网口与远创智控YC8…

JVM-Java虚拟机

JVM——Java虚拟机&#xff0c;是Java实现平台无关性的基石。 基本概念&#xff1a;JVM 是可运行 Java 代码的假想计算机 &#xff0c;包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收&#xff0c;堆 和 一个存储方法域。JVM 是运行在操作系统之上的&#xff0c;它与…

linux中cgroup的简单使用

文章目录 1 简介1.1 主要功能1.2 cgroups子系统 2 绑定进程到指定cpu核数3 限制进程cpu使用率3.1 示例13.2 示例2 4 限制内存使用量5 限制磁盘读取速度 1 简介 Linux CGroup全称Linux Control Group&#xff0c; 是Linux内核的一个功能&#xff0c;用来限制&#xff0c;控制与…

fastadmin 项目gitee管理

gitee创建一个仓库使用sourcetree等工具拉取代码使用phpstorm远程同步代码到本地设置忽略代码文件 注意&#xff1a;如果是直接把远程代码同步到本地&#xff0c;默认是你在 .gitignore中设置是无效的&#xff0c;代码一样会提交&#xff0c;需要先使用上面的截图去掉缓存&…

进程控制学习笔记

文章目录 进程退出孤儿进程僵尸进程进程回收waitpid()函数 进程退出 子进程的退出需要父进程对其资源的释放&#xff0c;子进程只能对用户区的数据进行释放&#xff0c;无法完成对内核区的释放。 可以获取到。 两个退出的区别&#xff1a; 系统调用不会刷新缓冲区&#xff…

【人工智能】神经网络、M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义、总代价

M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义 文章目录 M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义M-P 神经元模型激活函数(Activation function)神经网络结构举例训练神经网络学习网络参数代价定义均方误差交叉熵(Cross Entropy)…

html input 展示隐藏的密码

<!DOCTYPE html> <html> <meta http-equiv"Content-Type" content"text/html;charsetutf-8"/> <body><h2>登录表格</h2><form action"/action_page.php"><div class"container"><…

vue3-element-plus,控制表格多选的数量

1. 需求描述 控制表格的多选&#xff0c;最多只能选择5条数据&#xff0c;并且其他项禁用 2. 需求描述 <!-- selection-change 当选择项发生变化时会触发该事件--><template><el-tableref"multipleTableRef"v-loading"loading":data"…