RISC-V笔记——基础

news2024/11/18 22:30:40

1. 前言

RISC-V旨在支持广泛的定制和专业化。RISC-V的ISA是由一个基本整型ISA和其它对基本ISA的可选扩展组成。每个整型ISA可以使用一个或多个可选的ISA扩展进行扩展。

基本整型ISA精选了最小的一组指令,这些指令足以为编译器、汇编器、链接器和操作系统提供足够的功能,它提供了一组便利的ISA和软件工具链骨架,可以围绕它构建更多定制的处理器ISA。基本整型ISA与早期RISC处理器非常类似,除了没有分支延迟槽(branch delay slot)和可选的变长指令编码(Variable-length instruction encoding)。

2. RISC-V基本整型ISA

虽然RISC-V ISA说起来方便,但RISC-V实际上是一个ISA集合,目前确定的有四个基本ISA。每个基本整型ISA的特征是整型寄存器的宽度、相应的地址空间的大小以及整型寄存器的数量。RV32I和RV64I是两个主要的基本整型ISA变体,分别提供32-bit和64-bit地址空间,用术语XLEN来表示以bit为单位的整型寄存器的宽度,它的值为32或64。RV32E和RV64E分别是RV32I和RV64I基本ISA的子集变体,它们用于支持小型微控制器,并且具有一半数目的整型寄存器。另外还有一个未确定的基本ISA是RV128I(XLEN=128)。

RISC-V之所以分成4个基本整型ISA,而不是做成一个统一的ISA。主要的优势是,每个基本ISA都可以根据自己的需要进行优化,而不需要支持其它基本ISA所需的所有操作。例如,RV64I可以省略只用于处理RV32I中较窄的寄存器的指令和CSR。RV32I可以使用只保留给更宽地址空间变体所需的指令的编码空间。主要缺点是,它使一个基本ISA在另一个基本ISA平台上模拟所需的硬件复杂化,例如,在RV64I上模拟RV32I。

3. RISC-V ISA的可选扩展

任何RISC-V处理器实现都必须支持基本整型ISA (RV32I、RV32E、RV64I、RV64E或RV128I)。此外,一个实现可以支持一个或多个扩展。RISC-V ISA中,标记为“Ratified”的模块,表示此时已被批准;标记为“Frozen”的模块,表示在被批准之前,预计也不会发生重大变化;标记为“Draft”的模块,表示在被批准之前,预计会发生变化。

扩展(extension)可以被分类为标准(standard)、定制(custom)和不符合(non-conforming)。为此,我们将每个RISC-V ISA编码空间(以及相关的编码空间,如CSR)划分为三个互不关联的类别:标准(standard)、保留(reserved)和定制(custom)。

  • 标准扩展和编码是由RISC-V国际组织定义的。任何扩展不是由RISC-V国际组织定义的都算是非标准的。每个基本ISA及其标准扩展仅使用标准编码,并且在使用这些编码时不得相互冲突。
  • 保留编码目前没有定义,但为将来的标准扩展保留,一旦被使用,它们就称为标准编码。
  • 定制编码永远不会用于标准扩展,而只能用于特定于供应商的非标准扩展。非标准扩展要么是只使用定制编码的定制扩展,要么是使用任何标准或保留编码的不符合扩展。

指令集扩展通常是共享的,但可能根据基本ISA提供略有不同的功能。

上述扩展可以进一步分为两大类:标准(standard)和非标准(non-standard,包括定制和不符合)。

  • 标准扩展通常是有用的,并且不与任何其他标准扩展相冲突。目前,RISC-V手册中描述的“MAFDQLCBTPV”扩展要么是完成的,要么是计划中的标准扩展。
  • 非标准扩展可能是高度专门化的,并且可能与其他标准或非标准扩展相冲突。预计随着时间的推移会开发出各种各样的非标准扩展,其中一些最终会被提升为标准扩展。

4. ISA命名规范

RISC-V ISA旨在支持各种指令集扩展的各种实现,有组织的命名方案简化了软件工具和文档,RISC-V ISA扩展命名方案可以简洁地描述硬件实现中的ISA。ISA命名字符串不区分大小写。

RISC-V ISA命名组成为:

基本整型ISA名 + 标准扩展名 + 非标准扩展名

4.1 基本整型ISA

RISC-V ISA字符串以RV32I、RV32E、RV64I、RV64E或RV128I开头,表示支持的基本整型ISA的地址空间大小(以bit为单位)。

4.2 标准扩展名

