RISC-V 指令集的模块化和寄存器结构
0 前言
RISC-V 指令集架构是加州大学伯克利分校研发的第五代精简指令集架构,先后经历了四代精简指令集的发展,旨在设计一个完全开放、免费的和性能强大的指令集架构。它和X86/ARM相比,一大优势就是支持模块化,下面我们就来介绍一下RISC-V指令集的模块化结构,顺便再介绍下其寄存器结构。
一、模块化结构
RISC-V 指令集架构一改传统增量 ISA 模式,采用模块化 ISA 模式,它被定义为基本的整数指令集架构,以及几个标准的扩展子集,可以自定义指令扩展,如下表所示。
它的核心为RV32I
的基础整数指令集,RV32I
是固定的,并保持永远不变,而其扩展是可选择进行实现的。这为编译器、汇编器和操作系统开发人员提供了稳定的研发目标。其扩展包括 M、F、D、A、G、C、V
等,开发人员根据实际的应用程序,硬件设计可以选择是否实现这些扩展。这种模块化特性解决了以往指令集增量 ISA 模式和兼容性带来的弊端,并且使得 RISC-V 具有了小型化、低功耗的特点,这对于嵌入式应用至关重要的。
RISC-V 指令集架构的标准扩展指令的具体介绍如下:
I 扩展
:整数扩展(I 扩展)表示 RISC-V 的基础整数指令集,是任何一个实现中都必须存在的模块。根据地址空间可分为RV32I、RV64I、RV128I
三类。RV32I 非常精简,只有 47 条指令,但它具有齐全的功能,可以形成编译器目标,满足现代操作系统和运行时的基本要求。它包括整数计算指令、控制转移指令、加载-存储指令以及系统调用等指令。M 扩展
:M 扩展即乘除扩展,是 RISC-V 整数乘除标准扩展指令集,包含了有符号和无符号的整数乘除法指令。F 扩展/D 扩展
:F 扩展和 D 扩展两者是分开的,可单独进行选择实现。F 表示单精度浮点标准扩展指令集,D表示双精度浮点标准扩展指令集。它们使用的是 32 个独立的浮点寄存器而不是基本整数寄存器,除了具有加载-存储和算术指令外,还包括一些加减乘除指令在内的分别进行融合计算的指令,让计算过程变得更快速、简洁和准确。另外为了保证数学库代码的编写,还必须包括符号注入指令以及分类指令等。 F 和 D 两个标准扩展没有提供浮点分支指令,其主要功能被浮点比较指令所替代,也就是说可以依据两个浮点数的比较结果信息将寄存器中的值设置为 0 或者 1,从而用于分支跳转。A 扩展
:A 扩展表示标准原子扩展,是 RISC-V 的原子操作指令集,为实现多个RISC-V 线程之间的进行同步操作提供了技术支持。RV32A 标准扩展指令集为两种不同的使用场景分别提供了加载保留/条件存储指令和获取和操作存储器指令两种原子性操作指令,其中加载保留和条件存储指令确保了原子的比较-交换操作。即比较 A寄存器的值和 B 寄存器的内存地址指向的值,如果两者相等,交换 C 寄存器中的值和内存中的值G 扩展
:通用扩展 G 是基本整数指令集和四个标准扩展指令集(即“IMAFD”)的总称。C 扩展
:C 扩展表示压缩扩展,是 RISC-V 的标准压缩指令集。每条 16 位压缩指 令一般情况必有一条标准的 32 位指令与之对应,并且仅仅对于汇编器和链接器是可见的。汇编器和链接器决定了是使用 16 位指令还是使用 32 指令,因此编译器和汇编语言开发人员可以完全忽略压缩指令及其格式。上述设计方案避免了在重新设计 ISA短指令集时,给处理器和编译器的设计增加负担的问题。Q 扩展
:Q 扩展是一个 128 位的四精度浮点指令集扩展。四精度浮点指令扩展的浮点寄存器可以用来存储一个单精度、双精度或者四精度的浮点数。四精度浮点扩展要求实现RV64IFD。V 扩展
:向量扩展是 RISC-V 向量指令集,与单指令多数据流(SIMD)指令的区别是,RV32V 采用了向量架构,实现了内部向量寄存器的宽度与指令集的分离,不会像 SIMD 那样加宽了寄存器就会同时扩展了指令集,解决了 SIMD 指令集每次增加宽度,所导致的上层软件适配问题。RISC-V 向量指令集包括向量计算指令、load-store指令、向量条件运算等指令。
除以上 RISC-V 标准指令集扩展外,RISC-V 还有多个标准指令集扩展,例如十进制浮点(L)、位操作(B)、封装的单指令多数据(P)等。目前这些标准扩展大多数仍在不断完善和设计中。
二、寄存器结构
RISC-V 指令集架构具有 32 位和 64 位的,其寄存器宽度也分别是 32 位和 64 位 的。RISC-V 的基本整数指令集中包含 32 个整数寄存器 x0~x31 以及一个程序计数器(pc)保存当前指令的地址。具体结构如下图所示,其中 x1~x31 表示整数通用寄存器,其功能是保存程序运行的中间结果,存储的是整数类型,寄存器 x0 代表常数0,可以使用 x0 实现一些指令功能。
另外在浮点指令集中,则需要 32 个独立的浮点寄存器 f0~f31 和一个浮点控制和状态寄存器 fcsr,结构如下图所示:
RISC-V 指令集的模块化和寄存器结构相关推荐
- RISC V (RV32+RV64) 架构 整体介绍
文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...
- 计组学习笔记2(RISC v版)
指令集解释 (规定:R[r]表示通用寄存器r的内容,M[addr]表示存储单元addr的内容,SEXT[imm]表示对imm进行符号扩展,ZEXT[imm]表示对imm进行零扩展) 整数运算类 -U型 ...
- 网络中的模块化和社区结构(Modularity and community structure in networks)
Machine learning and the physical sciences 摘要 Ⅰ.引言 Ⅱ.最佳模块化方法(The Method of Optimal Modularity) Ⅲ.将网络 ...
- X64汇编语言寄存器结构及其与X86架构编程区别
目录 1. 关于X64架构 2. X64架构的寄存器结构 2.1 通用目的寄存器 2.2 浮点数寄存器 2.3 指令指针寄存器 2.4 段寄存器 2.5 标识寄存器 2.6 控制寄存器 2.6. ...
- RISC 架构 指令集及寄存器对比 ARM32 ARM64 RV32 RV64
指令集 寄存器 ARM64与ARM32 aarch64的指令集是 A64A64移除了批量加载寄存器指令 LDM/STM, PUSH/POP, 使用STP/LDP 一对加载寄存器指令代替: A64没有提 ...
- 《深入理解计算机系统》读书笔记九:寄存器结构
- Z80 CPU的寄存器结构图示
- 安装Ubuntu RISC V toolchain失败(网速、git配置原因)
git获取大容量工程出错:RPC failed: curl GnuTLS recv error : Decryption has failed. error: RPC failed; curl 56 ...
- 计算机体系结构-体系结构基础与流水线原理
计算机体系结构:体系结构基础与流水线原理 计算机体系结构:量化设计与分析一书以RISC-V为例介绍计算机体系结构.介绍体系结构的基本知识和流水线原理.笔记内容为原书的第一章,附录A.B.C. 第一章 ...
最新文章
- 架构之各种参数对应表
- Spring 基于Java的Bean声明
- Error: Cannot find module '@babel/core'
- 多维DP UVA 11552 Fewest Flop
- 基于MQTT协议进行应用开发
- QNX Software Development Platform
- numpy中的方差、协方差、相关系数
- 互联网年终福利大盘点,告诉你过年的正确姿势!
- linux命令 bind,Linux bind命令
- 浅读vue-router源码,了解vue-router基本原理
- 朱嘉明:区块链将为再全球化提供基础结构和技术性制度(全文)
- 史上最全因果推断合集-uplift
- 数学分析-换底公式证明
- vue-cli Webpack之Loader原理及自定义Loader
- python蟒蛇画法
- 苹果手机如何分享wifi密码_wifi网速慢被蹭网?用手机一键修改wifi密码,不用求人...
- 基于python的量化投资(二) ---- 获取量化数据
- 华为机试真题 Java 实现【热点网站统计】
- bach cello
- Aegisub打轴学习笔记
热门文章
- EMM管理平台筑梦成真,轻松管理移动终端
- 中冠百年|过年怎样理财比较好
- SAP配置——工作中心
- 安卓国际化(多语言切换),支持小语种
- e4a浏览框本地HTML,E4A浏览框与js交互用法
- [原创]K8一句话密码爆破工具{秒破10万} 支持ASP/PHP/ASPX/JSP/CFM/DIY
- Doris 5 python prepare_datastack.py 报错 xml.etree.ElementTree.ParseError: mismatched tag: line 10
- word打字覆盖后面的字 教你word打字覆盖后面的字怎么办
- 判断2000年---2500年之间的闰年
- Win10家庭版使用指南——MathType