LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 552|回复: 0

RISC-V 简介——了解 RISC 的开放 ISA

[复制链接]
发表于 2024-1-6 17:46:59 | 显示全部楼层 |阅读模式
了解 RISC 与 CISC
RISC 是 20 世纪 80 年代提出的一种计算机架构理念,作为当时英特尔、摩托罗拉和几乎所有其他公司提供的商业架构的替代方案。这种架构最初被称为“复杂指令集计算机”或 CISC,它依靠密集的指令集来实现各种被认为有用且必要的操作。然而,包括IBM加州大学伯克利分校在内的许多研究团队 发现,编译器通常最终会使用这些复杂指令集的非常小的子集。这一发现以及其他发现导致人们质疑是否需要更大的指令集,并将重点放在简单性作为提高效率的手段上。
总体而言,RISC在很多方面与CISC相反。通常,CISC中央处理单元 (CPU)具有少量寄存器和大量指令,其中大部分可以访问内存,而 RISC CPU 具有大量寄存器和非常适度的指令集,内存访问仅限于少量加载和存储指示。

表 1. CISC 和 RISC 代码之间的比较示例。

在此表中,CISC 允许在单个指令中递增变量,而 RISC 需要通过加载和存储来访问内存。虽然这显示了代码大小的差异,但这并不是同类比较,因为架构之间存在许多差异,因此这并不能证明一个在技术上比另一个更好。
如今,Intel x86/x64架构证明了CISC微处理器没有被RISC取代,ARM架构证明了RISC已经主导了移动设备市场。

RISC-V 历史
RISC 缩写词是由加州大学伯克利分校的 David Patterson 教授于 1980 年左右创造的,他与斯坦福大学的 John Hennessy 教授合作出版了著名的著作《计算机组织与设计》和《计算机体系结构:一种定量方法》。由于他们在 RISC 架构方面的工作,他们于 2017 年获得了ACM AM 图灵奖
从 1980 年到 2010 年,第五代 RISC 研究项目的开发启动,最终被称为 RISC-V(发音为“risk- Five”)。

RISC-V International——开放的 ISA
RISC-V 是一种开放指令集架构 (ISA),这意味着您可以自由地在微处理器或微控制器中实现 RISC-V CPU,而无需向使用此 ISA 的任何人支付版税。
RISC-V International 是一家全球性非营利组织,拥有并维护 RISC-V ISA 知识产权。其主要目标之一是保持 RISC-V 的设计基于简单性和性能,而不是专注于商业利益。因此,RISC-V International依赖其代表微处理器生态系统群体的成员,从个人到谷歌、英特尔和 Nvidia 等组织。成为成员有很多好处,包括为 ISA 的设计做出贡献的可能性,以及投票批准提议的变更。在下面的图 1 中,您可以看到多年来 RISC-V 发展的高级时间表。

图 1.自 2010 年推出以来,RISC-V 受到微处理器行业的好评,硬件和软件的采用率都在稳步增长。图片由RISC-V International提供
RISC-V ISA 和扩展的约定
作为 1980 年启动的第五代研究项目,RISC-V 是一种经验丰富的架构,旨在从其他人过去可能失败的地方取得成功,RISC-V 旨在从过去任何潜在的错误中吸取教训。
因此,RISC-V 被设计为模块化 ISA,而不是传统的增量 ISA。这意味着 RISC-V 实现由强制性基础 ISA 和许多 ISA 扩展组成,因此可以根据应用程序的需求定制定制 CPU。
定制 ISA 的命名约定由字母 RV(用于 RISC-V)后跟位宽和变体标识符组成。
例如,RV32IMAC,如图2所示,表示:
  • RV32I:具有基本整数 ISA 的 32 位 CPU
  • M:整数乘法和除法扩展
  • A:原子指令扩展
  • C:压缩指令扩展


编译器会获知目标 CPU 中包含的扩展,以便生成最佳的代码。如果代码中包含缺少扩展的指令,则硬件会捕获并执行标准库中的软件函数。

基本整数 ISA
RV32I 基本整数 ISA 仅使用 47 条指令,即可实现绝对必要的操作,以实现 32 位整数的基本功能(其 64 位变体是 RV64I)。该 ISA 以 32 位编码,包含以下指令:
  • 添加
  • 减法
  • 按位运算
  • 加载和存储
  • 跳跃
  • 分支机构
基本 ISA 还指定了 32 个 CPU 寄存器(均为 32 位宽)以及程序计数器。唯一的特殊寄存器是 x0,它始终读取 0,如许多以前的 RISC ISA 中所实现的那样。
尽管所有寄存器(表 2 中所示的一些寄存器)均可用于通用用途,但应用程序二进制接口 (ABI) 根据其调用约定为每个寄存器指定了用途。这意味着某些寄存器应该保存临时或保存的数据、指针、返回地址等。

表 2.  RV32I 寄存器文件显示了 RISC-V 应用程序二进制接口中指定的硬件寄存器名称及其分配的功能。图片由Krste Asanović 和 Randy H. Katz提供
RISC-V 乘法和浮点
RV32M 扩展实现了 8 条指令来对整数执行乘法和除法(RV64M 在这 8 条指令的基础上添加了 5 条指令)。
RV32F 扩展添加了 32 个独立的寄存器,用于 32 位浮点数和 26 个浮点指令。同样,RV32D扩展使用32个64位浮点寄存器,支持双精度64位浮点数。

RISC-V 压缩指令
RV32C 扩展是 RISC-V ISA 的巧妙补充,因为它为现有指令的特殊子集提供了替代的 16 位编码。
在分析了现代优化编译器生成的无数行代码后,RISC-V 的创建者确定了最流行的指令,并创建了 16 位版本,放弃了完整 32 位版本的一些功能,这些功能仍然可以在无论如何,RV32I 基本 ISA 是这样的。
由于以下说明,这种压缩是可能的:
  • 有些寄存器比其他寄存器更受欢迎。
  • 一个操作数通常会被覆盖。
  • 有一些首选的立即值。
这允许将有限数量的寄存器的指令编码为操作数,仅指定 2 个寄存器而不是 3 个,使用小的立即值,所有这些都是 16 位。
通过压缩最常用的指令,您有更好的机会显着压缩您的程序。

其他 RISC-V 扩展
还有许多附加扩展,可以实现您期望从现代微处理器获得的所有功能。这包括嵌入式基本 ISA (RV32E)、原子操作 (A)、位操作 (B)、向量操作 (V) 的扩展,等等。

RISC-V 实施
有许多公司在其微控制器、微处理器和 SoC 中生产各种 RISC-V 内核。SiFive 就是一个例子,它是第一家制造基于 RISC-V ISA 的硅的公司。他们的芯片范围从低端微控制器一直到高性能 SoC。

图 3. RISC-V 框图示例,即 P550 高性能应用处理器的框图。图片由SiFive提供
然而,实际的 RISC-V 项目并不局限于集成电路。在编译器、模拟器、开发环境、操作系统等许多领域都有大量正在进行的项目。有关项目的详细列表,您可以访问此 GitHub以了解更多信息。
总而言之,RISC-V 是计算机架构领域一个令人兴奋的话题,今天是加入其中的好时机。如果您想了解有关这一运动的更多信息,请务必访问RISC-V International 网站

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表