本文是RISC-V基础知识的入门读物。公开了开放体系结构的概念、模块化ISA的技术描述和一些商用RISC-V微处理器的实现。
RISC-V开放式指令集架构是当今可用的专有架构(如ARM架构)的流行替代方案。自诞生以来,RISC-V在学术上和商业上都稳步上升。
理解RISC和CISC
RISC是20世纪80年代提出的一种计算机架构哲学,作为英特尔、摩托罗拉和当时几乎所有人提供的商业架构的替代方案。这种架构最初被称为“复杂指令集计算机”或CISC,它依靠密集的指令集来实现各种被认为有用和必要的操作。然而,包括IBM和加州大学伯克利分校在内的许多研究团队发现,编译器通常最终会使用这些复杂指令集的一小部分。这一发现和其他发现引发了对更大指令集的需求的质疑,集中于简单性作为提高效率的手段。
总的来说,RISC在许多方面与CISC相反。一般CISC中央处理器(CPU)有一些寄存器和大量的指令,大部分可以访问内存,而RISC CPU有很多寄存器和非常有限的指令集,内存访问仅限于少数加载和存储指令。
为了说明复杂指令和简单指令之间的区别,表1显示了使用CISC CPU(恩智浦s08)和RISC CPU(ARM Cortex M0)递增计数器变量的代码比较。
表1。1之间的示例比较。CISC和RISC代码。
在这个表中,CISC允许在单个指令中增加变量,而RISC需要通过加载和存储来访问内存。虽然这显示了代码大小的差异,但这不是苹果之间的比较,因为架构之间有许多差异,所以这并不能证明一个在技术上比另一个更好。
今天,英特尔x86/x64架构证明了CISC微处理器没有被RISC取代,而ARM架构证明了RISC已经统治了移动设备市场。
RISC-V历史
缩写RISC是由加州大学伯克利分校的大卫帕特森教授在1980年左右创造的。他与斯坦福大学的约翰汉尼斯教授合作,产生了他们的著名作品《计算机组织与设计》和《计算机架构:一种定量方法》。由于他们在RISC架构方面的工作,他们获得了2017年ACM AM图灵奖。
快进到1980年到2010年,开始了第五代RISC研究项目的开发,最终被称为RISC-V(读作“risk-5”)。
RISC-V国际——开放ISA
RISC-V是一种开放指令集架构(ISA),这意味着你可以在微处理器或微控制器中自由实现RISC-V CPU,而无需向任何使用这种ISA的人支付版税。
RISC-V International是一个全球性的非营利组织,拥有并维护RISC-V ISA的知识产权。它的主要目标之一是保持RISC-V的设计基于简单性和性能,而不是专注于商业利益。出于这个原因,RISC-V International依赖于其代表微处理器生态系统的成员,从个人到谷歌、英特尔和英伟达等组织。成为会员有很多好处,包括有可能为ISA的设计做出贡献,并投票支持提议的更改。在下面的图1中,您可以看到历年来RISC-V开发的高级时间表。
图一。自2010年问世以来,RISC-V受到了微处理器行业的好评,其在硬件和软件方面的采用率都在稳步上升。图片由RISC-V国际公司提供
RISC-V ISA和扩展协议
作为1980年开始的第五代研究项目,RISC-V是一种经验丰富的架构,旨在过去别人可能失败的情况下取得成功。RISC-V旨在从任何潜在的过去的错误中学习。
因此,RISC-V被设计成一个模块化的ISA,而不是传统的增量式ISA。这意味着RISC-V实现由一个强制的基本ISA和许多ISA扩展组成,因此可以根据应用的需要定制CPU。
自定义ISA的命名约定由字母RV(代表RISC-V)后跟位宽和变量标识符组成。
例如,图2所示的RV32IMAC代表:
RV32I:带有基本整数ISA的32位CPU
m:整数乘法和除法扩展
原子指令扩展
压缩指令扩展
图二。2的指令集。RV32IMAC ISA展示了RISC-V的模块化(非增量)特性,基本ISA结合了一组扩展[点击查看大图]。
编译器被告知目标CPU中包含的扩展,以便它可以生成最好的代码。如果代码包含缺少扩展的指令,硬件将捕获并执行标准库中的软件功能。
基本整数ISA
RV32I基本整数ISA只有47条指令,实现32位整数的基本功能(它的64位变体是RV64I)需要绝对必要的运算。该ISA编码为32位,包括以下指令:
增加
减法
位运算
加载和存储
跳跃
树枝
ISA基本上还指定了32个CPU寄存器,所有寄存器都是32位宽,外加程序计数器。唯一的特殊寄存器是x0,它总是读取0,就像它在许多以前的RISC ISA中实现的一样。
尽管表2中所示的所有寄存器都可以用于一般目的,但应用二进制接口(ABI)根据其调用约定来指定每个寄存器的用途。这意味着一些寄存器应该保存临时或保存的数据、指针、返回地址等。
表二。RV32I寄存器文件显示了RISC-V应用程序二进制接口中指定的硬件寄存器名称及其功能。图片由Krste Asanovi和Randy H. Katz提供
RISC-V乘法和浮点
RV32M扩展实现了8条指令对整数进行乘除运算(RV64M在这8条指令上增加了5条指令)。
RV32F扩展到32位浮点数和26条浮点指令,增加了32个独立寄存器。类似地,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国际网站。回顾黄浩宇
标签:RISC指令ISA