第二章 RISC-V 指令集架构

news2025/1/11 0:20:38

 前言


  • 提醒:全文10千字,预计阅读时长15分钟;
  • 读者:对 RISC-V 架构感兴趣的小伙伴;
  • 目的:读者利用15~30 分钟对本文沉浸式阅读理解,能够掌握 RISC-V 架构 80% 的要点;
  • 关键词 :RISC-V架构、指令集 ISA、总线、调试、虚拟化、M 模式、S 模式、 U 模式;
  • 相关推荐:如果你对结构、架构、系统等概念感兴趣,建议阅读架构与系统;
  • 相关推荐:如果你对 RISC-V 组织感兴趣,建议阅读RISC-V International RISC-V China

摘要


本文主要探讨了 RISC-V 架构的底层逻辑,介绍了RISC-V 架构的顶层设计;以处理器核心架构为基础,以系统架构为核心,以A系列和M系列架构为典型,对关键系统组件进行的通俗易懂的描述;本文提到的 RISC-V 架构不包含 GPU、NPU 架构;

一、概念


1.1 计算机体系结构

1.1.1 冯诺依曼架构

  • ​冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。
  • 数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。​

1.1.2 哈佛架构

  • 哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。 简介 与两个存储器相对应的是系统的4条总线:程序和数据的数据总线与地址总线。

1.2 指令集架构 ISA

ISA是计算机硬件与系统软件之间的接口,指机器语言程序员或操作系统、编译器、解释器设计人员所看到的计算机功能特性和概念性结构,ISA 是计算机体系结构中非常重要的部分,通常是一套规范。

ISA 规定了数据类型寄存器、字节次序、指令格式指令集寻址方式、协处理器/理指令集扩展、异常处理方式

1.2.1 复杂架构指令集 CISC

