(一)RISC-V 指令集及寄存器介绍

1. RISC-V指令集介绍

RISC-V 念作 “risk-five”,代表着 Berkeley 所研发的第五代精简指令集。
该项目 2010 年始于加州大学伯克利(Berkeley)分校,希望选择一款 ISA用于科研和教学。经过前期多年的研究和选型,最终决定放弃使用现成的X86 和 ARM 等 ISA,而是自己从头研发一款:

  • List itemX86:太复杂,IP 问题
  • List itemARM:一样的复杂,而且在 2010 年之前还不支持 64 位,以及同样的 IP 问题。

2. 模块化ISA

指令集分为基本部分和扩展部分,基本部分的指令集所有硬件实现都必须有这一部分实现,而扩展部分则是可选的。扩展部分又分为标准扩展和非标准扩展。例如,乘除法、单双精度的浮点、原子操作就在标准扩展子集中。

由 1 个基本整数指令集 + 多个可选的扩展指令集组成。基础指令集是固定的,永远不会改变。
RISC ISA = 1个基本整数指令集 + 多个可选的扩展指令集。

I” 基本整数集,其中包含整数的基本计算、Load/Store和控制流,所有的硬件实现都必须包含这一部分。
 “M” 标准整数乘除法扩展集,增加了整数寄存器中的乘除法指令。
 “A” 标准操作原子扩展集,增加对储存器的原子读、写、修改和处理器间的同步。
 “F” 标准单精度浮点扩展集,增加了浮点寄存器、计算指令、L/S指令。
 “D” 标准双精度扩展集,扩展双精度浮点寄存器,双精度计算指令、L/S指令。
I+M+F+A+D 被缩写为 “G” ,共同组成通用的标量指令。
在后续ISA的版本迭代过程中,RV32G和RV64G总是保持不变。
在这里插入图片描述
RISC-V指令集架构和X86/ARM相比,一大优势就是支持模块化
RISC-V 指令集架构一改传统增量 ISA 模式,采用模块化 ISA 模式,它被定义为基本的整数指令集架构,以及几个标准的扩展子集,可以自定义指令扩展,如下表所示。
在这里插入图片描述
它的核心为RV32I的基础整数指令集,RV32I 是固定的,并保持永远不变,而其扩展是可选择进行实现的。这为编译器、汇编器和操作系统开发人员提供了稳定的研发目标。其扩展包括 M、F、D、A、G、C、V等,开发人员根据实际的应用程序,硬件设计可以选择是否实现这些扩展。这种模块化特性解决了以往指令集增量 ISA 模式和兼容性带来的弊端,并且使得 RISC-V 具有了小型化、低功耗的特点,这对于嵌入式应用至关重要的。

3. RV32I:32个通用寄存器+1个PC寄存器

3.1 通用寄存器的介绍

在这里插入图片描述
risc-v 有32个通用寄存器(简写 reg),标号为x0 - x31,每个通用寄存器都有各自的用途。
例如 x2是作为sp栈指针、a0 a1用来保存函数参数或返回值。x0寄存器被硬连线为0,就是个0值寄存器。
在这里插入图片描述
ABI名称相当于这些通用寄存器的别名,在RISC-V汇编当中,都使用ABI名称来代表这些寄存器。
对于有别名的寄存器,优先使用别名,更达意,更好记。

3.2 为啥通用寄存器只有32个?

寄存器的运算和读取速度是最快的,太少了显然不好,但事实证明,寄存器数目如果太多了会导致访问寄存器的速度下降,也会造成速度下降。32个寄存器是risc-v设计者、实践者的选择。

4. RISCV-CRS寄存器

用户级的CSR指令只能访问少数几个只读寄存器。
在这里插入图片描述

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

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

相关文章

【C++】string类的介绍与使用

🧑‍🎓个人主页:简 料 🏆所属专栏:C 🏆个人社区:越努力越幸运社区 🏆简 介:简料简料,简单有料~在校大学生一枚,专注C/C/GO的干货分…

通信原理板块——时分复用

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、基本概念 复用的目的是为了扩大…

Python批量备份交换机配置+自动巡检

自动巡检功能考虑到不同设备回显有所不同,需要大量正则匹配,暂时没时间搞这些,所以索性将命令回显全部显示,没做进一步的回显提取。 以下是程序运行示例:#自动备份配置: 备份完成后,将配置保存于…

Android加固为何重要?很多人不学

为什么要加固? APP加固是对APP代码逻辑的一种保护。原理是将应用文件进行某种形式的转换,包括不限于隐藏,混淆,加密等操作,进一步保护软件的利益不受损坏。总结主要有以下三方面预期效果: 1.防篡改&#x…

visionOS空间计算实战开发教程Day 5 纹理和材质

