RISC-V 扩展指令

发布于:2024-12-08 ⋅ 阅读:(244) ⋅ 点赞:(0)

11.1 “B” 标准扩展:位操作

B 扩展1提供位操作,包括位字段的插入、提取和测试;循环移位;

漏斗移位(将两个 n 位数据拼接后选择其中任意连续的 n 位作为结果。);

位 和字节的排列;计算前导零和尾随零;计算置 1 的位数。

GitHub - riscv/riscv-bitmanip: Working draft of the proposed RISC-V Bitmanipulation extension

RVB 位操作指令集扩展(一)_全国大学生集成电路创新创业大赛_RISC-V论坛讨论_RISC-V MCU中文社区 (riscv-mcu.com)

RISC-V B扩展介绍及实现_开源蜂鸟E203_RISC-V论坛讨论_RISC-V MCU中文社区 (riscv-mcu.com)

GitHub - riscv/riscv-b: "B" extension - that represents the collection of the Zba, Zbb, and Zbs extensions

20210625-RVWC-B扩展的设计与实现.pdf

对于位操作,B扩展增加了两个寄存器-位移结果寄存器(RZ)和位位掩码寄存器(RM)。前者可以将指定寄存器向某个方向移位并将结果存储在目标寄存器中;后者则用于为一个值生成一个位掩码。

11.2 “E” 标准扩展:嵌入式 (E 扩展已于 2023 年 1 月冻结)

为降低低端核心的开销,RV32E3减少了 16 个寄存器。正是考虑到 RV32E,保

存寄存器和临时寄存器均被拆分为 0-15 号和 16-31 号两部分(图 3.2)。

从嵌入式系统视角初次展望 RISC-V 虚拟化 - 泰晓科技 (tinylab.org)

A First Look at RISC-V Virtualization From an Embedded Systems Perspective | IEEE Journals & Magazine | IEEE Xplore

11.3 “H” 特权态架构扩展:支持虚拟机管理器(Hypervisor)

(H 扩展已于 2021 年 9 月冻结)

H 扩展向特权态架构添加超监管模式第二级页式地址翻译机制,以提升多个

操作系统同时在一台计算机上运行的效率。

Tue0942-riscv-hypervisor-waterman

RISC-V 虚拟化模式切换简析 - 泰晓科技 (tinylab.org)

RISC-V 架构 H 扩展中的 Trap 处理 - 泰晓科技 (tinylab.org)

11.4 “J” 标准扩展:动态翻译语言

包括 Java 和 Javascript 在内的很多主流语言通常基于动态翻译实现。若 ISA

额外为动态检查和垃圾回收提供支持,则可提升这些语言的运行效率。(J 表示即时

Just-In-Time)编译。)

RISC-V J-Extension 主要关注于 Java 字节码的硬件加速执行。该项目由 RISC-V 社区维护,旨在通过提供专门的指令来优化 Java 应用在 RISC-V 架构上的运行效率,减少软件层的开销,提高执行速度。这使得Java应用程序能够在嵌入式系统到服务器级平台上更高效地运行

动态翻译语言
动态翻译语言(Dynamically Translated Language)指的是一种在程序执行时将源代码逐步转换为机器码或中间代码的编程语言。它与静态编译语言(如 C/C++)不同,静态编译语言在程序执行前将源代码编译为机器码,而动态翻译语言的编译过程是在程序运行时进行的

动态翻译中的“动态”指的是翻译和执行的时间和方式,即编译发生在程序运行期间。这种翻译过程主要体现在以下几个环节:

  1. 解释执行:一些动态语言(如 Python、Ruby)使用解释器逐行翻译并执行代码,不将源代码完全编译成机器码,而是逐行解析和执行。这样可以在程序运行过程中随时处理代码的改变。
  2. 即时编译(JIT,Just-In-Time Compilation):某些动态语言(如 JavaScript、Java)在运行时使用即时编译器将热点代码(经常执行的代码片段)动态编译为机器码。JIT 编译器会在程序运行过程中监测哪些代码片段执行频繁,并将这些片段编译为机器码以提高执行效率。

动态翻译的特点使得这些语言可以支持更灵活的运行时特性,如动态类型、反射机制、运行时代码生成等。不过,动态翻译可能会带来性能上的开销,因为代码的编译和优化工作并没有在程序执行前完成,而是分散在运行时进行。

RISC-V J-Extension 开源项目指南-CSDN博客

Memory Tag与RISC-V J扩展 - 知乎 (zhihu.com)

11.5 “L” 标准扩展:十进制浮点

易于编程/编译/链接

L 扩展的设计目标是支持 IEEE 754-2019 标准所定义的十进制浮点算术运算。二

