軟硬件工程之間的界限比我們看到的更模糊。稱之為現(xiàn)場(chǎng)可編程門陣列 (FPGA) 的器件,其物理屬性可通過使用硬件描述語言 (HDL) 來操控,該器件可在軟硬件編程之間架起一座橋梁。
但人們通常認(rèn)為,F(xiàn)PGA 是只能由硬件工程師編程的器件。幸運(yùn)的是,今時(shí)不同往日,現(xiàn)代統(tǒng)一軟件平臺(tái)插入通用開發(fā)工具,可簡(jiǎn)化 FPGA 的編程過程。
事實(shí)上,軟件開發(fā)人員也可了解如何編程 FPGA。本文將首先介紹 FPGA 的基礎(chǔ)知識(shí),比如 FPGA 的工作原理以及為什么要使用 FPGA 等。然后討論設(shè)計(jì)和執(zhí)行首款 FPGA 應(yīng)用所需的工具。
何為 FPGA 以及為什么使用 FPGA?
FPGA 是一種集成電路 (IC),具有可配置邏輯塊 (CLB) 以及其它用戶可編程并可重新編程的特性。術(shù)語“現(xiàn)場(chǎng)可編程”表示 FPGA 的功能是可調(diào)節(jié)的,與其它由制造商硬連接的 IC 不一樣。
FPGA 是屬于可編程邏輯器件 (PLD) 范疇的集成電路 (IC)。FPGA 技術(shù)的基本功能建立在自適應(yīng)硬件之上,具有制造后可修改的獨(dú)特功能。硬件塊陣列(每塊都可配置)可根據(jù)需要進(jìn)行連接,允許為所有應(yīng)用構(gòu)建特定域的高效架構(gòu)。
這種硬件靈活應(yīng)變性是 CPU 和 GPU 所不具備的獨(dú)特差異化特性。
雖然 CPU 靈活性很高,但其底層硬件是固定的。CPU 一旦出廠,硬件就無法修改。它依靠軟件來告訴它要針對(duì)內(nèi)存中的哪個(gè)數(shù)據(jù)執(zhí)行哪項(xiàng)具體運(yùn)算(算術(shù)函數(shù))。硬件必須能夠執(zhí)行所有可能的運(yùn)算,稱之為使用軟件指令,通常一次只能執(zhí)行一條指令。相比之下,F(xiàn)PGA 可并行處理海量數(shù)據(jù)。與 CPU 相比,自適應(yīng)硬件的優(yōu)勢(shì)因應(yīng)用而異,很大程度上取決于計(jì)算的性質(zhì)及其并行化的能力,但與功能可高度并行化的 CPU 實(shí)現(xiàn)方案相比,性能提高 20 倍的情況并不少見。
GPU 不僅可彌補(bǔ) CPU 的一個(gè)主要不足之處 — 并行處理大量數(shù)據(jù)的能力,而且運(yùn)行的數(shù)據(jù)集還很寬。從根本上講,GPU 和 CPU 類似,因?yàn)樗鼈冇泄潭ǖ挠布沂褂密浖噶钸\(yùn)行。一條指令可處理 1000 個(gè)以上的數(shù)據(jù),因此它們適用于圖形加速、高性能計(jì)算、視頻處理以及某些形式的機(jī)器學(xué)習(xí)等特定域。但從根本上講,GPU 的基本架構(gòu)和數(shù)據(jù)流在制造之前是固定的。
FPGA 可幫助編程人員和設(shè)計(jì)人員更靈活地適應(yīng)和更新計(jì)算架構(gòu),從而帶來更能滿足其需求的特定域架構(gòu)。FPGA 并不是什么新事物,但因人工智能等領(lǐng)域的創(chuàng)新速度,其重要性日益凸顯。第一款商用 FPGA 是 AMD 于 1985 年發(fā)明的,在目前的 FPGA 市場(chǎng)上占據(jù) 60% 至 70% 的份額。
免費(fèi)電子書下載
自適應(yīng)計(jì)算概述
下載電子書
FPGA 的用途與應(yīng)用
FPGA 應(yīng)用廣泛。今天,數(shù)據(jù)中心、航空航天工程、國(guó)防、人工智能 (AI)、工業(yè)物聯(lián)網(wǎng) (IoT)、有線及無線網(wǎng)絡(luò)以及汽車等眾多行業(yè)無處不見其身影。這類器件通常處于用戶需要實(shí)時(shí)信息的環(huán)境中。例如,一款家庭安防攝像頭需要將即時(shí)圖像以高分辨率和最小的時(shí)延傳給房主的智能設(shè)備。隨著消費(fèi)者對(duì)通過手機(jī)收發(fā)即時(shí)信息的依賴程度越來越高,這些期望值只會(huì)增加。
此外,F(xiàn)PGA 也有助于完成本來可以在軟件中完成的功能加速。這使得 FPGA 成了一種非常有幫助的工具,可卸載需要高性能的任務(wù),比如人工智能的深度神經(jīng)網(wǎng)絡(luò) (DNN) 推斷。
FPGA 和硬件加速
FPGA 的架構(gòu)使其成了硬件加速的高效解決方案。ASIC 和 GPU 等器件使用一種過時(shí)的方法在編程和內(nèi)存之間切換。而且它們也不能適應(yīng)需要實(shí)時(shí)信息的應(yīng)用,因?yàn)榇鎯?chǔ)和檢索任務(wù)所需的高功率會(huì)導(dǎo)致性能滯后。
與 ASIC 和 GPU 不同, FPGA 不需要在內(nèi)存和編程之間切換,這使得存儲(chǔ)和檢索數(shù)據(jù)的過程更高效。FPGA 架構(gòu)靈活性更高,因此您可以自定義您希望 FPGA 用于特定任務(wù)的電源。
這種靈活性有助于將能耗極高的任務(wù)從傳統(tǒng) CPU 或其它器件轉(zhuǎn)移到一個(gè)或幾個(gè) FPGA 上。許多 FPGA 都可以重新編程,因此您可以對(duì)硬件加速系統(tǒng)輕松進(jìn)行升級(jí)和調(diào)整。
FPGA 編程是怎樣進(jìn)行的?
FPGA 編程可根據(jù)您希望器件具備的功能,使用 HDL 來操控電路。該過程不同于對(duì) GPU 或 CPU 的編程,因?yàn)槟帉懙某绦驅(qū)⒉粫?huì)按順序運(yùn)行。相反,您可使用 HDL 來創(chuàng)建電路,并根據(jù)您想要的功能對(duì)硬件進(jìn)行物理修改。
這個(gè)過程類似于軟件編程,其中您編寫的代碼將轉(zhuǎn)換成二進(jìn)制文件并加載在 FPGA 上。但結(jié)果是 HDL 對(duì)硬件進(jìn)行了物理修改,而不是通過嚴(yán)格優(yōu)化器件來運(yùn)行軟件。
FPGA 上的一個(gè)程序?qū)⑦壿嬮T和內(nèi)存塊等較低層次的元件組裝在一起,其可協(xié)同工作,共同完成一項(xiàng)任務(wù)。因?yàn)槟菑念^開始操控硬件的,因此 FPGA 將帶來很高的靈活性。您可以根據(jù)任務(wù)調(diào)整內(nèi)存或功耗等基本功能。
用于編程 FPGA 的語言
FPGA 似乎主要服務(wù)于芯片設(shè)計(jì)人員,而不是專門從事軟件開發(fā)的工程師。畢竟,大多數(shù)用于編寫 FPGA 代碼的 HDL 都是較低級(jí)的語言,硬件工程師可能比軟件工程師更熟悉這些語言。但有些 HDL 與通用軟件語言的類似程度遠(yuǎn)比您想象的高。
當(dāng)我們將“編程”一詞用于 FPGA 時(shí),因?yàn)槌绦虻脑O(shè)置方式和執(zhí)行方式的緣故,它與創(chuàng)建軟件并不完全相同。但使用該術(shù)語確實(shí)包含了編寫并執(zhí)行 FPGA 代碼與創(chuàng)建軟件算法的過程相似的理念。最初的思維方式是,F(xiàn)PGA 只能由電路設(shè)計(jì)硬件工程師來編程。今時(shí)不同往日。
在統(tǒng)一軟件平臺(tái)的幫助下,軟件開發(fā)人員無需掌握 HDL 技術(shù),便可使用他們喜歡的語言來對(duì) FPGA 進(jìn)行編程。這不僅可消除必須轉(zhuǎn)而采用全新編程語言的壓力,而且還可幫助軟件開發(fā)人員將工作重心從硬件轉(zhuǎn)向概念。這些平臺(tái)的工作原理本質(zhì)上是將較高級(jí)的語言翻譯成較低級(jí)的語言,以便 FPGA 執(zhí)行所需的功能。能夠與統(tǒng)一軟件平臺(tái)一起用于 FPGA 編程的語言包括:
-
TensorFlow 和 Pytorch 等 AI 框架 :有了 Vitis AI, AI 科學(xué)家現(xiàn)在可直接從 TensorFlow 或 Pytorch 獲取其訓(xùn)練有素的深度學(xué)習(xí)模型,并針對(duì) FPGA 加速進(jìn)行編譯。這不僅無需對(duì)低層次硬件進(jìn)行編程,而且還可在幾分鐘內(nèi)實(shí)現(xiàn)瞬間編譯,從而能夠與使用 CPU 和 GPU 的典型軟件編譯體驗(yàn)相媲美。
-
C 和 C++ :在高層次綜合 (HLS) 的幫助下,基于 C 語言的語言現(xiàn)在可用于 FPGA 設(shè)計(jì)。具體來說,AMD Vivado HLS 編譯器提供的編程環(huán)境能夠與標(biāo)準(zhǔn)處理器及專用處理器共享關(guān)鍵技術(shù),用于優(yōu)化 C 語言程序和 C++ 程序。這允許軟件工程師優(yōu)化代碼,無需掃清有限內(nèi)存空間或計(jì)算資源的路障。
-
Python :設(shè)計(jì)人員可使用 Python 語言和庫(kù)來創(chuàng)建高性能應(yīng)用并通過 PYNQ 編程 FPGA。PYNQ 是 AMD 的一個(gè)開源項(xiàng)目,可簡(jiǎn)化 AMD 平臺(tái)的使用。
此外,現(xiàn)在主要用于 FPGA 編程的,也有大量主流 HDL。下面簡(jiǎn)單介紹一下其名稱和主要屬性:
-
Lucid :這種語言是專門針對(duì) FPGA 設(shè)計(jì)的,可彌補(bǔ) Verilog 等一些更早語言的不足。
-
VHDL :超高速集成電路 (VHSIC) 硬件描述語言的首字母縮寫,該語言最早出現(xiàn)在 20 世紀(jì) 80 年代,主要基于 Ada 和 Pascal。
-
Verilog :Verilog 是有史以來創(chuàng)建的第一款 HDL,今天主要用于測(cè)試分析與驗(yàn)證。該語言的內(nèi)核基于 C 語言。
如何編程 FPGA
雖然 FPGA 只存在于硬件工程師領(lǐng)域,但 AI 科學(xué)家和軟件編程人員現(xiàn)在可以訪問新平臺(tái),讓該過程感覺就像編寫軟件程序一樣。有了正確的工具,您將找到一個(gè)為 FPGA 編程的解決方案,在當(dāng)前的軟硬件知識(shí)層面滿足您的需求。
如果您習(xí)慣了針對(duì) GPU 進(jìn)行編程,即使結(jié)果有點(diǎn)不同,編寫 FPGA 代碼的過程也會(huì)感覺非常相似。FPGA 編程包括編寫代碼、根據(jù)需要將該程序翻譯成較低級(jí)的語言,以及將該程序轉(zhuǎn)換為二進(jìn)制文件。然后,您將向 FPGA 提供程序,操作就像讓 GPU 讀取一款用 C++ 編寫的軟件一樣。就是這么簡(jiǎn)單。
但為了優(yōu)化該編程過程,您需要訪問正確的平臺(tái)。幸運(yùn)的是,AMD 擁有完美的解決方案,這是一套開創(chuàng)性的工具,可在 FPGA 編程過程的每個(gè)環(huán)節(jié)為軟件開發(fā)人員提供幫助。
使用 Vitis 統(tǒng)一軟件平臺(tái)簡(jiǎn)化 FPGA 編程
Vitis 統(tǒng)一軟件平臺(tái)是一款領(lǐng)先應(yīng)用,可為軟件工程師、數(shù)據(jù)科學(xué)家以及 AI 開發(fā)人員優(yōu)化 FPGA 編程過程。它包括一個(gè)針對(duì) AMD FPGA 和 ACAP 硬件平臺(tái)優(yōu)化的擴(kuò)展性開源庫(kù),以及一個(gè)內(nèi)核開發(fā)套件,有了該套件,沒有豐富的硬件經(jīng)驗(yàn),也可無縫構(gòu)建加速應(yīng)用。
此外,Vitis 還包括 Vitis Model Composer,其在 MATLAB 和 Simulink 中提供了一個(gè)工具套件。它可優(yōu)化設(shè)計(jì)并測(cè)試新應(yīng)用的過程。
如何使用 Vitis 軟件針對(duì)應(yīng)用加速啟動(dòng)設(shè)計(jì)
Vitis 分四個(gè)步驟幫助您針對(duì)邊緣、本地或云端的數(shù)據(jù)及計(jì)算密集型應(yīng)用設(shè)計(jì)加速器:
-
確定應(yīng)用中需要加速的性能關(guān)鍵部分。
-
使用 Vitis 加速庫(kù)設(shè)計(jì)加速器,也可使用 C、C++、OpenCL 或 RTL 開發(fā)自己的加速器。
-
構(gòu)建、分析和調(diào)試,以驗(yàn)證功能正確性并確保符合性能目標(biāo)。
-
在邊緣、本地或云端的 AMD 平臺(tái)上部署加速應(yīng)用。
AMD 是業(yè)內(nèi)排名第一的 FPGA 供應(yīng)商
盡管沒有硬件專業(yè)技術(shù),F(xiàn)PGA 編程可能會(huì)讓人望而卻步,但 Vitis 等平臺(tái)可幫助軟件開發(fā)人員簡(jiǎn)化該過程。AMD 是業(yè)界收入最高的 FPGA 廠商,也是為軟件工程師創(chuàng)建 FPGA 應(yīng)用提供資源的行業(yè)領(lǐng)導(dǎo)者。
使用 C、C++ 和 OpenCL 編寫的函數(shù)可以使用 AMD Vitis HLS 工具集成到硬件中。HLS 工具不僅可為代碼修改實(shí)現(xiàn)自動(dòng)化,簡(jiǎn)化更新,而且還可針對(duì)每款應(yīng)用的低時(shí)延和高吞吐量?jī)?yōu)化 C/C++ 代碼。
聲明:本文由電子發(fā)燒友社區(qū)發(fā)布,轉(zhuǎn)載請(qǐng)注明以上來源。如需社區(qū)合作及入群交流,請(qǐng)?zhí)砑游⑿臙EFans0806,或者發(fā)郵箱liuyong@huaqiu.com。
更多熱點(diǎn)文章閱讀
-
基于32位RISC-V設(shè)計(jì)的互聯(lián)型微控制器,沁恒微CH32V307開發(fā)樣例
-
RK3568!四核64位ARMv8.2A架構(gòu),匯聚編譯源碼及實(shí)戰(zhàn)樣例
-
尺寸僅有21mm*51mm,板邊采用郵票孔設(shè)計(jì),合宙 Air105 核心板開發(fā)總結(jié)
原文標(biāo)題:【干貨分享】FPGA 編程:原理概述
文章出處:【微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
電子技術(shù)
+關(guān)注
關(guān)注
18文章
890瀏覽量
56021 -
電子發(fā)燒友論壇
+關(guān)注
關(guān)注
4文章
197瀏覽量
1090
原文標(biāo)題:【干貨分享】FPGA 編程:原理概述
文章出處:【微信號(hào):gh_9b9470648b3c,微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論