3.8.2 RISC-V体系架构简介
RISC-V作为一种指令集架构,一方面它规定了硬件设备在设计电路、组装元件时应当实现的功能目标,根据指令集的内容,决定运算单元、存储单元等元件的种类、数目、位宽及接线方式。另一方面,它是对硬件能力的一种抽象,提供了机器所能完成的操作种类、地址空间大小、数据格式、访问权限信息;上层软件应用可以将指令集视为硬件运行环境,而无须特别关注具体的硬件实体。
RISC-V的指令集包括基础指令集和扩展指令集两类。RISC-V指令集架构被定义为一个基础指令集和若干可选扩展指令集的组合,并在一种权限模式下进行工作。
RISC-V的基础指令集包含了能够为编译器、汇编器、链接器和操作系统(结合额外的特权操作)等提供必要功能实现的最小指令集合。它们是构筑ISA和软件工具链的骨架,可以围绕它们来构建更多定制的处理器ISA。根据最新的RISC-V规范,RISC-V共有5种基础指令集即RVWMO、RV32I、RV64I、RV32E、RV128I,其分别代表了弱内存次序指令集、32位整数指令集、64位整数指令集、32位嵌入式整数指令集、128位整数指令集。其中,RV32I和RV64I是最主要的两种,分别针对32位和64位工作环境而设计;RV32E是为嵌入式环境设计的一个RV32I的简化版本,RV128I将用于未来的128位环境,而RVWMO描述了RISC-V所使用的内存一致性模型。任何一种RISC-V指令集架构都必须完整地实现一种基础指令集。
RISC-V的扩展指令集用于为ISA提供特定方面的功能操作指令。一个ISA可以选择加入多个扩展指令集。为了使多个指令集能够共存,各指令集的编码空间均按照RISC-V国际基金会(RVI)的编码要求进行了划分,以避免冲突。现有RISC-V扩展指令集主要有24种,涉及乘法和除法扩展(M扩展)、原子指令扩展(A扩展)、单精度浮点扩展(F扩展)、双精度浮点扩展(D扩展)、四精度浮点扩展(Q扩展)和压缩指令扩展等。此外,RISC-V系统设计者还可以根据实际需要,制定其他自定义扩展指令集,并将其加入指令集架构中。