在​​Day 4​​​中我们使用了​​ImmersiveSpace​​并在其中添加了一个立方体,但对这个立方体我们只配置了长宽高,并没有做进一步的操作。 本文中我们会通过纹理和材质对这个立方体的六个面分别进行不同的绘制。首先我们将​​ImmersiveView​​分拆…

UE5的TimeLine的理解

一直以来,我对动画的理解一直是这样的: 所谓动画,就是可导致可视化内容变化的参数和时间的对应关系。 我不能说这个观点现在过时了,只能说自己狭隘了。因为UE的TimeLine的设计理念真让人竖大拇指。 当我第一次看到TimeLine节点的…

FreeSQL 基本使用

FreeSQL连接MySQL 安装 FeeSql相关库 FreeSql 基本库 FreeSql.DbContext FreeSql.Extensions.Linq linq语法扩展库 FreeSql.Provider.Mysql MySQL连接库 新建DbConent.cs public class Base{static string connstr "Data Source127.0.0.1;Port3306;User IDroot;Pa…

Ubuntu apt-get换源

一、参考资料 ubuntu16.04更换镜像源为阿里云镜像源 二、相关介绍 1. apt常用命令 sudo apt-get clean sudo apt-get update2. APT加速工具 轻量小巧的零配置 APT 加速工具:APT Proxy GitHub项目地址:apt-proxy 三、换源关键步骤 1. 更新阿里源 …

猫咪不长肉怎么回事?搬空家底的增肥效果好的猫罐头分享

秋冬到了,北方有供暖还好,咱南方的小猫咪全靠一身正气,不囤点脂肪天生怕冷的小猫咪要怎么过冬啊?咋吃都吃不胖的猫可愁怀铲屎官了,想想我新手养猫那些年,为了给我家猫养胖点我是做了不少努力,当…

地奥集团大健康产业再添解酒黑科技:“酒必妥”!

地奥集团成都药业股份有限公司隶属于地奥集团旗下的子公司,至今已经超过百年历史,主要围绕化学药品在耕耘奉献。尽管公司历来都低调,但是地奥这块牌子在质量把控,安全生产把控等药品领域还是响当当。历年来,公司持续对…

vue3-响应式函数

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-响应式函数 目录 ref 响应式函数 引言: ref 函数 reactive 函数 Reactive 与…

GNSS技术在交通运输领域的创新应用

全球导航卫星系统(GNSS)技术在交通运输领域发挥着越来越重要的作用,为汽车导航、航空、海运等交通模式提供了精准的定位和导航服务。本文将深入探讨GNSS技术在交通运输领域的应用,以及它对交通管理、安全性和效率的积极影响。 一、…

这些仪表板常用的数据分析模型,你都见过吗?

本文由葡萄城技术团队发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 ##前言 在数字化时代,数据已经成为了企业决策和管理的重要依据。而仪表板作为一种数据可视化工具&#x…

Linux inotify 文件监控

Linux 内核 2.6.13 以后,引入了 inotify 文件系统监控功能,通过 inotify 可以对敏感目录设置事件监听。这样的功能被也被包装成了一个文件监控神器 inotify-tools。 使用 inotify 进行文件监控的过程: 创建 inotify 实例,获取 i…

【代码随想录】算法训练计划28

回溯 1、491. 递增子序列 题目: 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以…

【Azure 架构师学习笔记】-Azure Storage Account(7)- 权限控制

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Storage Account】系列。 接上文 【Azure 架构师学习笔记】-Azure Storage Account(6)- File Layer 前言 存储帐户作为其中一个数据终端存储,对安全性的要求非常高,不管…

40、Flink 的Apache Kafka connector(kafka source的介绍及使用示例)-1

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

Linux常用命令——bmodinfo命令

在线Linux命令查询工具 bmodinfo 显示给定模块的详细信息 补充说明 bmodinfo命令用于显示给定模块的详细信息。 语法 bmodinfo(选项)(参数)选项 -a:显示模块作者; -d:显示模块的描述信息; -l:显示模块的许可信息…

Linux环境下安装部署单机RabbitMQ(离线)

摘要 本文档适用于在Linux系统下部署单体RabbitMQ,是在无网的情况下部署的。涉及的任何操作都是通过手动下载安装包然后上传到服务器上进行安装,因此也遇到一些问题,并在此文档中记录。 实际操作环境:Kylin V10,实际…

局域网协议:VLAN技术介绍

文章目录 VLAN概述VLAN的优点VLAN的原理VLAN的配置推荐阅读 VLAN概述 VLAN(Virtual Local Area Network虚拟局域网)是一种在物理网络基础上划分逻辑上独立的局域网的技术。它允许将网络设备按照逻辑上的需求而非物理位置进行分组,提供更好的…