几乎所有的电子设计师和嵌入式系统开发人员都听过现场可编程门阵列(FPGA)。对于实际的FPGA器件,设计人员和开发人员都知道它拥有可编程架构,能够对其进行配置来而执行想要的功能,但他们的了解可能仅限于此。同样,当涉及创建一个可以在FPGA上实现的设计时,他们可能听过硬件描述语言(HDL)和寄存器转换级电路(RTL)之类的术语,但可能并未充分理解它们的含义。
与Verilog或VHDL相似,HDL能让FPGA设计人员描述设计意图,正如软件开发人员使用C或者C++等编程语言一样。理解HDL的方式之一就是它可以用来描述同时发生的事物,这也是现实世界中硬件工作的方式。相比之下,软件编程语言通常用于描述顺序发生的事。
同时,RTL是常用于逻辑综合引擎输入的抽象级电路。该工具将RTL转换到逻辑元件和互连网络,然后在FPGA的可编程逻辑内实现。逻辑综合引擎可以比作软件开发者的编译器,后者采用高级程序作为输入,并将其转换为由处理器执行的机器代码。
FPGA的可编程结构可用于构建硬件加速器,以低功耗执行数据处理任务。可编程结构经过配置后可创建一个或多个更适合处理决策任务的软核处理器,这些处理器还可以控制硬件加速器,包括向其提供数据并根据结果采取相应措施。
RISC-V就是这样一种处理器,它是一种开源指令集架构(ISA),可以通过开源许可免费获得。RISC-V开源硬件概念的创造者受到Linux开源软件成功的启发。RISC-V的一大优势是在各类设计实现中都有出色的软件兼容性,并且目前这些处理器的使用急剧增长。
然而,对于想要使用这种处理器的非FPGA设计人员而言,问题在于他们缺乏有关FPGA设计语言、工具和流程的专业知识。为了解决这个问题,低功耗可编程FPGA的领先供应商莱迪思半导体开发了名为Lattice Propel™的工具,这是一款基于图形用户界面(GUI)的设计环境,任何用户(无论是否具有FPGA专业知识)都能使用它以拖放的方式快速设计基于RISC-V处理器的系统。
Propel输出的是RTL文件,可以发送到综合引擎,生成可载入FPGA的配置文件。之后软件开发人员可以在基于FPGA的RISC-V设计实现上运行他们的RISC-V可执行文件,正如在其他任何RISC-V处理器上运行一样。莱迪思为其FPGA客户免费提供RISC-V IP核。
基于FPGA的解决方案
数据处理要求有合适的计算引擎。开发者拥有诸多不同选择,包括微处理器(MPU)、微控制器(MCU)、图形处理器(GPU)、FPGA和SoC等器件。
MPU和MCU在执行决策任务时效率很高,但是在实现原始数据处理算法时,无论是处理时间还是功耗都不太理想。SoC能以最低的功耗实现最高性能,但缺点是开发起来价格昂贵、耗费资源且十分耗时,并且在此类芯片架构中实现的算法基本上都是固定无法更改的,而系统采用的协议和标准会不断变化,因此会带来很多问题。
某些数据处理任务(包括许多AI/ML算法)非常适合并行处理。FPGA的可编程架构(图1a)经配置可实现硬件加速器(HA)功能,以大规模并行方式执行任务(图1b),从而显著提高性能,同时降低功耗。
许多情况下还需要数据协处理功能,使用中央处理器(CPU)来强化硬件加速器,处理器可以执行高级决策和控制功能。不同于直接在芯片中实现的硬核CPU,FPGA的可编程架构能够实现软核CPU以及相关的总线结构(地址、数据、控制)和任何所需的外设IP功能(图1c)。
图1. 结构化总线的方法广泛适用于各类应用,包括嵌入式视觉、安防和人工智能。
需要注意的是,根据FPGA器件和用户的要求,额外的可编程逻辑功能和外围通信功能(例如USB、MIPI、I2C、SPI、CAN和UART)可以通过硬核和/或软核实现。文章篇幅有限此处不作赘述。
使用软核CPU有诸多优点,包括能够配置处理器的操作及许多可选功能,如动态内存访问(DMA)控制器,从而对其精确调整,高效地满足目标应用的要求。此外,如有需要,可以配置可编程结构实现其他外设IP功能。如在人工智能应用中,可以使用可编程逻辑资源来创建简单的人工神经网络,用于推理之类的任务。
RISC-V
如前所述,RISC-V是基于已有的精简指令集计算机(RISC)原则的开源指令集架构,可通过开源许可获得。此外,许多公司目前提供支持RISC-V的RISC-V硬核或开源操作系统,并且几种主流的软件工具链均支持该指令集。
RISC-V的模块化设计包括基础指令集和其他的扩展指令集。在行业、技术界和教育机构的共同努力下,两者已得到长足的发展。基础指令集规定了指令(及其编码)、控制流、寄存器(及其大小)、存储器和寻址、逻辑(即整数)操作以及辅助功能。仅基础指令集就能实现具有全面软件支持(包括通用编译器)的通用计算机。
还可以通过可选拓展指令集实现额外功能,从而让设计人员灵活选择其应用所需的功能。RISC-V定义了许多扩展指令集,包括A(原子)、F(单精度浮点)、D(双精度浮点)、Q(四精度浮
点)和C(压缩的16位指令以减少代码尺寸,用于存储空间有限的系统)。上述指令集均可灵活选择。
图2. 莱迪思是首个支持RISC-V的基于闪存和SRAM的FPGA供应商。
与作为专用处理器的硬核实现相比,基于FPGA的软核RISC-V拥有的巨大优势在于FPGA可重新配置的巨大潜力能够满足各种扩展需求。
莱迪思RISC-V软核IP套件拥有32位RISC-V处理器核以及可选的定时器和可编程中断控制器(PIC)子模块。该CPU核支持RV32I指令集、外部中断和符合JTAG IEEE 1149.1规范的调试。
定时器子模块是一个64位实时计数器,它将实时寄存器与另一个寄存器进行比较以触发定时器中断。PIC子模块最多将八个外部中断输入聚合为一个外部中断。处理器核通过使用行业标准的32位AHB-L总线接口访问子模块寄存器。
莱迪思Propel
许多嵌入式系统的设计人员都对使用FPGA很感兴趣,但是一想到要使用传统的FPGA设计工具和HDL就望而却步。为了解决这一问题,莱迪思Propel采用了基于图形用户界面(GUI)的设计环境,任何用户(无论是否具有FPGA专业知识)都能使用其拖放的设计方式快速构建和配置基于RISC-V处理器的设计。
Propel输出的是使用Verilog HDL语言的RTL文件,可以将其发送到综合引擎,生成可载入FPGA的配置文件。该配置文件可用于莱迪思CrossLink™-NX(面向嵌入式视觉应用)、Certus™-NX(通用FPGA)以及MachXO3D™和Mach™-NX FPGA(安全系统控制)系列产品。FPGA配置完成后,软件开发人员可以在基于FPGA的RISC-V设计实现上运行他们的RISC-V可执行文件,正如在其他任何RISC-V处理器上运行一样。
Lattice Propel由两个部分组成。首先是Propel Builder,它提供图形化的拖放界面,让用户选择IP模块并将其连接在一起。这些IP模块包括RISC-V处理器(带有可选的定时器和中断控制器)、AMBA总线结构、接口、存储器、输入/输出(I/O)等。用户还可以方便地在线升级现有IP模块和获得新的IP模块 。
图3. Propel界面直观、易于使用、功能强大
除了拖放IP实例化,Propel Builder还能自动进行引脚连接,通过向导配置和设置参数以及采用按构造逐步校正进行IP集成。
其次是莱迪思Propel SDK(软件开发套件),可提供无缝的软件开发环境。它拥有行业标准的集成开发环境(IDE)和工具链。SDK还为Propel Builder定义的系统提供软件/硬件调试功能以及软件库和板级支持包(BSP)。
需要注意的重要一点是,Propel可以很好地对接下游工具,并且它也是一个独立的程序,且其大小仅为0.5 GB,可以快速轻松地下载和安装。同样令人感兴趣的是,Propel的所有命令都可以用Tcl编写,从而提高了设计效率并将其快速集成到用户自己的设计环境中。
图4. 无论是简单的“Hello World”应用还是复杂的嵌入式控制和数据处理系统,Propel都能让用户快速完成设计
对于硬件设计,Propel是那些需要FPGA优势但缺乏FPGA硬件设计经验的团队的理想选择。此外,如果团队成员确实具有FPGA设计经验,那么他们还可以根据需要对设计做更为精确的控制。对于软件设计,Propel提供行业标准的C/C ++开发环境。软件开发人员似乎更多地使用现成的微控制器。
设计人员可以使用Propel在CrossLink-NX、Certus-NX和Mach-NX FPGA中快速轻松地生成基于RISC-V软软核的处理器系统,从而提供复杂的视频处理、系统控制和系统安全功能,其延迟远远低于通过外部独立处理器实现的设计。
总结
除了拥有以低功耗执行高性能数据处理任务的逻辑功能和硬件加速器外,FPGA内部的可编程架构还可用于实现一个或多个更适合决策任务的软核处理器,以及用于诸如硬件加速器之类的控制功能,包括向它们提供数据并根据结果采取措施。
RISC-V就是这样一种处理器,它是一种开源指令集架构(ISA),可以通过开源许可免费获得。莱迪思是首个支持RISC-V以及为其FPGA客户免费提供RISC-V IP核的基于闪存和SRAM的FPGA供应商。
对于想要使用这种处理器的非FPGA设计人员而言,问题在于他们缺乏有关FPGA设计语言、工具和流程的专业知识。为了解决这个问题,莱迪思提供了Propel来简化设计流程,让开发人员能够快速设计基于RISC-V处理器的系统。