0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Arduino 环境中的 FPGA:使用 Alorium 的 Snō 模块支持预配置和定制 IP

丫丫119 来源:未知 作者:Steve Leibson 2019-08-27 10:29 次阅读

当固件在微控制器微处理器上的运行速度过慢时,现场可编程门阵列 (FPGA) 可解决实时嵌入式设计的硬件问题。同时,FPGA 还具有外设灵活性。然而,要使用 FPGA,设计工程师就需要学习全新的编程语言(通常为 Verilog 或 VHDL)以及全新的开发流程来生成 FPGA 比特流,而且可能需要投入大量资金用于购买 FPGA 开发板。

由于这些障碍,尽管 FPGA 是设计工具箱中非常有用的工具,但许多设计工程师都不愿意使用。为帮助他们克服这种心态,一些供应商正在致力于缩短 FPGA 学习曲线。例如,Arduino推出了 ArduinoABX00022 MKR Vidor 4000FPGA 开发板(参见“通过 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ōSNOR20M16V3FPGA 模块。本文将说明 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-AUTSAMD21 低功耗微控制器与Intel的10CL016YU484C6GCyclone 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)。这两款板基于 IntelMAX 10 FPGA 系列的不同版本构建,该系列集成有闪存配置存储器。XLR8 结合了 Intel10M08SAU169C8GMAX 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 的更高版本,配备的逻辑单元也多出一倍:10M16SAU169C8GMAX 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 开发板都在一个芯片 — IntelMAX 10FPGA 中实现 8 位微控制器及其硬件外设。图 4 图解说明了实现方法。

图 4:XLR8 和 Snō FPGA 开发板都在 MAX 10 FPGA 中以软内核方式实现AtmelAVR 兼容型微控制器。(图片来源:Alorium Technology)

AVR 兼容型微控制器内核(图 4 左下部分)与最初 Arduino 开发板中使用的 AtmelATmega3288 位 AVR 微控制器相同。然而,Alorium 的 AVR 微控制器是以 FPGA 中的软内核方式实现,而不是另载于独立芯片之上。

图 4 中,该微控制器内核上方共有五个 Alorium XB(XB1 至 XB5)。XB 是通过 FPGA 的片上资源实现的 IP 块。AVR 微控制器可通过可寻址寄存器接口与这些片上 XB 进行通信。XLR8 和 Snō 开发板随附了预安装的 XB(也在 GitHub 中提供),它们相当于 Arduino 开发人员经常需要使用的外设,包括:

正交解码

伺服电机控制

NeoPixel RGB LED 控制

12 位增强型 ADC

浮点数学

请注意,上面列出的最后一种 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 的性能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593159
  • SNO2
    +关注

    关注

    0

    文章

    3

    浏览量

    8010
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184830
收藏 人收藏

    评论

    相关推荐

    Arduino环境中的FPGA模块支持配置定制IP

    现在,全球成千上万的设计人员、工程师、开发人员、DIY 爱好者和创客都在使用 Arduino 开发板系列的不同版本,为各种各样的应用开发嵌入式系统。由于 Arduino 板和 Arduino IDE 的使用和编程方法都非常简单,
    的头像 发表于 08-14 10:44 8617次阅读
    <b class='flag-5'>Arduino</b><b class='flag-5'>环境</b>中的<b class='flag-5'>FPGA</b>:<b class='flag-5'>模块</b><b class='flag-5'>支持</b>预<b class='flag-5'>配置</b>和<b class='flag-5'>定制</b><b class='flag-5'>IP</b>

    采用LabVIEW FPGA模块和可重新配置I/O设备开发测量与控制应用

    FPGA技术的灵活性整合到测量和控制系统当中。您可以使用LabVIEW 这一专门为测量和自动化控制应用开发所设计的图形化开发环境,对嵌入在NI R 系列RIO 设备FPGA 进行
    发表于 07-23 08:15

    使用FPGAIP Core实现定制缓冲管理

    本帖最后由 eehome 于 2013-1-5 09:45 编辑 在通信网络系统,流量管理的核心是缓存管理、队列管理和调度程序。本文结合使用FPGAIP Core阐述缓存管理的结构
    发表于 11-09 18:43

    例说FPGA连载31:PLL例化配置与LED之PLL的IP配置

    `例说FPGA连载31:PLL例化配置与LED之PLL的IP配置特权同学,版权所有配套例程和更多资料下载链接:http://pan.baidu.com/s/1c0nf6Qc 本实例
    发表于 09-12 17:31

    求助: Arduino 连接网络模块怎么PING上位机IP

    求助 Arduino 连接网络模块怎么PING上位机IP? 网上都是介绍设置好后上位机电脑PING Arduino 终端,但我想Arduino
    发表于 06-14 09:13

    367-基于ZYNQ XC7Z100 FFG 900的高性能计算模块解决方案

    应用进行快速原型设计以实现优化·硬件、设计工具、 IP、以及验证参考设计·演示嵌入式设计,面向视频通道·存储接口·1GB DDR3 组件存储·1GB DDR3 SODIM 存储器·支持包含 Dual
    发表于 12-19 15:06

    一种基于FPGA的可配置FFT IP核实现设计

    摘要针对FFT算法基于FPGA实现可配置IP核。采用基于流水线结构和快速并行算法实现了蝶形运算和4k点FFT的输入点数、数据位宽、分解基自由配置。使用Verilog语言编写,利用Mo
    发表于 07-03 07:56

    FPGA在线配置模块和自动测试模块实现过程

    芯片、FPGA1的数据接口模块配置模块、测试模块和被测F
    发表于 05-14 07:00

    如何使用FPGAIP Core实现定制缓冲管理?

    如何使用FPGAIP Core实现定制缓冲管理?
    发表于 04-29 06:01

    如何在Arduino IDE上配置好NodeMCU的开发环境

    0. 环境与预备工作Arduino IDE + NodeMCU + PIR模块 + Firefox已经在Arduino IDE上配置好Nod
    发表于 11-01 09:17

    Arduino-IDE配置ESP32开发环境的正确方式

    Arduino-IDE配置ESP32-CAM开发环境踩过的那些坑Arduino-IDE配置ESP32开发
    发表于 01-25 07:40

    怎样去安装和配置Arduino IDE开发环境

    目录一、安装和配置Arduino IDE开发环境1.Arduino 简介2.软件安装及配置二、编译及烧录1、
    发表于 01-26 07:39

    IP例化和几个基于FPGA芯片实现的Demo工程

    本文接续上一篇《FPGA杂记基础篇》,继续为大家分享IP例化和几个基于FPGA芯片实现的Demo工程。IP例化IP即是一个封装好的
    的头像 发表于 12-24 12:58 1073次阅读

    FPGA-串口通信模块(含IP核)

    ARTIX-xlinx 版本FPGA 串口通信模块(含IP核)
    发表于 06-20 11:07 12次下载

    Arduino 世界中的 FPGA:将 AloriumSnō 模块用于预配置和自定义 IP

    发表于 11-25 08:32 0次下载
    <b class='flag-5'>Arduino</b> 世界中的 <b class='flag-5'>FPGA</b>:将 <b class='flag-5'>Alorium</b> 的 <b class='flag-5'>Sn</b>ō <b class='flag-5'>模块</b>用于预<b class='flag-5'>配置</b>和自定义 <b class='flag-5'>IP</b>