1.3 基于蜂鸟E203处理器的RISC-V指令扩展技术

一、RISC-V指令集架构

RISC表示精简指令集计算机(Reduced Instruction Set Computer, RISC),RISC-V指令集架构是一种新兴的指令集架构,它源自加州大学伯克利分校。RISC-V架构具有精简、模块化以及可扩展等特点,开发人员可以通过组合或扩展不同的指令集,几乎可以构建适用于各个领域的微处理器。相比于传统的指令集架构,RISC-V架构主要具有以下特点:

(1)模块化的架构:相比于x86与ARM等其他成熟的商业架构,RISC-V架构最大的不同在于它是一个模块化的架构。RISC-V架构不仅结构精简,其不同的部分还能以模块化的方式组织在一起,从而可以通过一套统一的架构满足不同的应用。例如,针对小面积、低功耗的嵌入式场景,用户可以选择RV32IC组合的指令集,仅使用机器模式;而针对高性能应用操作系统场景,则可以选择诸如RV32IMFDC的指令集,使用机器模式与用户模式两种模式。RV32IC表示支持32位地址空间与整数指令,以及支持压缩指令。常见的指令模块包括M/A/F/D/C,M表示整数乘法与除法指令,A表示存储器原子操作指令,F表示单精度浮点指令,D表示双精度浮点指令,C表示压缩指令,这些指令模块可以根据实际需求灵活组合。

(2)支持第三方的扩展:除模块化指令子集的可扩展性与可选择性的特点外,RISC-V架构还支持第三方的扩展。用户可以扩展自己的指令子集,RISC-V预留了大量的指令编码空间用于用户的自定义扩展,同时还定义了4条自定义指令供用户直接使用。每条自定义指令都预留了几位的编码空间,因此用户可以直接使用4条自定义指令扩展出几十条自定义指令。

(3)基于RISC-V实现的处理器具有易实现性:x86与ARM架构的指令数繁多,不同架构分支彼此不兼容,而RISC-V架构的指令数目相对较少,且一套指令集支持所有架构。RISC-V架构的基本指令集仅有40余条指令,在此基础上加上其他常用指令子集模块,指令也仅有几十条。此外,RISC-V架构有许多能使设计简化的特性,例如具有规整的指令编码格式和简化的分支跳转指令与静态预测机制,不使用分支延迟槽和指令条件码等,因此,RISC-V架构的处理器具有易实现性,无论硬件设计还是编译器实现均非常简单,而x86和ARM架构的处理器硬件实现复杂度较高。

二、蜂鸟E203处理器核与SoC

蜂鸟E203处理器是由芯来科技公司开发的一款完全免费开源RISC-V处理器,该处理器主要面向低功耗与较小面积的场景,适合应用于物联网领域或其他低功耗场景。相比于其他类型的RISC-V处理器,蜂鸟E203处理器主要有以下特点:

(1)模块化:蜂鸟E203处理器核的设计遵循模块化的原则,将处理器划分为几个主体模块单元,每个单元之间的接口简单清晰,而尽量将盘根错节的关系控制在单元内部,在划分模块单元时还充分考虑到可重用性。

(2)低功耗和小面积:蜂鸟E203处理器核在满足一定性能指标的前提下,以追求低功耗和小面积为第一要义,因此设计中尽可能地复用数据通路以节省面积开销。当在某些细节上存在着时序和面积的冲突时,应选择面积优先策略。蜂鸟E203处理器核的性能不追求极端,由于蜂鸟E203处理器核是一款低功耗的处理器核,因此它在追求性能时,会以面积最小化和结构简单化为前提。

(3)结构简单:蜂鸟E203处理器核的设计遵循结构简单化的原则,在微架构的设计上防止陷入繁复的陷阱,在有选择的情形下优先选用最简单的方案,只有在最关键的场景下才使用复杂的设计方案。

(4)提供了完整的SoC原型验证平台:用户无需花费精力来为蜂鸟E203处理器核构建完整的SoC平台,蜂鸟E203处理器核本身拥有配套的开源SoC,其结构如下图所示。该SoC使用了开源的蜂鸟E203处理器核,且具有丰富的存储资源和外设接口,包括中断控制器、计时器、UART、QSPI和PWM等。此外,蜂鸟E203处理器还提供配套的软件开发环境,为交互式调试工具提供支持。用户可以方便的使用这些配套组件搭建SoC仿真平台和FPGA原型平台,并运行软件程序。

1.3 基于蜂鸟E203处理器的RISC-V指令扩展技术_第1张图片

(5)提供了专门的自定义指令扩展接口:蜂鸟E203处理器核提供了专门的自定义指令扩展接口——NICE (Nuclei Instruction Co-unit Extension)接口,如上图红色部分所示。处理器核在译码阶段识别到自定义指令时,会通过NICE接口的指令请求通道将自定义指令派遣到协处理器单元,协处理器执行完毕后通过反馈通道将执行结果写回。此外,NICE接口中还提供了独立的内存访问通道,使得协处理器具有直接访问系统内存的能力。

三、基于蜂鸟E203处理器的指令扩展方法

为了便于用户对RISC-V指令集进行扩展,RISC-V指令集架构预定义了4组32位自定义指令类型,每种预定义指令均有自己的操作码。蜂鸟E203处理器核使用NICE接口进行协处理器扩展,用户可以将4组预定义指令扩展为NICE接口支持的指令,我们将这类指令简称为NICE指令,NICE指令的编码格式如下图所示。指令的25位至第31位为额外的编码空间,用于编码更多的指令,因此每一组预定义指令可以使用额外编码空间编码出128条指令。

1.3 基于蜂鸟E203处理器的RISC-V指令扩展技术_第2张图片

蜂鸟E203的NICE接口如下图所示,接口包括4个通道,分别是请求通道、反馈通道、存储器请求通道和存储器反馈通道。当主处理器在译码阶段遇到任意一种预定义指令组时,会将指令和源操作数通过请求通道派发给协处理器,协处理器接收指令后做进一步译码并执行指令,执行完毕后通过反馈通道将结果反馈给主处理器。协处理器执行NICE指令时,可以通过存储器请求和反馈通道对主处理器中的数据进行连续读写,且读写过程与执行过程完全独立,具有较高的读写效率。

1.3 基于蜂鸟E203处理器的RISC-V指令扩展技术_第3张图片

基于蜂鸟E203处理器进行指令扩展时需要同时考虑软件层设计和硬件层设计。软件层的设计包括NICE指令的约定和应用层对NICE指令的调用,硬件层设计包括核心运算单元或协处理器的设计。RISC-V架构的汇编代码中调用用户自定义指令需要通过伪指令.insn来实现,通常将NICE指令的调用采用C程序内嵌.insn伪指令的实现方式,并将其封装为接口函数,在后续的应用程序中只需按照C语言的规则进行调用即可。对于R类型指令,.insn的使用格式为:(.insn r opcode, func3, func7, rd, rs1, rs2),其中r表示指令类型为R类型,opcode为操作码,func3表示指令源操作数和目的操作数寄存器索引是否有效,rd、rs1和rs2分别是目的操作数和两个源操作数寄存器索引。在硬件层,需要设计用来执行NICE指令的协处理器,协处理器根据NICE接口规范完成主处理器和协处理器间指令和数据的交互,并根据约定的自定义指令生成控制信号,调用算法单元产生结果,最后将运算结果写入到主处理器中。

相比于各种算法的纯软件实现,利用自定义指令实现不仅能大幅提高执行速度,还能减小代码规模,轻量级嵌入式系统的内存空间一般比较小,不能存储大量的指令和数据,而自定义指令实现方式能很好地解决这个问题。同时,利用自定义指令进行算法实现能降低代码编写难度,减小出错的可能性,提高系统的稳定性。

四、总结

RISC-V是一种模块化、可扩展的开源指令集架构,具有精简设计和易实现性特点。蜂鸟E203是基于RISC-V的低功耗处理器核,采用模块化设计,提供完整SoC平台和NICE接口支持指令扩展。通过NICE接口,用户可在软件层封装自定义指令调用,在硬件层设计协处理器执行指令,从而提高算法执行效率、减小代码规模并增强安全性。这种指令扩展方法特别适合资源受限的嵌入式系统应用。

你可能感兴趣的:(蜂鸟E203处理器,risc-v,嵌入式硬件,算法,学习)