解读 RISC-V 命名规范
RISC-V 指令集架构 (ISA) 提供了独特的机会。其结构允许开发人员使用具有多种不同尺寸和性能的处理器,提供前所未有的软件兼容性。要充分利用这种兼容性,关键是了解 RISC-V 内核的命名规范。
与大多数处理器架构不同,RISC-V 是开源的,可供开发人员使用,而不收取许可或版税费用。此外,ISA 的设计非常灵活,允许开发人员选择他们希望实现的指令块,忽略他们不需要的指令块,如果需要,甚至还可以添加自定义指令。其目的是鼓励基于共同的基础开发具有不同尺寸和性能属性的多种处理器内核。
这种共同的基础在处理器之间提供了不受功能集影响的高度软件兼容性。例如,对于仅实现整数指令集的最小 RISC-V 处理器,其代码无需修改,便可在具备整数和浮点运算能力的更强大处理器上运行。当然,使用浮点指令的代码无法在仅支持整数运算的计算机上运行,但也不会导致处理器崩溃。未实现的指令只会产生非法指令陷阱。
RISC-V ISA 将它的指令划分为本质上独立且具有不重叠机器代码的指令组,从而实现这种灵活性。这些指令组被称为“标准扩展”,ISA 定义了多个此类标准扩展,以提供开发人员可能需要的大部分功能。每个标准扩展均通过字母代码进行标识。例如,“M”标准扩展提供用于对保存在寄存器的两个整数进行乘除运算的指令。同样,“F”标准扩展提供用于单精度浮点数运算的指令。
由于处理器开发人员在实现 RISC-V 内核时可以混搭各种标准扩展,因此用户可能需要仔细阅读规格表和编程手册,才能确定他们所要设计的处理器实际能够执行哪些功能。不过我们有一种更简单的解决方案。RISC-V 使用内核编号约定,让用户即时了解内核的功能。
这种编号约定从基础规格开始。RISC-V 定义了四种基础规格:
- RV32I 具有 32 位整数指令集,并提供 32 个通用寄存器
- RV32E 使用面向嵌入式应用的 32 位指令集,并具有 16 个寄存器
- RV64I 具有 64 位整数指令集和 32 个寄存器
- RV128I 具有 128 位整数指令集和 32 个寄存器
这些基础规格定义了功能完备的简单处理器。但是,大多数开发人员还会选择为其设计添加一个或多个标准指令集扩展。图 1 列出了这些标准扩展及其标识字母。
图 1:RISC-V 处理器的标准指令集扩展使用字母代码来标识其在内核编号约定中的存在。(图片来源:DigiKey)
完整的 RISC-V 内核命名包括基础规格,并按照图 1 所示的顺序附加代表其实现的标准扩展的字母。例如,一款使用极少资源的小型 SoC 可能采用名称 RV32EMAB。这意味着该内核实现了面向嵌入式设备的 32 位整数指令集,并具有 16 个寄存器,可运行整数乘除运算以及原子指令。它没有浮点运算能力,但支持位操作。
因此,在选择用于其设计的 RISC-V 芯片时,用户只需查看内核名称,便可了解它所提供的功能。例如,在 SparkFun Electronics 的 DEV-15799 FE310 Thing Plus RISC-V 评估板中,处理器名称为 RV32IMAC 内核(图 2)。
图 2:DEV-15799 评估板的 RISC-V 处理器名称为 RV32IMAC,这意味着它使用 32 位整数指令集,具有 32 个寄存器,并提供原子指令。(图片来源:SparkFun Electronics)
这意味着它使用 32 位整数指令集,具有 32 个寄存器,实现了整数乘除运算,提供原子指令,并支持压缩(16 位)指令,以最大限度减小代码空间。在此评估板上开发的任何代码还能在其他任何具有乘积累加运算 (MAC) 标准扩展的 RV32I 内核上运行。
再举一个例子,在 Seeed Technology 的 114991684 Sipeed MAXIX-I RISC-V SoC 模块中,RISC-V 内核名称为 RV64IMAFDC。该内核具有 64 位指令集,实现了整数乘除运算,提供原子指令,具有单精度和双精度浮点运算能力,并支持压缩指令。为该处理器开发的代码应该能在任何具有相同内核名称的 RISC-V 处理器上运行,但在外设的存储器映射等方面可能需要调整。
结语
有了 RISC-V 命名规范,用户便可以信心满满地开始试验这种功能强大的架构。通过匹配内核代码,用户可确信他们在一种处理器上的编程工作能够方便地移植到其他 RISC-V 处理器。
要开始此试验,一种可取的做法是首先查阅 RISC-V 指南,其中简要介绍了几种不同的 RISC-V 评估板的初始设置和使用。
Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum