打造IC人才
科技生态圈
发布时间:2023-06-07
来源:IC修真院
RISC的英文全称为“Reduced InstrucTIon Set
Computer”,即“精简指令集计算机”,是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机),RISC机中采用的微处理器统称RISC处理器。
这样一来,它能够以更快的速度执行操作(每秒执行更多百万条指令,即MIPS)。因为计算机执行每个指令类型都需要额外的晶体管和电路元件,计算机指令集越大就会使微处理器更复杂,执行操作也会更慢。
RISC 设计方案非常简约,通常有20 多条简化的指令集。每条指令长度固定,由专用的加载和储存指令用于访问内存,减少了内存的寻址方式,大多数运算指令只能访问操作寄存器。
CPU 中配有大量的寄存器,这些指令的选取都是工程中使用频率最高的指令。由于指令长度一致,功能单一,操作依赖于寄存器,这些特性使得CPU 指令预取、分支预测、指令流水线等部件的效能大大发挥,几乎一个时钟周期能执行多条指令
RISC 的代表产品是 ARM 和 RISC-V。现在,两者已经没有明显的界限了,开始相互融合了
流水线
谈到指令并行,就不得不谈到CPU 核心的流水线。现代处理器都是流水线结构。
流水线(Pipeline)技术是指程序在执行时候多条指令重叠进行操作的一种准并行处理实现技术。通俗的讲将一个时序过程,分解成若干个子过程,每个过程都能有效的与其他子过程同时执行。这种思想最初是在RISC的架构中出现的,旨在提高处理器处理效率,争取在一个时钟周期中完成一条指令。
一般常见的5级流水线有:
取指:指令取指(Instruction Fetch)是指将指令从存储器中读取出来的过程。
译码:指令译码(Instruction Decode)是指将存储器中取出的指令进行翻译的过程。经过译码之后得到指令需要的操作数寄存器索引,可以使用此索引从通用寄存器组(Register File)中将操作数读出。
执行:指令译码之后所需要进行的计算类型都已得知,并且已经从通用寄存器组中读取出了所需的操作数,那么接下来便进行指令执行(Instruction Execute)。指令执行是指对指令进行真正运算的过程。譬如,如果指令是一条加法运算指令,则对操作数进行加法操作;如果是减法运算指令,则进行减法操作。在“执行”阶段的最常见部件为算术逻辑部件运算器(Arithmetic Logical Unit,ALU),作为实施具体运算的硬件功能单元。
访存:存储器访问指令往往是指令集中最重要的指令类型之一,访存(Memory Access)是指存储器访问指令将数据从存储器中读出,或者写入存储器的过程。
写回:写回(Write-Back)是指将指令执行的结果写回通用寄存器组的过程。如果是普通运算指令,该结果值来自于“执行”阶段计算的结果;如果是存储器读指令,该结果来自于“访存”阶段从存储器中读取出来的数据。
无流水线:
有流水线:
它增加了四组寄存器,每一个流水线级数内部都有各自的组合逻辑数据通路,彼此之间没有复用资源,因此,其面积开销是比较大的,但是由于可以让不同的流水线级数同时做不同的事情,而达到流水的效果,提高了性能,优化了时序,增加了吞吐率。
RISC-V
在了解了 RISC 和 CISC 两种计算机指令设计架构后。我们来看看 RISC-V。
RISC-V 的 “V”, 有两层意思,一方面代表第5代 RISC;另一方面, “V”取Variation 之意代表变化。
RISC-V 是什么?
RISC-V 是一套开放许可证书、免费的、由基金维护的、一个整数运算指令集外加多个扩展指令集的CPU 结构规范(ISA)。
整数运算指令集 + 扩展指令集
任何硬件开发商或者组织都可以免费使用这套规范,构建CPU 芯片产品。
指令集命名方式
以RV 为2前缀,然后是位宽,最后代表是指令集的字母集合:
指令集模块
指令集模块是一款CPU架构的主要组成部分,是CPU 和 上层软件交互的核心,也是cpu主要功能体现。
RISC-V 规范只定义了CPU 需要包含的基础整型操作指令:
整型的储存
加载
加减
逻辑
移位
分支
等。
其他指令为可选指令或者用户扩展指令。比如:
乘
除
取模
单精度浮点
双精度浮点
压缩
原子指令
等。
扩展指令是芯片工程师根据需求自定义。
所以 RISC-V 采用的是模块化的指令集,易于扩展、组装。它适用于不同的应用场景,可以降低 CPU 实现成本。
RISC-V 寄存器
指令的操作数来源于寄存器,精简指令架构的CPU,都会提供大量的寄存器。
RISC-V 的规范定义了32个通用寄存器以及一个PC寄存器,这对于RV32I、RV64I、RV128I 指令集都是一样的,只是寄存器的位宽不一样。
如果要实现支持F/D扩展指令集的CPU,则需要额外支持32个浮点寄存器。而如果实现只支持RV32E指令集的嵌入式CPU,则可以将32个通用寄存器缩减为16个通用寄存器。
ABI: 应用程序二进制接口,可以理解为寄存器别名,高级语言在生成汇编会用到。
RSIC-V 特权级
不同的 指令集架构都有特权级的概念,RSIC-V 也不例外,我们来看看RISC-V 的特权级。
不同的特权级能访问的系统资源不同,高特权级的能访问低特权级的资源,反之却不行。
RISC-V 的规范文档定义了四个特权级别(privilege level),特权等级由高到低排列,如下表所示。
一个RISC-V 硬件线程(hart),相当于一个CPU
内独立的可执行核心,在任意时刻,只能运行在某一个特权级上,这个特权级由CSR(控制和状态寄存器)指定配置。
机器特权级(M):RISC-V 中 hart 可以执行的最高权限模式。在M 模式下运行的 hart,对内存、I/O 和一些必要的底层功能(启动和系统配置)有着完全的控制权。它是唯一一个所有标准RISC-V CPU 都必须实现的权限级。
虚拟机监视特权级(H):为了支持虚拟机监视器而定义的特权级。
管理员特权级(S):主要用于支持现代操作系统,如Linux、FreeBSD和 windows 等
用户应用特权级(U):用于运行应用程序,同样也适用于嵌入式系统。
特权级的存在,是给指令加上了权力,从而去控制指令编写应用程序。应用程序只能干应用程序该干的事情,不能越权操作。操作系统则拥有更高的权力,能对系统资源进行管理。
总结
本文梳理了 芯片、CPU、流水线,指令与架构等基础概念,引出了RISC-V 基础介绍,简单介绍了RISC-V 由来。后续针对risc-v 会根据自身学习情况做相应介绍。
内容转载自:漫谈嵌入式
相关推荐:
推荐阅读
2023-06-07
2022-08-23
2023-03-15
2022-09-13
2023-03-25