标准ISA扩展由一个单个字母组成的名称。例如:“M”表示整型乘法和除法,“A”表示原子访存指令,“F”表示单精度浮点指令,“D”表示双精度浮点指令。任何RISC-V指令集变体都可以通过将基本整型前缀与包含的扩展名连接起来简洁描述。例如:RV64IMAFD。

一些ISA扩展依赖于其他扩展的存在,例如,“D”依赖于“F”,“F”依赖于“Zicsr”。这些依赖关系可能隐含在ISA名称中。例如,RV32IF等价于RV32IFZicsr, RV32ID等价于RV32IFD和RV32IFDZicsr。

指令集可能随着时间的推移而扩展或改变,需要在扩展名后面加上扩展版本号。版本号分为主版本号和次版本号,用“p”分隔。如果次要版本为“0”,则可以从版本字符串中省略“p0”。主版本号的更改意味着向后兼容性的丧失,而仅小版本号的更改必须向后兼容。例如,“RV64I1p0M1p0A1p0F1p0D1p0”和“RV64I1M1A1F1D1”的含义是一样的。

为了提高可读性并消除歧义,引入下划线“_”可用于分隔ISA扩展,例如:“RV32I2_M2_A2”。

4.3 其他标准扩展名

标准扩展也可以使用一个“Z”来命名,后面跟着一个字母名称和一个可选的版本号。例如,“Zifencei”命名了instruction-fetch fence扩展,且“Zifencei2”与“Zifencei2p0”名称版本相同。

“Z”后面的第一个字母通常表示最密切相关的字母扩展类别(类别有IMAFDQCVH)。例如,对于用于附加浮点指令的“Zfa”扩展,字母“f”表示该扩展与“f”标准扩展相关。如果命名了多个“Z”扩展名,它们应该首先按类别排序,然后按类别中的字母顺序排序——例如,“Zicsr_Zifencei_Zam”。

所有多字母扩展名,包括以“Z”为前缀的扩展名,必须用下划线与其他多字母扩展名分开,例如“RV32IMACZicsr_Zifencei”。

4.4 非标准扩展名

非标准扩展使用单个“X”命名,后跟字母名称和可选的版本号。例如:“Xhwacha”命名了Hwacha vector-fetch ISA扩展;“Xhwacha2”与“Xhwacha2p0”名称2.0版本相同。

非标准扩展必须列在所有标准扩展之后,并且与其它多字母扩展一样,必须用下划线与其他多字母扩展分开。例如:带有非标准扩展名Argle和Bargle的ISA可以命名为“RV64IZifencei_Xargle_Xbargle”。

如果列出了多个非标准扩展,则应按字母顺序排列。

下表列出了一部分标准的扩展名,表还定义了扩展名必须在ISA名称字符串中出现的规范顺序,表中越往上出现在ISA名称字符串中的位置需要越靠前,例如,RV32IMACV是合法的,而RV32IMAVC是非法的,因此C必须在V之前。

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

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

相关文章

iPhone相册怎么删除相同照片

我们都太喜爱用iPhone拍照了,我们的iPhone相册就像是一个永远不想清理的衣柜,堆满了各种美好瞬间和意外的重复照片。面对成百上千的照片,有时候我们不禁想:这些相同的照片到底是怎么混进来的?今天,就让我来…

SpringBoot集成RocketMQ实现六种消息

1. 简介 RocketMQ 支持多种消息类型以满足不同的业务需求 普通消息(Standard Message): 这是最常用的消息类型,适用于大多数场景。 可以设置延迟级别(Delay Levels),但不支持消息轨迹。 顺序消…

C/C++程序员为什么要了解汇编?了解汇编有哪些好处?如何学习汇编?

目录 1、概述 2、从汇编的角度去理解问题的若干实例说明 2.1、使用空指针去访问类的数据成员或调用类的虚函数为什么会引发崩溃? 2.2、从汇编代码的角度去理解多线程的执行细节,去理解多线程在访问共享资源时为什么要加锁 2.3、使用Windbg静态分析d…

【Matlab】Matlab 导入数据.csv或者.xlsx文件,然后使用这些数据来绘制图表

Matlab 导入数据.csv或者.xlsx文件,然后使用这些数据来绘制图表 初始数据 filename C:\Users\jia\Desktop\yadian\data\1Hz 2024_09_12 17_10_06.csv; 代码: clc;clear close all; % 读取Excel文件 filename C:\Users\jia\Desktop\yadian\data\1Hz …

一篇文章让你学懂python入门

