Arduino 环境中的 FPGA:使用 Alorium 的 Snō 模块支持预配置和定制 IP
投稿人:DigiKey 北美编辑
2019-05-01
当固件在微控制器或微处理器上的运行速度过慢时,现场可编程门阵列 (FPGA) 可解决实时嵌入式设计的硬件问题。同时,FPGA 还具有外设灵活性。然而,要使用 FPGA,设计工程师就需要学习全新的编程语言(通常为 Verilog 或 VHDL)以及全新的开发流程来生成 FPGA 比特流,而且可能需要投入大量资金用于购买 FPGA 开发板。
由于这些障碍,尽管 FPGA 是设计工具箱中非常有用的工具,但许多设计工程师都不愿意使用。为帮助他们克服这种心态,一些供应商正在致力于缩短 FPGA 学习曲线。例如,Arduino 推出了 Arduino ABX00022 MKR Vidor 4000 FPGA 开发板(参见“通过 Arduino MKR Vidor 4000 快速轻松地应用 FPGA”)。Arduino MKR Vidor 4000 提供了另一种 FPGA 编程方法,与广受欢迎的 Arduino 集成开发环境 (IDE) 无缝集成,并且可以使用专用 Arduino 库扩展获得 FPGA 级性能。
现在又推出新产品以替代早前的产品,其中就包括 Arduino MKR Vidor 4000 板。Alorium Technology 则开发了一种稍微不同的方法来将 FPGA 性能添加到 Arduino 嵌入式开发环境中。这种方法既支持预配置 IP 块进行 I/O 加速,也支持定制设计的 IP 块。
本文首先简要介绍 FPGA 的传统使用方法,然后深入介绍 Alorium 的 Arduino 兼容型 XLR8R22M08V5U0DI 和 Snō SNOR20M16V3 FPGA 模块。本文将说明 Alorium 如何以全新的理念在 Arduino 环境中使用 FPGA,既支持预配置 IP,又能构建定制 IP,以及设计人员如何开始应用 FPGA 模块。
如何加速 Arduino
现在,全球成千上万的设计人员、工程师、开发人员、DIY 爱好者和创客都在使用 Arduino 开发板系列的不同版本,为各种各样的应用开发嵌入式系统。由于 Arduino 板和 Arduino IDE 的使用和编程方法都非常简单,因此深受欢迎。
随着 Arduino 用户不断将最初的 Arduino 架构推进到更加复杂的应用领域,性能问题开始出现。一部分性能问题是最初的 Arduino 微控制器的 8 位架构过于简单。另一部分问题是当 Arduino 的嵌入式微控制器不具备等效硬件块时,Arduino 软件系统只能通过软件实现大量实时外设。
这一性能问题的一种解决方法是使用功能更强大的微控制器,但软件在实时环境中能做的事情是有限的。一些高速实时外设必须在硬件中实现。此外,虽然也可以使用配备更多硬件外设的微控制器,但适用的外设组合则取决于具体的项目。
对此,微控制器制造商常在一个微处理器系列中提供数十个甚至上百个版本,以此解决对于不同外设组合的需求。然而,这种方法对于 Arduino 等板级产品并不可行,因为必须使用具有足够 I/O 引脚的板载连接器来满足所有需求。尽管现在市面上有很多版本的 Arduino 板,但仍然不足以满足所有嵌入式项目的需求。
FPGA 可满足各种外设组合需求
通过向嵌入式设计人员提供可编程硬件,FPGA 能够满足因项目而异的外设组合需求。为嵌入式微控制器板添加 FPGA 功能的一种简单方法是,将 FPGA 添加到现有设计中。这也是 Arduino 在设计 Arduino MKR Vidor 4000 板时采用的方法。该板结合了 Microchip Technology 的基于 32 位 Arm® Cortex®-M0+ 的 ATSAMD21G18A-AUT SAMD21 低功耗微控制器与 Intel 的 10CL016YU484C6G Cyclone 10 FPGA。
Arduino 专为 MKR Vidor 4000 板向 Arduino IDE 中添加了几个硬件 IP 块。这些外设可由两个主库提供:VidorPeripherals 和 VidorGraphics。当 Arduino 草图(Arduino 用来表示程序或代码单元的名称)中包含相关外设库时,Arduino MKR Vidor 4000 上的 Intel Cyclone 10 FPGA 会自动构建这些硬件 IP 块。目前的外设 IP 块清单包括:
- I2C 端口
- SPI 端口
- UART
- 高频 PWM 控制器
- 高速定时器
- 高速正交解码器
- Adafruit Industries 的 Neopixel 可寻址 RGB 智能 LED 控制器
其中一些外设(例如 I2C 和 SPI)已经作为软件 IP 块用于早前的 Arduino 板。这些早期软件实现与 Arduino MKR Vidor 4000 板的 FPGA 上实现的等效 IP 块的区别在于,FPGA 版本的外设性能更好。例如,每个 I2C 和 SPI 实例化都是通过板上 FPGA 内部的独立可编程硬件块实现的。因此,实例化若干个这样的串行端口时没有性能损失。
通过以 FPGA 硬件实现外设块,并借助 Arduino 草图编写人员已经熟悉的相同库机制使其可用,Arduino MKR Vidor 4000 板简化了 FPGA 的使用。无需学习 VHDL 或 Verilog 之类新的硬件描述语言 (HDL)。实际上,对于程序员而言,基于 FPGA 的外设与任何其他 C++ 对象并无二致。Arduino 计划日后添加更多此类硬件 IP 块外设。
然而,Arduino MKR Vidor 4000 板与通用的 FPGA 开发板仍有所不同,因为它不支持使用 HDL 代码对板载 Cyclone 10 FPGA 直接编程。Arduino 正计划使用 Intel 面向 FPGA 的 Quartus HDL 开发工具,允许更多高级用户通过 Arduino MKR Vidor 4000 板的 FPGA 来实现更多用途。
Alorium 迈出下一步
对于 Arduino 兼容型 XLR8R22M08V5U0DI 和 SNOR20M16V3 Snō FPGA 开发板,Alorium 已通过 OpenXLR8 方法和 Xcelerator Block (XB) 迈出了这一步(图 1 和图 2)。这两款板基于 Intel MAX 10 FPGA 系列的不同版本构建,该系列集成有闪存配置存储器。XLR8 结合了 Intel 10M08SAU169C8G MAX 10 与 8 位 ATmega328 指令集兼容型微控制器。它的外形尺寸与最初的 Arduino Uno 开发板相同,因此与很多 Arduino Shield 和配件兼容。
图 1:Alorium Technology 的 XLR8R22M08V5U0DI 开发板结合了 Intel MAX 10 FPGA 与 8 位 ATmega328 指令集兼容型微控制器,全部集成在一个 Arduino Uno 外形尺寸中。(图片来源:Alorium Technology)
Alorium Snō FPGA 开发板的尺寸相对小得多,该模块尺寸规格为 0.7 x 1.7 英寸,见图 2。尽管 Snō FPGA 开发板的物理尺寸更小,但它集成了 Intel MAX 10 FPGA 的更高版本,配备的逻辑单元也多出一倍:10M16SAU169C8G MAX 10 FPGA 有 16K,而 XLR8 板上的 10M08 器件只有 8K。前者的 I/O 引脚也是后者的两倍多(32 个,对比 XLR8 板的 14 个)。
图 2:与 XLR8 开发板一样,Alorium Technology 的 Snō FPGA 开发板也结合了 8 位 ATmega328 指令集兼容型微控制器与 Intel MAX 10 FPGA — 该开发板采用的是 10M16SAU169C8G FPGA。不过,Snō FPGA 开发板的尺寸规格小得多。(图片来源:Alorium Technology)
Alorium 还提供了 SNOMAKRR10 分线板,可将 Snō FPGA 模块转换为稍大的 Arduino 外形尺寸板,配备 USB 端口和来自 FPGA 的附加 I/O 分线引脚。Snō FPGA 模块的一些引脚连到与 Arduino 兼容的 SnōMAKR 分线板扩展排针,而其他引脚连到 USB 连接器对面、沿开发板边缘分布的一排附加针座(图 3)。
图 3:Alorium 的 SNOMAKRR10 分线板可以将该公司的 Snō FPGA 开发板转换为与 Arduino 兼容的外形尺寸,配备 USB 端口和板载稳压器,因而使用 USB 电缆就能直接为开发板供电。(图片来源:Alorium Technology)
XLR8 和 Snō FPGA 开发板都在一个芯片 — Intel MAX 10 FPGA 中实现 8 位微控制器及其硬件外设。图 4 图解说明了实现方法。
图 4:XLR8 和 Snō FPGA 开发板都在 MAX 10 FPGA 中以软内核方式实现 Atmel AVR 兼容型微控制器。(图片来源:Alorium Technology)
AVR 兼容型微控制器内核(图 4 左下部分)与最初 Arduino 开发板中使用的 Atmel ATmega328 8 位 AVR 微控制器相同。然而,Alorium 的 AVR 微控制器是以 FPGA 中的软内核方式实现,而不是另载于独立芯片之上。
图 4 中,该微控制器内核上方共有五个 Alorium XB(XB1 至 XB5)。XB 是通过 FPGA 的片上资源实现的 IP 块。AVR 微控制器可通过可寻址寄存器接口与这些片上 XB 进行通信。XLR8 和 Snō 开发板随附了预安装的 XB(也在 GitHub 中提供),它们相当于 Arduino 开发人员经常需要使用的外设,包括:
请注意,上面列出的最后一种 XB 其实并不是 I/O 外设块,而是浮点数学加速器。XB 可以是任何类型的硬件加速器,而不只局限于 I/O。
选取任何块
XLR8 和 Snō FPGA 开发板都可现场更新,方法是选择不同的 XB(或多个同类 XB),使用 Alorium 的 OpenXLR8 开发流程在 FPGA 中实例化。开发人员也可以使用 Alorium 的 OpenXLR8 流程构建定制 Xcelerator Block(图 5)。
图 5:通过 Alorium 的 OpenXLR8 开发流程,设计人员可以使用 Intel 的 Quartus Prime 设计工具构建新的硬件块,并将其添加到 Arduino IDE。(图片来源:Alorium Technology)
目前,要构建定制的 XB,设计人员必须具备 Verilog 或 VHDL 硬件描述语言的应用知识,并且熟悉 Intel Quartus FPGA 工具套件 — 尤其是 Quartus Prime Lite Edition 17.1 版和 Mentor Graphics 的 ModelSim 仿真工具。HDL 对于 FPGA 开发必不可少,因为它允许设计人员以一种标准的、定义完善的方式来表达多个任务的并行执行。C 和 C++ 等高级语言 (HLL) 实质上是顺序语言。
HLL 编译器获取 HLL 源代码,将其转换成一长串机器指令序列,通常一次只能执行一个指令。这也是 FPGA 比处理器快得多的原因所在 — FPGA 能够同时执行数千个任务,只要 FPGA 足够大。有一些 HLL 编译器能够将 C 或 C++ 编写的代码转换为 HDL,然后由常规的 FPGA 工具处理,但目前 Alorium 的 OpenXLR8 设计流程并不包括这些 HLL 编译器。
然而,一旦使用 HDL 和 FPGA 开发工具设计并调试了 XB,即可像任何其他 Arduino 库块一样在 Arduino IDE 中使用。目前,Alorium 也在为 Arduino IDE 库开发更多的 XB。
总结
在构建各自的 FPGA 开发板方面,Arduino 和 Alorium Technology 公司都认识到设计人员越来越多地需要这些经济实惠的开发板提供更多的嵌入式性能。尽管两家公司采取的策略虽有所不同,但最终目标却别无二致:努力让更多嵌入式开发人员更方便地使用 FPGA。在最基础的层面上,Arduino 和 Alorium 的方法让硬件设计就像选取块并运行脚本一样简单。
目前,完整的设计流程尚不够简单。Arduino 尚未向 HDL 开发人员开放完整的 FPGA 开发流程。虽然 Alorium 的设计流程确实包括 HDL 设计,但要求开发人员必须具备 Verilog 或 VHSL FPGA 设计语言和工具的知识。
不过,这些产品已将大门开启,至少在理论上可以利用 C 和 C++ 硬件编译器等其他 FPGA 开发方式。届时,将可以通过使用 Alorium Technology 和 Arduino 开发的简单方法将这些功能添加到 Arduino IDE 中,充分发挥 FPGA 的性能。
免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。