RISC-V(读音“risk-five”)是一个新的指令集体系结构(ISA),它最初用于支持计算机体系结构研究和教学,但现在我们希望它也成为一个对于工业实现来说标准、免费、开放的体系结构。我们定义 RISC-V 的目的包括:
1、一个完全开放的 ISA,能够自由地提供给学术界和工业界使用。
2、一个真正的 ISA,能够适合直接在硬件上实现,而不仅仅是适用于模拟或者二进制翻译。
3、一个避免对某一种微体系结构风格(例如微编码、按序、去耦合、乱序等)或者实现威廉希尔官方网站
(例如全定制、ASIC、FPGA)“过度体系结构化(over-architecting)”的 ISA,但是也能够非常高效地利用任何一种威廉希尔官方网站
实现。
4、包含一个小的基本整数 ISA(可以作为一个定制的加速器的基础或者作为教学用途)和多个可选的标准扩展的 ISA,可以支持通用的软件开发。
5、支持修订的 2008 IEEE-754 浮点标准。
6、ISA 支持丰富的用户级 ISA 扩展和各种特殊的变种。
7、对应用程序、操作系统内核、硬件实现的 32 位、64 位地址空间变种。
8、ISA 支持高度并行的多核、众核实现,包括异构多处理器等。
9、可选的变长指令,以支持扩展可用的指令编码空间、支持一个可选的密集指令编码, 以提高性能、静态代码大小和能耗效率。
10、一个可完全虚拟化的 ISA,以简化虚拟机监督管理器(Hypervisor)的开发。
11、ISA 支持新的管理员级(supervisor-level)和虚拟机监督管理级(hypervisor-level)ISA 设计。
说到RISC-V,很少有人关注其名称的由来,其实这个名字代表了 UC Berkeley大学设计的第五代主要的RISC ISA(前四个是 RISC-I[18]、RISC-II[11]、SOAR[27]和 SPUR[14])。罗马数字“V”也暗示了“变种(Variations)”和“向量(Vectors)”,以支持各种体系结构研究,包括各种数据并行加速器,也是这个ISA设计的明确目标。 RISC-V ISA 概述
RISC-V ISA被定义为一个基本的整数ISA,必须在任何实现中存在,另外可以包含基于基本ISA的其他扩展。这个基本的整数ISA 与早期的RISC处理器非常相似,除了没有分支延迟槽(delay slot),另外支持可选的变长指令编码。这个基本核心被小心地限制具有最少的指令,足够支持一个合理的目标机,以便编译器、汇编器、链接器、操作系统(包含额外的管理员级操作)可以在之上运行,这样就可以提供一个方便的ISA和软件工具链“骨架”,围绕它可以构建更为定制化的处理器ISA。
每一个基本整数指令集,被整数寄存器宽度和相应的用户地址空间大小进行分类。有两种主要的基本整数变种,RV32I和RV64I,在后续章节中进行描述,分别提供了32位和64位用户级地址空间。硬件实现和操作系统可以提供给用户程序使用RV32I或者RV64I中的一种或者两种。第3章描述了RV32I基本指令集的子集变种RV32E,它被加入以支持小的微控制器。第19章描述了未来支持128位用户地址空间的RV128I变种基本整数指令集。
虽然对于更大的系统来说,64位地址空间是必须的,但我们相信在未来的数十年中,对于许多嵌入式应用和客户端设备来说,32位地址空间是足够的,而且适合更低的存储器传输和能耗消耗。另外,32位地址空间对于教育来说足够了。更大的128 位地址空间也许最终也是必须的,于是我们确保在RISC-V ISA框架中也包含它。
一个硬件实现可以只实现基本整数ISA的一个子集,但是在更高特权层必须实现操作码自陷(trap)和软件仿真,用于实现那些硬件没有提供的功能。基本整数ISA的一个子集对于教学目的来说,也许是有用的。但是基本核心被定义得非常简单,使得真实硬件实现没理由只实现它的一个子集,除了省略对非对齐存储器访问支持、以及将所有SYSTEM指令作为自陷实现之外。 RISC-V特色
RISC-V被设计成可以支持丰富的定制化和特殊化。基本整数ISA可被一个或者多个可选指令集扩展进行增强,但是基本整数指令集不能被重新定义。我们将RISC-V指令集扩展分为标准扩展和非标准扩展。标准扩展一般都是有用的,并且与其它的标准扩展并不冲突。非标准扩展是高度特殊化的,并可能与其它的标准扩展或者非标准扩展冲突。指令集扩展根据基本整数指令集宽度不同,可能有轻微的功能差异。第10章描述了各种用来扩展RISC-V ISA不同的方法。我们为RISC-V基本指令和指令集扩展开发了一个命名规则。
为了支持一般的软件开发,定义了一组标准扩展,提供乘法/除法、原子操作以及单精度、双精度浮点算术。基本整数ISA被命名为“I”(依据整数寄存器宽度不同,前缀RV32或者RV64),其中包含了整数计算指令、整数load、整数store和控制流指令,并且在所有RISC-V实现中,都是必须的。标准整数乘法和除法扩展被命名为“M”,其中增加了对保存在整数寄存器中的值进行乘法和除法的指令。标准原子指令扩展被命名为“A”,其中增加了对存储器进行原子的读、修改和写操作的指令,以支持处理器间的同步。标准单精度浮点扩展,被命名为“F”,增加了浮点寄存器、单精度计算指令、单精度load和store指令。标准双精度浮点扩展,被命名为“D”,扩展了浮点寄存器,并增加了双精度计算指令、load和store指令。一个基本整数内核加上这四个标准扩展(“IMAFD”),被缩写为“G”,它提供了一个通用的标量指令集。RV32G和RV64G现在是我们编译器工具链的缺省目标机器。后续章节描述了这些扩展以及其他计划中的标准RISC-V扩展。除了基本整数ISA和标准扩展之外,很少有一条新指令对所有应用程序巨大的好处,虽然它可能在某些领域中非常有用。由于能耗效率要求更为特殊化,我们相信对于一个ISA规范中的必须部分的简化是很重要的。鉴于其他的体系结构通常将它们的ISA作为一个单一的整体,它们会随着时间推移,当加入新指令的时候,就变化到一个新的版本。然而RISC-V尝试随着时间的推移,保持基本内核和每一个标准扩展不变,相反的,将新指令作为可选的扩展。例如,基本整数ISA将成为一个被持续支持的独立ISA,而不管任何随后而来的扩展。
通过对该书的首章节进行学习了解,可以看出RISC-V的诞生是先辈们智慧的结晶,既考虑了架构的可行性,后续指令的兼容性,以及数据的高效性,类型的多样性,不断的演变成今天的这样一个系统框架,具有很广阔的发展空间。
|