最近在做数字逻辑电路与系统的实验和课程设计,原本对硬件和电路不感兴趣的我对 FPGA 产生了一点兴趣,特别是学校发的 DE1-SoC 开发板功能很强大,几番资料查询后更是感觉打开了新世界……接下来就对 FPGA 开发中涉及的几点概念进行说明。

MCU

MCU 全称是 Micro Control Unit,原本概念很广,现在一般指单片机,最典型的 51 和 STM32 都是 MCU。FPGA 上是可以集成 MCU 的,用来实现特殊的功能。

IP 核

IP软核一般指的是用硬件描述语言描述的功能块,不涉及具体电路元件实现,软核的代码直接参与设计的编译流程,就像我们自己编写的HDL代码一样。

IP硬核是以经过完全的布局布线的网表形式提供的,由于不参与设计的编译流程,因此它的性能具有很强的可预见性,并且保密性好,但移植性差。

Nios

Nios 是一个精简指令集的处理器(架构)系列,专用于 Intel/Altera 公司的 FPGA 产品。

和一般的处理器不同的是,Nios 是一个软核处理器。可以理解为,在需要时人为在 FPGA 上划出一部分资源,使其成为一颗处理器,而不需要处理器时该部分资源又和普通的 FPGA 一致。不仅如此,Nios 的结构和组件可以根据需要灵活增添,因而英特尔号称 Nios II 是 “全球最通用的处理器”。

至于为什么 FPGA 需要 Nios,是因为一些功能仅靠 HDL 设计电路来实现比较困难,Nios 作为片上的处理器可以更好地负责复杂的逻辑,同时和外围的电路相结合发挥更大的作用。

Nios 上的软件可以基于 C,C++ 或汇编语言开发,Nios 提供相应的库函数,简化了开发难度。甚至现在也有 Nios 架构的 Linux 内核,可以在上面运行 Linux。

需要注意的是,由于 Nios 使用的是 FPGA 本身的资源,所以简单的功能用 Nios 实现比较浪费,而且其性能很低。例如 Cyclone V GX 即使使用 Nios II /f 快速型软核,以 170 MHz 运行时 DMIPS 仅为 192,按比例算仍然远低于 Arm Cortex-A5。

HPS

HPS(Hard Processor System,硬核处理器系统)是指在 FPGA 上集成的硬核处理器,通常和 FPGA 芯片之间用高速总线连接,并且能够通过 HPS - FPGA Bridge 实现访问 FPGA 的资源,也能使 FPGA 访问到连接到 HPS 的资源。

以 DE1-SoC 开发板为例,其集成了 800MHz 双核 ARM Cortex-A9 处理器,以及相应的资源,例如 1G DDR3 内存、SD 卡槽、千兆网卡、USB 插槽等。

在 FPGA 上集成 HPS 的主要作用在于,可以使用 HPS 完成复杂的工作,同时和 FPGA 的灵活电路设计相配合,实现更强大的功能。这一点和 Nios 相似,但也说明了在拥有 HPS 或者集成了 MCU 的板子上,Nios 稍显鸡肋。

另外举个栗子,在 ARM 的处理器上可以跑人工智能/挖矿等程序,如果对其中涉及的重要算法使用 FPGA 专门设计电路实现,就可以大大提高计算性能,目前云计算厂商推出的带 FPGA 卡的云服务器,就有这种优势。(没有特别了解过,个人理解是相同的原理)

小结

FPGA 本身是一个可变的逻辑器件,在 “编程” 的时候需要纠正很多写软件的习惯和概念,尤其要打好数电基础,不然写出来的代码会 “貌似” 无比正确,但一综合就各种报错。

另外就是,使用 FPGA 应该明白自己的目的是什么,不要偏差太远。特别是,现在功能比较完善的开发板都有软核资源甚至硬核集成,一开始就应该根据需求权衡利弊,选择恰当的技术路线。至于具体的选择上,网上冲浪时笔者看到了一句话,“CPU是串行的,本身 FPGA 的电路是并行的,用 Nios 把并行的改成串行的,反而更差”,可能这就是 Nios 或者 HPS 和 FPGA 本身的差别所在,我们要权衡的是实现复杂功能的易行性和对性能的损失牺牲等等。想到这里忽然觉得有些哲学的意思了。

参考资料

[1] DE1-SoC_User_manual
[2] Terasic - DE Boards - Cyclone - DE1-SoC Board
[3] Cyclone V SoC GSRD | Documentation | RocketBoards.org
[4] Nios® V 处理器 - 英特尔® FPGA (intel.cn)