进制数的一个问题是无法表示一些常用的十进制小数,如 0.1。RV32L 的初衷是让计

算和输入输出具有相同的基数。 .

RISC-V 的 "L" 扩展主要通过以下方式解决了十进制数的精度丢失问题和一致性问题:

1. 十进制数精度丢失的解决

在二进制浮点表示中,某些常见的十进制小数无法被精确表示。例如,0.1 的二进制浮点表示是一个无限循环小数,而计算机只能存储有限位数的二进制数,这导致精度丢失。这种误差在进行四则运算时可能会累积,从而影响结果的准确性。

L 扩展如何避免精度丢失

  • 十进制浮点格式:L 扩展使用了 IEEE 754-2019 标准的十进制浮点格式(decimal floating-point),而不是传统的二进制浮点格式。这种十进制浮点格式使用十进制数作为基数(10 的幂次),因此可以精确表示十进制小数如 0.1、0.2 等。
  • 基数与数位限制:在十进制浮点格式中,小数位数的表示基于十进制数位,这允许浮点数精确地表示任意十进制数,避免了二进制浮点格式中出现的近似误差。具体来说,十进制浮点数使用类似科学计数法的表示形式,通过有限的十进制数位和指数来表示数值。
  • 硬件支持:L 扩展在硬件层面支持十进制浮点运算,这使得系统可以直接执行十进制运算,而无需将十进制数转换为二进制浮点格式,从而避免了由转换带来的精度误差。

2. 一致性问题的解决

一致性问题指的是在二进制和十进制数制之间进行转换时可能带来的误差。例如,如果数据是以十进制表示的金额或测量结果,但计算机内部使用二进制浮点表示,那么数据的存储和计算过程中可能会引入不必要的误差。

L 扩展如何确保一致性

  • 统一基数:L 扩展使用十进制浮点数表示和计算,这样输入数据、计算过程和输出数据都保持在十进制基数的框架下,减少了不同数制之间转换的需要。这种设计避免了因数制不匹配引起的误差累积,确保了输入和输出的一致性。
  • 精确输入输出:L 扩展允许数据以十进制形式输入、存储和输出,不需要经过二进制浮点数的转换。比如,0.1 这样的数在输入、存储和计算过程中始终以十进制浮点数表示,这样可以确保输出结果精确地匹配输入,从而实现高精度的数据一致性。
  • 与 IEEE 754-2019 标准兼容:L 扩展完全支持 IEEE 754-2019 标准,确保了十进制浮点运算在硬件和软件中的一致性。标准化的十进制浮点格式与运算规则使得跨平台的数据和计算结果在不同系统间保持一致。

通过这些措施,L 扩展能够有效解决十进制数精度丢失和一致性问题,使得基于 RISC-V 的系统在处理财务、科学和商业数据时更加精确和可靠。

11.6 “N” 标准扩展:用户态中断

N 扩展允许在用户态程序中发生中断和异常后,无需外部执行环境介入,即可将

控制权直接转移到用户态处理程序。用户态中断主要用于仅支持 M 模式和 U 模式的

安全嵌入式系统(见第 10 章),但也能借助它在类 Unix 操作系统中实现用户态的中

断和异常处理。 在 Unix 环境中使用 N 扩展时,仍可保留传统的信号处理机制,但

架构和实现分离

对于触发用户态事件的扩展功能,则可基于用户态中断实现。一些例子包括垃圾回收

屏障5、整数溢出、浮点自陷。

特权级与陷入 - Risc-V Extension N Implementation (gallium70.github.io)

11.7 “P” 标准扩展:紧缩 SIMD 指令

P 扩展进一步细分现有体系结构寄存器,以实现更小数据类型的数据级并行计

算。要复用现有的数据通路资源,紧缩(packed)SIMD 是一种合理的设计。但若能

投入大量资源来提升数据级并行度,第 8 章介绍的向量架构将是更好的选择,此时架

构师应使用 RVV 扩展。

RISC-V架构P扩展指令集的研究与实现(一) - 知乎 (zhihu.com)

GitHub - riscv/riscv-p-spec: RISC-V Packed SIMD Extension

11.8 “Q” 标准扩展:四倍精度浮点

Q 扩展6添加了符合 IEEE 754-2019 标准的 128 位四倍精度二进制浮点指令。扩

展后的浮点寄存器可存储一个单精度、双精度或四倍精度的浮点数。Q 扩展需要先支

持 RV64IFD。

RISC-V 指令集的模块化和寄存器结构 - 耐心的小黑 - 博客园 (cnblogs.com)


网站公告

今日签到

点亮在社区的每一天
去签到