當(dāng)固件在微控制器或微處理器上的運(yùn)行速度過(guò)慢時(shí),現(xiàn)場(chǎng)可編程門陣列 (FPGA) 可解決實(shí)時(shí)嵌入式設(shè)計(jì)的硬件問(wèn)題。同時(shí),F(xiàn)PGA 還具有外設(shè)靈活性。然而,要使用 FPGA,設(shè)計(jì)工程師就需要學(xué)習(xí)全新的編程語(yǔ)言(通常為 Verilog 或 VHDL)以及全新的開(kāi)發(fā)流程來(lái)生成 FPGA 比特流,而且可能需要投入大量資金用于購(gòu)買 FPGA 開(kāi)發(fā)板。
由于這些障礙,盡管 FPGA 是設(shè)計(jì)工具箱中非常有用的工具,但許多設(shè)計(jì)工程師都不愿意使用。為幫助他們克服這種心態(tài),一些供應(yīng)商正在致力于縮短 FPGA 學(xué)習(xí)曲線。例如,Arduino推出了 ArduinoABX00022 MKR Vidor 4000FPGA 開(kāi)發(fā)板(參見(jiàn)“通過(guò) Arduino MKR Vidor 4000 快速輕松地應(yīng)用 FPGA”)。Arduino MKR Vidor 4000 提供了另一種 FPGA 編程方法,與廣受歡迎的Arduino 集成開(kāi)發(fā)環(huán)境(IDE) 無(wú)縫集成,并且可以使用專用 Arduino 庫(kù)擴(kuò)展獲得 FPGA 級(jí)性能。
現(xiàn)在又推出新產(chǎn)品以替代早前的產(chǎn)品,其中就包括 Arduino MKR Vidor 4000 板。Alorium Technology則開(kāi)發(fā)了一種稍微不同的方法來(lái)將 FPGA 性能添加到 Arduino 嵌入式開(kāi)發(fā)環(huán)境中。這種方法既支持預(yù)配置 IP 塊進(jìn)行 I/O 加速,也支持定制設(shè)計(jì)的 IP 塊。
本文首先簡(jiǎn)要介紹 FPGA 的傳統(tǒng)使用方法,然后深入介紹 Alorium 的 Arduino 兼容型XLR8R22M08V5U0DI和 SnōSNOR20M16V3FPGA 模塊。本文將說(shuō)明 Alorium 如何以全新的理念在 Arduino 環(huán)境中使用 FPGA,既支持預(yù)配置 IP,又能構(gòu)建定制 IP,以及設(shè)計(jì)人員如何開(kāi)始應(yīng)用 FPGA 模塊。
如何加速 Arduino
現(xiàn)在,全球成千上萬(wàn)的設(shè)計(jì)人員、工程師、開(kāi)發(fā)人員、DIY 愛(ài)好者和創(chuàng)客都在使用 Arduino 開(kāi)發(fā)板系列的不同版本,為各種各樣的應(yīng)用開(kāi)發(fā)嵌入式系統(tǒng)。由于 Arduino 板和 Arduino IDE 的使用和編程方法都非常簡(jiǎn)單,因此深受歡迎。
隨著 Arduino 用戶不斷將最初的 Arduino 架構(gòu)推進(jìn)到更加復(fù)雜的應(yīng)用領(lǐng)域,性能問(wèn)題開(kāi)始出現(xiàn)。一部分性能問(wèn)題是最初的 Arduino 微控制器的 8 位架構(gòu)過(guò)于簡(jiǎn)單。另一部分問(wèn)題是當(dāng) Arduino 的嵌入式微控制器不具備等效硬件塊時(shí),Arduino 軟件系統(tǒng)只能通過(guò)軟件實(shí)現(xiàn)大量實(shí)時(shí)外設(shè)。
這一性能問(wèn)題的一種解決方法是使用功能更強(qiáng)大的微控制器,但軟件在實(shí)時(shí)環(huán)境中能做的事情是有限的。一些高速實(shí)時(shí)外設(shè)必須在硬件中實(shí)現(xiàn)。此外,雖然也可以使用配備更多硬件外設(shè)的微控制器,但適用的外設(shè)組合則取決于具體的項(xiàng)目。
對(duì)此,微控制器制造商常在一個(gè)微處理器系列中提供數(shù)十個(gè)甚至上百個(gè)版本,以此解決對(duì)于不同外設(shè)組合的需求。然而,這種方法對(duì)于 Arduino 等板級(jí)產(chǎn)品并不可行,因?yàn)楸仨毷褂镁哂凶銐?I/O 引腳的板載連接器來(lái)滿足所有需求。盡管現(xiàn)在市面上有很多版本的 Arduino 板,但仍然不足以滿足所有嵌入式項(xiàng)目的需求。
FPGA 可滿足各種外設(shè)組合需求
通過(guò)向嵌入式設(shè)計(jì)人員提供可編程硬件,F(xiàn)PGA 能夠滿足因項(xiàng)目而異的外設(shè)組合需求。為嵌入式微控制器板添加 FPGA 功能的一種簡(jiǎn)單方法是,將 FPGA 添加到現(xiàn)有設(shè)計(jì)中。這也是 Arduino 在設(shè)計(jì) Arduino MKR Vidor 4000 板時(shí)采用的方法。該板結(jié)合了Microchip Technology的基于 32 位Arm?Cortex?-M0+ 的ATSAMD21G18A-AUTSAMD21 低功耗微控制器與Intel的10CL016YU484C6GCyclone 10 FPGA。
Arduino 專為 MKR Vidor 4000 板向 Arduino IDE 中添加了幾個(gè)硬件 IP 塊。這些外設(shè)可由兩個(gè)主庫(kù)提供:VidorPeripherals和VidorGraphics。當(dāng) Arduino 草圖(Arduino 用來(lái)表示程序或代碼單元的名稱)中包含相關(guān)外設(shè)庫(kù)時(shí),Arduino MKR Vidor 4000 上的 Intel Cyclone 10 FPGA 會(huì)自動(dòng)構(gòu)建這些硬件 IP 塊。目前的外設(shè) IP 塊清單包括:
SPI 端口
高頻 PWM 控制器
高速定時(shí)器
高速正交解碼器
Adafruit Industries的Neopixel可尋址 RGB 智能 LED 控制器
其中一些外設(shè)(例如 I2C 和 SPI)已經(jīng)作為軟件 IP 塊用于早前的 Arduino 板。這些早期軟件實(shí)現(xiàn)與 Arduino MKR Vidor 4000 板的 FPGA 上實(shí)現(xiàn)的等效 IP 塊的區(qū)別在于,F(xiàn)PGA 版本的外設(shè)性能更好。例如,每個(gè) I2C 和 SPI 實(shí)例化都是通過(guò)板上 FPGA 內(nèi)部的獨(dú)立可編程硬件塊實(shí)現(xiàn)的。因此,實(shí)例化若干個(gè)這樣的串行端口時(shí)沒(méi)有性能損失。
通過(guò)以 FPGA 硬件實(shí)現(xiàn)外設(shè)塊,并借助 Arduino 草圖編寫(xiě)人員已經(jīng)熟悉的相同庫(kù)機(jī)制使其可用,Arduino MKR Vidor 4000 板簡(jiǎn)化了 FPGA 的使用。無(wú)需學(xué)習(xí) VHDL 或 Verilog 之類新的硬件描述語(yǔ)言 (HDL)。實(shí)際上,對(duì)于程序員而言,基于 FPGA 的外設(shè)與任何其他 C++ 對(duì)象并無(wú)二致。Arduino 計(jì)劃日后添加更多此類硬件 IP 塊外設(shè)。
然而,Arduino MKR Vidor 4000 板與通用的 FPGA 開(kāi)發(fā)板仍有所不同,因?yàn)樗恢С质褂?HDL 代碼對(duì)板載 Cyclone 10 FPGA 直接編程。Arduino 正計(jì)劃使用 Intel 面向 FPGA 的Quartus HDL 開(kāi)發(fā)工具,允許更多高級(jí)用戶通過(guò) Arduino MKR Vidor 4000 板的 FPGA 來(lái)實(shí)現(xiàn)更多用途。
Alorium 邁出下一步
對(duì)于 Arduino 兼容型 XLR8R22M08V5U0DI 和 SNOR20M16V3 Snō FPGA 開(kāi)發(fā)板,Alorium 已通過(guò) OpenXLR8 方法和 Xcelerator Block (XB) 邁出了這一步(圖 1 和圖 2)。這兩款板基于 IntelMAX 10 FPGA 系列的不同版本構(gòu)建,該系列集成有閃存配置存儲(chǔ)器。XLR8 結(jié)合了 Intel10M08SAU169C8GMAX 10 與 8 位 ATmega328 指令集兼容型微控制器。它的外形尺寸與最初的Arduino Uno開(kāi)發(fā)板相同,因此與很多 Arduino Shield 和配件兼容。
圖 1:Alorium Technology 的 XLR8R22M08V5U0DI 開(kāi)發(fā)板結(jié)合了 Intel MAX 10 FPGA 與 8 位 ATmega328 指令集兼容型微控制器,全部集成在一個(gè) Arduino Uno 外形尺寸中。(圖片來(lái)源:Alorium Technology)
Alorium Snō FPGA 開(kāi)發(fā)板的尺寸相對(duì)小得多,該模塊尺寸規(guī)格為 0.7 x 1.7 英寸,見(jiàn)圖 2。盡管 Snō FPGA 開(kāi)發(fā)板的物理尺寸更小,但它集成了 Intel MAX 10 FPGA 的更高版本,配備的邏輯單元也多出一倍:10M16SAU169C8GMAX 10 FPGA 有 16K,而 XLR8 板上的 10M08 器件只有 8K。前者的 I/O 引腳也是后者的兩倍多(32 個(gè),對(duì)比 XLR8 板的 14 個(gè))。
圖 2:與 XLR8 開(kāi)發(fā)板一樣,Alorium Technology 的 Snō FPGA 開(kāi)發(fā)板也結(jié)合了 8 位 ATmega328 指令集兼容型微控制器與 Intel MAX 10 FPGA — 該開(kāi)發(fā)板采用的是 10M16SAU169C8G FPGA。不過(guò),Snō FPGA 開(kāi)發(fā)板的尺寸規(guī)格小得多。(圖片來(lái)源:Alorium Technology)
Alorium 還提供了SNOMAKRR10分線板,可將 Snō FPGA 模塊轉(zhuǎn)換為稍大的 Arduino 外形尺寸板,配備 USB 端口和來(lái)自 FPGA 的附加 I/O 分線引腳。Snō FPGA 模塊的一些引腳連到與 Arduino 兼容的 SnōMAKR 分線板擴(kuò)展排針,而其他引腳連到 USB 連接器對(duì)面、沿開(kāi)發(fā)板邊緣分布的一排附加針座(圖 3)。
圖 3:Alorium 的 SNOMAKRR10 分線板可以將該公司的 Snō FPGA 開(kāi)發(fā)板轉(zhuǎn)換為與 Arduino 兼容的外形尺寸,配備 USB 端口和板載穩(wěn)壓器,因而使用 USB 電纜就能直接為開(kāi)發(fā)板供電。(圖片來(lái)源:Alorium Technology)
XLR8 和 Snō FPGA 開(kāi)發(fā)板都在一個(gè)芯片 — IntelMAX 10FPGA 中實(shí)現(xiàn) 8 位微控制器及其硬件外設(shè)。圖 4 圖解說(shuō)明了實(shí)現(xiàn)方法。
圖 4:XLR8 和 Snō FPGA 開(kāi)發(fā)板都在 MAX 10 FPGA 中以軟內(nèi)核方式實(shí)現(xiàn)AtmelAVR 兼容型微控制器。(圖片來(lái)源:Alorium Technology)
AVR 兼容型微控制器內(nèi)核(圖 4 左下部分)與最初 Arduino 開(kāi)發(fā)板中使用的 AtmelATmega3288 位 AVR 微控制器相同。然而,Alorium 的 AVR 微控制器是以 FPGA 中的軟內(nèi)核方式實(shí)現(xiàn),而不是另載于獨(dú)立芯片之上。
圖 4 中,該微控制器內(nèi)核上方共有五個(gè) Alorium XB(XB1 至 XB5)。XB 是通過(guò) FPGA 的片上資源實(shí)現(xiàn)的 IP 塊。AVR 微控制器可通過(guò)可尋址寄存器接口與這些片上 XB 進(jìn)行通信。XLR8 和 Snō 開(kāi)發(fā)板隨附了預(yù)安裝的 XB(也在 GitHub 中提供),它們相當(dāng)于 Arduino 開(kāi)發(fā)人員經(jīng)常需要使用的外設(shè),包括:
正交解碼
伺服電機(jī)控制
NeoPixel RGB LED 控制
12 位增強(qiáng)型 ADC
浮點(diǎn)數(shù)學(xué)
請(qǐng)注意,上面列出的最后一種 XB 其實(shí)并不是 I/O 外設(shè)塊,而是浮點(diǎn)數(shù)學(xué)加速器。XB 可以是任何類型的硬件加速器,而不只局限于 I/O。
選取任何塊
XLR8 和 Snō FPGA 開(kāi)發(fā)板都可現(xiàn)場(chǎng)更新,方法是選擇不同的 XB(或多個(gè)同類 XB),使用 Alorium 的 OpenXLR8 開(kāi)發(fā)流程在 FPGA 中實(shí)例化。開(kāi)發(fā)人員也可以使用 Alorium 的 OpenXLR8 流程構(gòu)建定制 Xcelerator Block(圖 5)。
圖 5:通過(guò) Alorium 的 OpenXLR8 開(kāi)發(fā)流程,設(shè)計(jì)人員可以使用 Intel 的 Quartus Prime 設(shè)計(jì)工具構(gòu)建新的硬件塊,并將其添加到 Arduino IDE。(圖片來(lái)源:Alorium Technology)
目前,要構(gòu)建定制的 XB,設(shè)計(jì)人員必須具備 Verilog 或 VHDL 硬件描述語(yǔ)言的應(yīng)用知識(shí),并且熟悉 Intel Quartus FPGA 工具套件 — 尤其是 Quartus Prime Lite Edition 17.1 版和 Mentor Graphics 的 ModelSim 仿真工具。HDL 對(duì)于 FPGA 開(kāi)發(fā)必不可少,因?yàn)樗试S設(shè)計(jì)人員以一種標(biāo)準(zhǔn)的、定義完善的方式來(lái)表達(dá)多個(gè)任務(wù)的并行執(zhí)行。C 和 C++ 等高級(jí)語(yǔ)言 (HLL) 實(shí)質(zhì)上是順序語(yǔ)言。
HLL 編譯器獲取 HLL 源代碼,將其轉(zhuǎn)換成一長(zhǎng)串機(jī)器指令序列,通常一次只能執(zhí)行一個(gè)指令。這也是 FPGA 比處理器快得多的原因所在 — FPGA 能夠同時(shí)執(zhí)行數(shù)千個(gè)任務(wù),只要 FPGA 足夠大。有一些 HLL 編譯器能夠?qū)?C 或 C++ 編寫(xiě)的代碼轉(zhuǎn)換為 HDL,然后由常規(guī)的 FPGA 工具處理,但目前 Alorium 的 OpenXLR8 設(shè)計(jì)流程并不包括這些 HLL 編譯器。
然而,一旦使用 HDL 和 FPGA 開(kāi)發(fā)工具設(shè)計(jì)并調(diào)試了 XB,即可像任何其他 Arduino 庫(kù)塊一樣在 Arduino IDE 中使用。目前,Alorium 也在為 Arduino IDE 庫(kù)開(kāi)發(fā)更多的 XB。
總結(jié)
在構(gòu)建各自的 FPGA 開(kāi)發(fā)板方面,Arduino 和 Alorium Technology 公司都認(rèn)識(shí)到設(shè)計(jì)人員越來(lái)越多地需要這些經(jīng)濟(jì)實(shí)惠的開(kāi)發(fā)板提供更多的嵌入式性能。盡管兩家公司采取的策略雖有所不同,但最終目標(biāo)卻別無(wú)二致:努力讓更多嵌入式開(kāi)發(fā)人員更方便地使用 FPGA。在最基礎(chǔ)的層面上,Arduino 和 Alorium 的方法讓硬件設(shè)計(jì)就像選取塊并運(yùn)行腳本一樣簡(jiǎn)單。
目前,完整的設(shè)計(jì)流程尚不夠簡(jiǎn)單。Arduino 尚未向 HDL 開(kāi)發(fā)人員開(kāi)放完整的 FPGA 開(kāi)發(fā)流程。雖然 Alorium 的設(shè)計(jì)流程確實(shí)包括 HDL 設(shè)計(jì),但要求開(kāi)發(fā)人員必須具備 Verilog 或 VHSL FPGA 設(shè)計(jì)語(yǔ)言和工具的知識(shí)。
不過(guò),這些產(chǎn)品已將大門開(kāi)啟,至少在理論上可以利用 C 和 C++ 硬件編譯器等其他 FPGA 開(kāi)發(fā)方式。屆時(shí),將可以通過(guò)使用 Alorium Technology 和 Arduino 開(kāi)發(fā)的簡(jiǎn)單方法將這些功能添加到 Arduino IDE 中,充分發(fā)揮 FPGA 的性能。
-
FPGA
+關(guān)注
關(guān)注
1643文章
21983瀏覽量
614632 -
Arduino
+關(guān)注
關(guān)注
189文章
6493瀏覽量
190215
發(fā)布評(píng)論請(qǐng)先 登錄
Modbus轉(zhuǎn)Ethernet/IP網(wǎng)關(guān)模塊與匯川PLC通訊在網(wǎng)關(guān)配置軟件中的配置

采用LabVIEW FPGA模塊和可重新配置I/O設(shè)備開(kāi)發(fā)測(cè)量與控制應(yīng)用
使用FPGA和IP Core實(shí)現(xiàn)定制緩沖管理
如何在Arduino IDE上配置好NodeMCU的開(kāi)發(fā)環(huán)境
Arduino-IDE配置ESP32開(kāi)發(fā)環(huán)境的正確方式
怎樣去安裝和配置Arduino IDE開(kāi)發(fā)環(huán)境呢
FPGA中IP核的生成
工業(yè)環(huán)境中的Raspberry PI和Arduino
FPGA VI中不同的Xilinx內(nèi)核生成器IP設(shè)計(jì)實(shí)現(xiàn)與子模板說(shuō)明
Achronix宣布為其eFPGA IP解決方案推出定制單元塊
如何使用Arduino ESP8266開(kāi)發(fā)板配置標(biāo)準(zhǔn)的Arduino開(kāi)發(fā)環(huán)境

IP例化和幾個(gè)基于FPGA芯片實(shí)現(xiàn)的Demo工程
Arduino IDE配置STM32開(kāi)發(fā)環(huán)境和程序燒錄

評(píng)論