1.编写程序输入三个整数,按升序输出 思路1:使用if-else结构进行大小比较,将三个数进行从小到大的排序 num1 int(input("请输入第一个整数:")) num2 int(input("请输入第二个整数:")) num3 int(input(&qu…

华为OD机试 - 采样过滤(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

MySQL数据的增删改查

CRUD CRUD指的是创建(Create),读取(Retrieve),更新(Update)和删除(Delete),它是数据库或者持久层在软件系统中执行的基本功能,构成了大多数应用程序和服务器…

图神经网络之异构图转同构图

heterogeneous graph转homogeneous 异构图创建教程dgl.to_homogeneous语法格式例子 异构图创建教程 对于异构图创建,可以看异构图创建教程 dgl.to_homogeneous语法格式 dgl.to_homogeneous(G, ndataNone, edataNone, store_typeTrue, return_countFalse)G&#x…

K8s简介及环境搭建

一、Kubernetes简介 kubernetes 的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能: 自我修复:一旦某一个容器崩溃&a…

使用HashiCorp Nomad Cluster App管理高可用集群

容器化和Kubernetes如今已成为创建可扩展云原生应用程序的基本要素。但并非每个应用程序工作负载都需要容器或Kubernetes资源。HashiCorp Nomad是一个轻量级的工作负载调度程序,提供了与Kubernetes相似的优势,但不仅可以管理容器,还能管理其他…

SSL证书是否可以给多个域名使用?

在当今数字化的网络环境中,SSL证书在保障网站安全、保护用户数据传输方面发挥着至关重要的作用。那么,SSL 证书是否可以给多个域名使用呢?这是一个在网站开发、运营和安全管理领域备受关注的问题。 SSL 证书能够给多个域名使用吗&#xff1f…

指针函数C++

指针函数概念 指针函数在C中是一种特殊类型的函数。从本质上讲,它是一个函数,不过其返回值是一个指针类型的数据。例如,像int* plusfunction(int a, int b);这样的函数声明,plusfunction就是一个指针函数,它接受两个i…

Jvisualvm介绍;使用Jvisualvm:运行jvisualvm.exe;安装gc插件;查看gc

一,Jvisualvm介绍 jvisualvm是用来查看硬件使用情况的工具,多数会用它来看内存的使用情况 VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe)&#xff0c…

leetcode 10.9 94.二叉树的中序遍历

94. 二叉树的中序遍历 已解答 简单 相关标签 相关企业 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出&#xff1a…

LabelImag标注工具环境配置

LabelImag标注工具环境配置 Anaconda的安装和使用 Anaconda是一个集成了Python解释器、conda包管理器和众多科学计算、数据分析、机器学习等常用库的发行版。它允许用户轻松地管理Python环境和包,无需手动解决依赖问题。Anaconda特别适用于数据科学、机器学习、人…

Mac 下编译 libaom 源码教程

AV1 AV1是一种开放、免版税的视频编码格式,由开放媒体联盟(AOMedia)开发,旨在提供高压缩效率和优秀的视频质量。AV1支持多种分辨率,包括SD、HD、4K和8K,并适用于视频点播(VOD)、直播…

Python酷库之旅-第三方库Pandas(139)

目录 一、用法精讲 626、pandas.plotting.scatter_matrix方法 626-1、语法 626-2、参数 626-3、功能 626-4、返回值 626-5、说明 626-6、用法 626-6-1、数据准备 626-6-2、代码示例 626-6-3、结果输出 627、pandas.plotting.table方法 627-1、语法 627-2、参数 …

从0开始linux(11)——进程(3)进程的切换与调度

欢迎来到博主的专栏:从0开始linux 博主ID:代码小豪 文章目录 进程优先级进程的切换linux的调度算法 进程优先级 进程的优先级决定了进程获得CPU资源分配的顺序,在进程(0)这篇文章中博主就讲过并发和并行两个概念。即对…

ai论文写作软件哪个好?分享5款ai论文题目生成器

在当前的学术研究和写作领域,AI论文写作软件已经成为提高效率和质量的重要工具。根据多个来源的评测和推荐,以下是五款值得推荐的AI论文写作软件,其中特别推荐千笔-AIPassPaper。 1. 千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和…

超级详细 安装 Python 最佳实践文档

第一步,下载Python 打开Python官网:Welcome to Python.org 可以根据自己的需要下载相应的版本 第二步,安装Python 右键.exe文件->选择打开 安装 勾选 Install for all users选项 Browse为选择安装路径,可以自定安装路径 D盘…