复杂指令由微指令组成。

  • Intel :x86(IA32)、x86-64(Intel 64,兼容 IA32 的64位ISA)、IA64 不兼容IA32,安腾系列(x86,EM64T,MMX,SSE,SSE2,SSE3,SSSE3 (Super SSE3),SSE4A,SSE4.1,SSE4.2,AVX,AVX2,AVX-512,VMX
  • AMD:AMD64 ISA,第一个兼容IA32的64位 ISA

1.2.1 精简指令集 RISC

  • Arm ISA、RISC-V ISA、LoongArch ISA

1.3 微架构

ISA是一套规范,微架构是ISA的具体实现

  • x86-64 -> Intel Alder lake(golden cove & gracement)、AMD Zen 5
  • Arm -> Armv8-M33Armv8-A710
  • RISC-V ->芯来 N308、SiFive E76-MC、平头哥玄铁
  • LongArch -> GS464E 

1.4 片上系统 SoC

Soc实现计算机体系结构的实现。

  • Intel 12代 i7
  • ST stm32、TI TDA4
  • 芯昇 CM32M43xR
  • 玄铁C908

二、RISC-V 指令集架构


2.1 简介

RISC-V 架构:指的是第五代精简指令集架构,是面向下一代处理器的体系结构。因为没有向前兼容的历史包袱,所以 RISC-V 架构相比 Arm、 x86 等其他架构,可以从零开始设计,简单便成了 RISC-V 架构的设计哲学。

告别过去:曾经死磕 x86、Arm、LoongArch 指令集未果的伙计们,不要自责,看了 RISC-V 的模块化指令集架构,你就明白了到底是谁的错。

方法论:学习 RISC-V 方法论应以指令集为抓手:从核心/基础指令集,到扩展/升级指令集,以自顶向下的思维方法为核心:指令集 -> 微架构 -> 组件 -> 代码,以特定处理器分析为主线,以解放思想为原则。

2.2 模块化指令集

  • RV [32, 64, 128] I, M, A, F, D, G, Q, L, C, B, J, T, P, V, N;
  • DSA 特定领域架构

2.3 清晰的指令格式

  • 格式维度:R,I,S,B,U,J指令;
  • R型指令——用于寄存器与寄存器之间算术运算操作;
  • I 型指令——用于寄存器与立即数之间算术运算和读存储器操作;
  • S型指令——用于写存储器;
  • B型指令——用于分支转移操作(属于S型指令的变体);
  • U型指令——用于高20比特位立即数操作;
  • J型指令——用于直接跳转(属于U型指令的变体)

2.4 清晰的权限层级

  • 用户 U 模式
  • 管理 S 模式
  • 机器 M 模式
  • 特权指令与非特权指令

2.5 整齐划一的标准

  • 特权指令集标准

2.6 灵活的商业模式

  • x86 闭源
  • Arm 闭源 授权
  • RISC-V 闭源 授权 开源

三、RISC-V 微架构


3.1 微架构s

3.1.1芯来 N300

3.1.2 SiFive E76-MC

3.1.3 平头哥玄铁

3.2 微架构魔法

3.2.1 虚拟化

  • M 模式

3.2.2 安全

  • Enclave

四、RISC-V 方法论

4.1 设计哲学

4.2 知识体系

4.3 入门方法

4.4 实践指南

总结


RISC-V 架构是非常有前景的指令集架构,值得我们花些时间学习。

参考


  • RISC-V 开源指令集 中文
  • RISC-V SBI 接口
  • RISC-V 特权指令集、非特权指令集、扩展指令集

术语

图灵机

一个抽象的机器、思想模型;

总线 

计算机各种功能部件之间传送信息的公共通信干线;

皮格马利翁效应心理学指出,赞美、赞同能够产生奇迹,越具体,效果越好~
“收藏夹吃灰”是学“器”练“术”非常聪明的方法,帮助我们避免日常低效的勤奋~

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

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

相关文章

Mysql 高级学习笔记

Mysql 高级学习笔记 文章目录Mysql 高级学习笔记一、Mysql 基础1. 聚合函数2. having3. sql 的执行顺序4. 约束5. 试图二、Mysql 高级1. MySQL中的SQL的执行流程2. 存储引擎介绍2. 索引3. 性能分析工具的使用4. 索引优化与查询优化5、关联查询优化6、事务及日志6、MVCC一、Mysq…

【C++】从0到1入门C++编程学习笔记 - 提高编程篇:STL常用容器(deque容器)

文章目录一、deque容器基本概念二、deque构造函数三、deque赋值操作四、deque 大小操作五、deque 插入和删除六、deque 数据存取七、deque 排序一、deque容器基本概念 功能: 双端数组,可以对头端进行插入删除操作 deque与vector区别: vec…

【Python】在代码中执行终端命令并获取输出和运行状态

文章目录0 前言1 os库1.1 os.system1.2 os.popen2 subprocess库2.1 subprocess.run2.2 subprocess.Popen3 参考链接0 前言 在Python编程过程中,我们可能会遇到需要在终端命令行执行某个命令并获取其输出的操作,我们首先想到可能就是C语言中的system(&quo…

字节青训营——分布式学习笔记

1. 分布式事务 满足ACID(原子性、一致性、隔离性、持久性)的一组操作,可以被称为一个事务。 同样的,分布式事务也部分遵循 ACID 规范: 原子性:严格遵循一致性:事务完成后的一致性严格遵循&am…

超详细域名备案+阿里云服务器配置+小程序开发(简略)+前后端分离(简略)

文章目录前言一、试水环节(配置阿里云服务器环境)二、购买域名及备案1.购买域名2.域名备案3.域名解析4.白嫖SSL证书5.在网站上链接备案号三、设置微信小程序开发的权限四、安装微信小程序开发的工具五、前后端分离(简略)总结前言 …

RPA自动化办公06——Uibot中的UB编程语言基础

参考:UB语言参考_UiBot开发者指南 虽然Uibot用命令就行,但是编程习惯会让程序员们更喜欢看源代码,有时候写源代码会更加方便,所有要学习UB的语言基础。 它很简单,和Python很像,下面简单了解一个各种基础语…

美团:前景乐观但风险巨大

来源:猛兽财经 作者:猛兽财经 增长势头强劲,已经扭亏为盈 过去几年,美团(03690)的收入一直在以两位数的速度在增长。 这一增长势头,到了2022年还在延续(美团的收入在2022年仍保持…

kob配置git环境与项目创建

配置git环境 1.安装Git Bash 如果是使用Linux和mac可以跳过第一步操作,如果使用windows需要安装Git Bash:Git Bash传送门安装过程中所有配置按照默认即可; 2.配置Git环境 2.0 创建秘钥:使用命令:“ssh-keygen”生成秘钥&#…

【Java基础】多线程学习

1.多进程和多线程 多进程: 是指操作系统能同时运行多个任务(程序)。 多线程: 是指在同一程序中有多个顺序流在执行。 实现: 在java中要想实现多线程,有两种手段,一种是继承Thread类&#xff…

1、环境安装

目录一、vscode插件二、设置代理GOPROXY三、gopls1 - vscode弹出插件支持安装2 - LSP3 - gopls四、vscode设置一、vscode插件 vscode插件商店 Go Team at Google:让vscode关联上go语言的开发环境 Outline Map:更好的代码大纲 二、设置代理GOPROXY…

操作系统进程同步

文章目录操作系统进程同步一.进程同步的基本概念1.两种形式的制约关系2.临界资源(critical resource)3.临界区(critical section)4.同步进制遵循的原则二.硬件同步机制1.关中断2.Test-and-Set 指令3.Swap指令实现进程互斥三.信号量…

mysql-视图的定义和简单使用

mysql-视图视图1. 视图的定义2.视图的创建规则和使用限制小结视图 1. 视图的定义 视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。 视图的一些常见应用: 重用SQL语句。 简化复杂的SQL操作。在编写查询后,可以…

c语言之链表

今天来介绍一下c语言如何手写一个单向链表,我们都知道链表是用来提高空间的利用效率的数据结构,其中包括了一个数据域和指针域,数据域用来存储数据,指针域用来指向下一个节点。数据结构如下 我们都知道数据结构最主要的是他的增删…

从底层入手搞定C++引用和内联函数

C引用和内联函数 文章目录C引用和内联函数一、引用1.1引用的概念1.1.1代码展示1.1.2图示1.2引用的特性1.3常引用1.4引用的使用场景1.5 传值、传引用效率比较1.6 引用和指针的区别二、内联函数2.1.内联函数的概念2.2内联函数的特性总结一、引用 首先我们来看一下引用的概念&…

每天10个前端小知识 【Day 2】

前端面试基础知识题 1. arguments 这种类数组&#xff0c;如何遍历类数组&#xff1f; for(var i 0, len arrayLike.length; i < len; i) { …… }使用ES6的 … 运算符&#xff0c;我们可以轻松转成数组。 function func(...arguments) { console.log(arguments); // […

蓝牙和射频技术的关系

蓝牙和射频技术的关系 提到蓝牙大家的比较熟悉&#xff0c;但射频技术很多都没有明白什么意思&#xff1f; 现简单介绍下他们的关系&#xff0c;让想了解射频技术的朋友更清楚。 1&#xff1a;定义&#xff1a; 射频&#xff08;RF&#xff09;是Radio Frequency的缩写&#xf…

Fluent的模型参数化(2)

前言&#xff1a;本文基于2023R1版本。在《Fluent的模型参数化&#xff08;1&#xff09;》中&#xff0c;对将Fluent模型进行参数化的方法进行了概述。本文主要基于已参数化的模型&#xff0c;进行参数分析的方法。基本概念&#xff1a;输入参数&#xff1a;工况的设置数据&am…

SpringMVC之入门案例

目录 一&#xff1a;概述 二代码实操&#xff1a; 步骤1:创建Maven项目&#xff0c;并导入对应的jar包 步骤2:创建控制器类 步骤3:创建配置类 步骤4:创建Tomcat的Servlet容器配置类 步骤5:配置Tomcat环境 步骤6:启动运行项目 步骤7:浏览器访问 知识点1&#xff1a;Co…

Cesium的设计结构与零基础入门

关于cesium我最近会写一系列的文章教程,带大家一步一步的从零开始学习cesium,看过我的文章的人都清楚我的讲课方式就是从一个小白的视角,从一个什么都不懂的视角,一点一点的循序渐进为大家讲清楚一个知识,好废话不多说我们开始! 首先在学习之前,你必须清楚cesium是个什…

DynaSLAM-7 DynaSLAM中双目运行流程(Ⅰ):加载Mask R-CNN网络部分MaskNet.cc

目录 1.执行流程 2. SegmentDynObject::SegmentDynObject 3. SegmentDynObject::GetSegmentation 1.执行流程 我们输入到命令行五个参数&#xff1a; stereo_kitti path_to_vocabulary path_to_settings path_to_sequence (path_to_masks) 分别是DynaSLAM双目例程中的可执行…