RISC-V处理器与片上系统设计:基于FPGA与云平台的实验教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 RISC-Ⅴ架构特性

RISC-Ⅴ诞生于一个科研项目,却有着许多令人折服的先进设计理念,这些先进理念得到了众多专业人士的青睐和好评,吸引了众多商业公司的相继加盟。如果要用一个词来形容RISC-Ⅴ架构所有的特性,优雅再合适不过了(尽管很少有会有人将优雅应用在指令集体系架构上)。本节就RISC-Ⅴ优雅的两大具体表现——简洁性和模块化谈起。

2.2.1 简洁性

简洁是一切真正优雅的要义。在芯片的设计工作中,指令集架构的简洁性有助于缩小其实现处理器的尺寸,缩短芯片设计和验证的时间,进而降低芯片的成本。RISC-Ⅴ的架构师在设计之初总结了过去的指令集架构所犯过的错误,丢掉了其他旧架构需要背负向后兼容的历史包袱,通过强调简洁性来保证它的低成本。

RISC-Ⅴ的简洁性在ISA手册规模上得到充分体现。表2-1是以页数和单词数衡量的RISC-Ⅴ、ARM和x86指令集手册的大小对比。如果把读手册作为全职工作,每天8小时,每周5天,那么需要半个月读完ARM手册,需要整整一个月读完x86手册(基于这样的复杂程度,大概没有一个人能完全理解ARM或x86)。从这个角度来说,RISC-Ⅴ的复杂度只有ARM的1/12,x86的1/10到1/30。其中ISA手册的页数和字数来自[Waterman and Asanovi'c 2017a],[Waterman and Asanovi'c 2017b],[Intel Corporation 2016]和[ARM Ltd.2014]。读完需要的时间按每分钟读200个单词,每周读40小时计算。

表2-1 以页数和单词数衡量ISA手册大小对比

img

尽管人人都知道RISC-Ⅴ是一个简单轻量级的指令集架构,但这不意味着RISC-Ⅴ会在性能上做出了巨大的让步。RISC-Ⅴ架构配置足够数量(32个)的通用寄存器,高效的分支跳转指令,规整的指令编码和格式,透明的指令执行速度,64位甚至128位地址架构的支持(某些特性还将会在后文中进一步解释)。这些特性帮助程序员和编译器形成更高效的代码,发挥出更极致的性能。总的来说,RISC-Ⅴ架构从一而终贯彻了简洁的设计理念,是名副其实的短小精悍。

2.2.2 模块化

如果说简洁性已经做到了数量上的极致优雅,那么RISC-Ⅴ架构的另一大特性模块化则诠释了如何用极为简单的方式构造出计算机世界的优雅。模块化的特性使RISC-Ⅴ架构相比其他成熟的商业架构有一个最大的不同之处,这使RISC-Ⅴ架构能将不同的功能集以模块化的方式自由组织在一起,从而试图通过一套统一的架构满足各种不同的应用。这一点类似于ARM通过A、R和M三个系列架构分别针对应用操作系统(Application)、实时(Real-Time)和嵌入式(Embedded)三个领域,但它们彼此分属于三个不同指令集架构。模块化的特性还使指令集架构避免了传统的增量型指令集架构体量随着时间的推移越来越庞大的缺点。

RISC-Ⅴ的指令集使用模块化的方式进行组织,每一个模块用一个英文字母来表示。RISC-Ⅴ最基本、最核心也是唯一强制要求实现的指令集部分是由I字母表示的基本整数指令子集(RV32I)。其他的指令子集部分均为可选的模块,包括M(乘除法指令)、A(原子操作指令)、F(单精度浮点指令)、D(双精度浮点指令)、C(压缩指令)等,见表2-2。由于RISC-Ⅴ正在不断发展和变化,这些指令集状态也可能会发生变化。

表2-2 目前RISC-Ⅴ各个模块的指令集状态

img

RISC-Ⅴ架构仅仅需要实现RV32I基础指令集,就能运行一个完整的软件栈支持现代操作系统环境。RV32I包含40条独特的指令,并且几乎可以模拟所有其他ISA扩展(A扩展除外)。RV32I是冻结并且永远不会改变的,这么做是为了给编译器的编写者、操作系统开发人员和汇编语言程序员提供稳定的目标。

在RV32I之外,根据应用程序的需要,可以包含或不包含其他的扩展指令集以满足不同的应用场景。例如,针对小面积低功耗嵌入式场景,用户可以选择RV32IC或者RV32EC组合的指令集,仅使用机器模式(Machine Mode);而针对高性能应用操作系统场景,则可以选择RV32IMFDC的指令集,使用机器模式与用户模式(User Mode)两种模式。这种模块化特性使RISC-Ⅴ具有了袖珍化、低能耗的特点,而这对于嵌入式应用来说是至关重要的。RISC-Ⅴ编译器得知当前硬件包含哪些扩展后,便可以生成当前硬件条件下的最佳代码,不同扩展指令集之间的配合可做到天衣无缝。

按照RISC-Ⅴ架构命名规则,惯例是把代表扩展的字母附加到指令集名称之后作为指示。例如,RV32IMAFDC将乘除法(RV32M)、原子操作(RV32A)、单精度浮点(RV32F)、双精度浮点(RV32D)和指令压缩(RV32C)的扩展添加到了基础指令集(RV32I)中。其中IMAFD被定义为通用(General Purpose)组合,以字母G表示,因此RV32IMAFDC也可以表示为RV32GC。

上述阐述的模块化指令子集除了可扩展、可选择,RISC-Ⅴ架构还有一个非常重要的特性,那就是支持第三方的扩展。用户可以扩展自己的指令子集,RISC-Ⅴ预留了大量的指令编码空间用于用户的自定义扩展。

得益于先进优雅的设计理念与后发优势,RISC-Ⅴ架构能够规避传统指令集架构的负担桎梏,成为一套现代且受人欢迎的指令集架构。