CPU中包含了控制部件和运算部件,即中央处理器。1971 年,Intel 将运算器和控制器集成在一个芯片上,称为 4004 微处理器,这标志着 CPU 的诞生。到了 1978 年,开发的 8086 处理器奠定了 X86 指令集架构。此后,8086 系列处理器被广泛应用于个人计算机以及高性能服务器中。

CPU的工作流程分为以下五个阶段:取指、指令译码、执行指令、访存读取数据和结果回写

指令和数据统一存储在内存中,数据与指令需要从统一的存储空间中存取,经由共同的总线传输,无法并行读取数据和指令。这就是大名鼎鼎的冯诺依曼体系结构。

CPU运行程序会循环执行上述五个阶段,它既是程序指令的执行者,有被程序中相关的指令所驱动,最后实现了相关的计算功能。这些功能再组合成相应算法,然后由多种算法共同实现功能强大的软件。

CPU的工作离不开指令,指令集架构就显的尤其重要。有CISC(复杂指令集)和RISC(精简指令集)

CISC

CPU 的指令集越丰富、每个指令完成的功能越多,为该 CPU 编写程序就越容易,因为每一项简单或复杂的任务都有一条对应的指令,不需要软件开发人员写大量的指令。这就是复杂指令集计算机体系结构——CISC。

CISC 的典型代表就是 x86 体系架构,x86 CPU 中包含大量复杂指令集,比如串操作指令、循环控制指令、进程任务切换指令等,还有一些数据传输指令和数据运算指令,它们包含了丰富的内存寻址操作。

CISC 的优势在于,用少量的指令就能实现非常多的功能,程序自身大小也会下降,减少内存空间的占用。但凡事有利就有弊,这些复杂指令集,包含的指令数量多而且功能复杂。

RISC

20 世纪 80 年代,编译器技术的发展,导致各种高级编程语言盛行。这些高级语言编译器生成的低级代码,比程序员手写的低级代码高效得多,使用的也是常用的几十条指令。 最终导致人们开始向 CISC 的反方向思考,由此产生了** RISC——精简指令集计算机体系结构。**

正如它的名字一样,RISC 设计方案非常简约,通常有 20 多条指令的简化指令集。每条指令长度固定,由专用的加载和储存指令用于访问内存,减少了内存寻址方式,大多数运算指令只能访问操作寄存器。

而 CPU 中配有大量的寄存器,这些指令选取的都是工程中使用频率最高的指令。由于指令长度一致,功能单一,操作依赖于寄存器,这些特性使得 CPU 指令预取、分支预测、指令流水线等部件的效能大大发挥,几乎一个时钟周期能执行多条指令。

RISC 的代表产品是 ARM 和 RISC-V。

用 RISC-V 来命名该指令集架构,有两层意思:RISC-V 中的“V”,一方面代表第 5 代 RISC;另一方面,“V”取“ Variation”之意,代表变化。

RISC-V是什么

RISC-V 是一套开放许可证书、免费的、由基金会维护的、一个整数运算指令集外加多个扩展指令集的 CPU 架构规范

指令集命名方式

RISC-V 规范中有相关定义说明,以 RV 为前缀,然后是位宽,最后是代表指令集的字母集合,具体形式如下:

