RISC-V笔记——基础

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之前。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常见八大排序算法

今天我们带来数据结构中常见的8大排序算法。 排序算法平均时间复杂度最好情况最坏情况空间复杂度稳定性冒泡排序O(n方)O(n方)O(n方)O(1)稳定插入排序O(n方)O(n方)O(n方)O(1)稳定选择排序O(n方)O(n方)O(n方)O(1)不稳定希尔排序O(n1.3方到1,5方)O(n)O(n方)O(1)不稳定堆排序O(n lo…

Opencv形态学的膨胀操作、开运算与闭运算、梯度运算、礼帽与黑帽操作

文章目录 一、膨胀操作二、开运算与闭运算三、梯度运算四、礼帽与黑帽操作 一、膨胀操作 膨胀操作也就是根据图片将边缘的一些细节给丰富,处理的程度取决于卷积核的大小还有膨胀次数。也就是腐蚀操作的相反操作(腐蚀操作参考我的上一篇文章 点击跳转&am…

音视频编辑码部分常识

音视频编辑码常识 基本概念 实时音视频通讯 音视频处理 网络传输。包括采集、编码、网络传输、解码、播放等环节 视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同…

C++初阶(二)--C++入门(引用篇)

目录 一、引用的基本概念与特性 1.定义与声明 2.特性 二、引用的进阶用法 1.函数参数传递: 2.引用作为函数返回值(重点) 引用作为返回值的优点 引用作为返回值的注意事项 代码示例 注意事项的进一步说明 三、传值和传引用效率比较 …

华三服务器R4900 G5在图形界面使用PMC阵列卡(P460-B4)创建RAID,并安装系统(中文教程)

环境以用户需求安装Centos7.9,服务器使用9块900G硬盘,创建RAID1和RAID6,留一块作为热备盘。 使用笔记本通过HDM管理口()登录 使用VGA()线连接显示器和使用usb线连接键盘鼠标,进行窗…

10月报名 | 海克斯康Adams二次开发培训

您好!感谢您长期以来对优飞迪科技与海克斯康的关注与支持。我们诚邀您参加10月31日-11月1日的海克斯康Adams二次开发培训,本次培训将通过讲解和实操结合的方式,帮助用户了解Adams二次开发技术,学习Adams命令语言,掌握如…

[自然语言处理]RNN

1 传统RNN模型与LSTM import torch import torch.nn as nntorch.manual_seed(6)# todo:基础RNN模型 def dem01():参数1:input_size 每个词的词向量维度(输入层神经元的个数)参数2:hidden_size 隐藏层神经元的个数参数3&#xff1a…

基于Python的博客系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

智能化企业新人培训:AI助理如何加速新员融入与成长

在当今这个快速变化的时代,企业新人的培训不再仅仅局限于传统的教室环境,而是越来越多地融入了先进的技术,特别是人工智能(AI)。AI助理,作为这一变革的先锋,正在以独特的方式重塑企业新人培训的…

废水处理(一)——MDPI特刊推荐

特刊征稿 01 期刊名称: Removing Challenging Pollutants from Wastewater: Effective Approaches 截止时间: 摘要提交截止日期:2024年11月30日 投稿截止日期:2025年5月31日 目标及范围: 该主题是分享去除有毒物…

TQRFSOC开发板47DR 100G光口ping测试

本例程实现TQRFSOC开发板使用100G光口与100G网卡进行ping测试。TQRFSOC开发板有两个100G光口,都将进行测试,所使用的100G网卡同样是我们生产的,有需要的可以配套进行购买。本例程提供两个启动文件,分别对应两个光口,通…

4D-fy: Text-to-4D Generation Using Hybrid Score Distillation Sampling技术路线

这篇文章分为四部分,首先从2021年的CLIP说起。 这篇论文的主要工作是提出了一种名为 CLIP(Contrastive Language-Image Pre-training) 的模型,它通过自然语言监督学习视觉模型,以实现视觉任务的零样本(zer…

「规模焦虑」如影随形,库迪咖啡想靠便捷店突围能行吗?

作者 | 辰纹 来源 | 洞见新研社 “我有一个广东的小兄弟,做了9年的奶茶,后来因为觉得咖啡是一个上升期的赛道,所以毅然决然拿了45万加盟了库迪咖啡,结果全亏损完了,相当于只买了一个配方。” 抖音博主茶饮圈大山哥分…

MyBatis XML映射文件

XML映射文件 XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)XML映射文件的namespace属性为Mapper接口全限定名一致XML映射文件中SQL语句的id与Mapper接口中的方法名一致,并保持返…

C语言_指针_进阶

引言:在前面的c语言_指针初阶上,我们了解了简单的指针类型以及使用,下面我们将进入更深层次的指针学习,对指针的理解会有一个极大的提升。从此以后,指针将不再是难点,而是学习底层语言的一把利器。 本章重点…

ubuntu 开放 8080 端口快捷命令

文章目录 查看防火墙状态开放 80 端口开放 8080 端口开放 22端口开启防火墙重启防火墙**使用 xhell登录**: 查看防火墙状态 sudo ufw status [sudo] password for crf: Status: inactivesudo ufw enable Firewall is active and enabled on system startup sudo…

Linux性能调优,还可以从这些方面入手

linux是目前最常用的操作系统,下面是一些常见的 Linux 系统调优技巧,在进行系统调优时,需要根据具体的系统负载和应用需求进行调整,并进行充分的测试和监控,以确保系统的稳定性和性能。同时,调优过程中要谨…

第二十一节 图像旋转

void QUickdemo::roate_demo(Mat& image) { Mat dst, M; int w image.cols; int h image.rows; M getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0);--M getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0);:使用getRotationMatrix…

Linux学习网络编程学习(TCP和UDP)

文章目录 网络编程主要函数介绍1、socket函数2、bind函数转换端口和IP形式的函数 3、listen函数4、accept函数网络模式(TCP&UDP)1、面向连接的TCP流模式2、UDP用户数据包模式 编写一个简单服务端编程5、connect函数编写一个简单客户端编程 超级客户端…

jmeter入门:脚本录制

1.设置代理。 网络连接-》代理-》手动设置代理. ip: 127.0.0.1, port:8888 2. add thread group 3. add HTTP(s) test script recorder, target controller chooses Test plan-> thread Group 4. click start. then open the browser …