RV[###][abc……xyz]

用表格为你说明一下这个格式,如下所示:



举个例子,比如:RV64IMAC,就表示 64 位的 RISC-V,支持整数指令、乘除法指令、原子指令和压缩指令。

指令集模块

指令集是一款 CPU 架构的主要组成部分,是 CPU 和上层软件交互的核心,也是 CPU 主要功能的体现。

RISC-V 规范只定义了 CPU 需要包含基础整形操作指令,如整型的储存、加载、加减、逻辑、移位、分支等。其它的指令称为可选指令或者用户扩展指令,比如乘、除、取模、单精度浮点、双精度浮点、压缩、原子指令等,这些都是扩展指令。扩展指令需要芯片工程师结合功能需求自定义

所以 RISC-V 采用的是模块化的指令集,易于扩展、组装。它适应于不同的应用场景,可以降低 CPU 的实现成本。

下图展示的是 RISC-V 指令集的各个组成部分:

RISC-V寄存器

指令的操作数是来源于寄存器,精简指令集架构的 CPU,都会提供大量的寄存器,RISC-V 当然也不例外。RISC-V 的规范定义了 32 个通用寄存器以及一个 PC 寄存器,这对于 RV32I、RV64I、RV128I 指令集都是一样的,只是寄存器位宽不一样。

如果实现支持 F/D 扩展指令集的 CPU,则需要额外支持 32 个浮点寄存器。而如果实现只支持 RV32E 指令集的嵌入式 CPU,则可以将 32 个通用寄存器缩减为 16 个通用寄存器。

不常用的 32 个浮点寄存器并没有列在这张表里。表中的 ABI 名称,即应用程序二进制接口,你可以理解为寄存器别名,高级语言在生成汇编语言的时候会用到它们。

比如 C 语言处理函数调用时,用哪些寄存器传递参数、返回值,调用者应该保护哪些寄存器,用什么寄存器管理栈帧等等。

定义好ABI标准,就能在语言间相互调用函数了,比如C语言函数调用汇编语言函数。

RISC-V 特权级

不同的特权级能访问的系统资源不同,高特权级能访问低特权级的资源,反之则不行RISC-V 的规范文档定义了四个特权级别(privilege level),特权等级由高到低排列,如下表所示

一个 RISC-V 硬件线程(hart),相当于一个 CPU 内的独立的可执行核心,在任一时刻,只能运行在某一个特权级上,这个特权级由 CSR(控制和状态寄存器)指定和配置

具体分级如下:

  • 1.机器特权级(M):RISC-V 中 hart 可以执行的最高权限模式。在 M 模式下运行的 hart,对内存、I/O 和一些必要的底层功能(启动和系统配置)有着完全的控制权。因此,它是唯一一个所有标准 RISC-V CPU 都必须实现的权限级。实际上,普通的 RISC-V 微控制器仅支持机器特权级。

    1. 虚拟机监视特权级(H):为了支持虚拟机监视器而定义的特权级。
    1. 管理员特权级(S):主要用于支持现代操作系统,如 Linux、FreeBSD 和 Windows。
    1. 用户应用特权级(U):用于运行应用程序,同样也适用于嵌入式系统。

特权级的作用:

有了特权级的存在,就给指令加上了权力,从而去控制用指令编写的程序。应用程序只能干应用程序该干的事情,不能越权操作。操作系统则拥有更高的权力,能对系统的资源进行管理。

RISC-V 因何流行:其优势:一是 RISC-V 完全开放,二是 RISC-V 指令简单,三是 RISC-V 实行模块化设计,易于扩展。

为什么说 RISC-V 很简单?RISC-V 提供了一个非常强大且开放的精简指令集架构,只有 32 个通用寄存器、40 多条常用指令、4 个特权级。如果需要其它功能,则要进行指令集的扩展,单核心的规范文档才不到 300 页,一个人在一周之内就能搞清楚。

RISC-V 的模块化设计。RISC-V 虽然简单,但这并不意味着功能的缺失。通过模块化的设计,就能实现对各种功能组件的剪裁和扩展。

正是因为 RISC-V 开放、简单和模块化这三大特点,硬件工程师和软件工程师才能站在巨人的肩膀上开发,自由地调用和组装功能模块,快速去实现特定业务场景下的芯片需求

RISC介绍的更多相关文章

  1. Linux基础介绍【第一篇】

    Linux简介 什么是操作系统? 操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心 ...

  2. RISC指令集的五个周期

    RISC指令集的五个周期 RISC(reduced instruction set computer,精简指令集计算机)简称为精简指令集.RISC把执行指令的精力主要放在了经常使用的指令上面.本文主要 ...

  3. 网络存储技术介绍(1) ( based on zt)

    最近由于某同学微信发了一些网络存储的文章,开始感兴趣,稍微收集了一些 一.  网络存储技术 http://ask.zol.com.cn/q/187044.html  (yxr:很老的技术介绍吧) 网络 ...

  4. 微控制器(MCU)架构介绍

    微控制器(MicroController)又可简称MCU或μC,也有人称为单芯片微控制器(Single Chip Microcontroller),将ROM.RAM.CPU.I/O集合在同一个芯片中, ...

  5. Dalvik虚拟机简要介绍和学习计划

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是 ...

  6. 那些年的那些事CISC和RISC发展中的纠缠

    本文来自http://www.cnbeta.com/articles/224544.htm ARM.ARM.ARM,没错ARM仿佛一夜之间就火了,平板.手机等领域随处可见它的影子,甚至已经有人预言未来 ...

  7. 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...

  8. ARM过程调用标准---APCS简单介绍

    介绍 APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程能够与其它例程交织在一起.最显著的一点是对这些例程来自哪里没有 ...

  9. JAVA 文件编译执行与虚拟机(JVM)简单介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...

  10. ARM平台的虚拟化介绍

    本篇博文主要介绍虚拟化的基本思想以及在arm平台如何做虚拟化,arm提供的硬件feature等等. 虚拟化技术简介 虚拟化技术 虚拟化是一个概念,单从这个概念的角度来看,只要是用某一种物品去模拟另一种 ...

随机推荐

  1. Java 加密和解密

    在 Java 中,加密和解密通常通过 Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 实现.以下是常见 ...

  2. div剩余高度自动填充满

    这边采用弹性布局来处理 在需要被填充满的div上设置display:flex;,然后根据你所需要填充宽度(flex-direction:column;)高度(flex-direction:row;)设 ...

  3. 小米字体和思源宋体CSS调用使用指南

    小米字体 //css引用 <link rel="stylesheet" href="https://font.sec.miui.com/font/css?famil ...

  4. Edge浏览器网站页面如何设置自动刷新

    1.浏览器设置 要在Edge浏览器中设置网站页面自动刷新,可以按照以下步骤操作: 打开Edge浏览器,进入你想要自动刷新的网站页面. 在地址栏上方点击"设置和更多选项"(三个水平点 ...

  5. [爬坑指南] 虚拟机和docker实现下载服务器

    现在需要挂梯子下载一批资源,然而我的梯子装在路由器中,openclash只能配置指定的某个设备不走梯子.所以索性就装个虚拟机专门用来下载东西,挂bt.如果需要走梯子,就单独在这个下载机中配置一个廉价梯 ...

  6. 常见的各类LLM基座模型(GPT、DeepSeek、Qwen等)模型解析以及对比

    From: https://www.big-yellow-j.top/posts/2025/02/15/LLM.html 各类LLM模型技术汇总 只去对比整体框架,对所采用的激活函数,归一化处理,位置 ...

  7. DeepSeek 全套资料pdf合集免费下载(持续更新)

    有很多朋友都关注DeepSeek相关使用的教程资料,本站也一直持续分享DeepSeek 学习相关的pdf资料,由于比较零散,这篇文章主要就是做一个汇总,并且持续更新,让大家可以及时获取下载最新的相关D ...

  8. [tldr] vscode的remote插件的config文件内容解析

    参考VS Code Remote SSH配置 解决了什么问题 vscode的remote插件可以直接通过可视化的UI新建一个连接 通过ssh指令添加服务器的连接方式 但是这种方式添加的服务器名字等于服 ...

  9. 获取当前电脑屏幕的dpi

    <div id="test" style="width:1in;height:1in;overflow:hidden;"></div> ...

  10. 通过 API 将Deepseek响应流式内容输出到前端

    要实现通过 API 将流式内容输出到前端,可以采用以下技术方案(以 Python 后端 + 前端 JavaScript 为例): 方案一:使用 Server-Sent Events (SSE) 这是浏 ...