FPGA晶元 硬體和軟體工程之間的界限比我們看到的要模糊得多。 一種稱為現場可程式設計門陣列 (FPGA) 的器件,其物理特性可以通過使用硬體描述語言 (HDL) 來操縱,它彌合了硬體和軟體程式設計之間的差距。
但FPGA通常被認為是只能由硬體工程師程式設計的裝置。 幸運的是,現在情況並非如此,現代統一軟體平台插入通用開發工具,以簡化 FPGA 程式設計過程。
事實上,軟體開發人員也可以學習如何對 FPGA 進行程式設計。 本文將首先介紹 FPGA 的基礎知識,例如 FPGA 的工作原理以及為什麼要使用它們。 然後,本文討論了設計和執行第乙個FPGA應用所需的工具。
什麼是FPGA,為什麼要使用它?
FPGA 是一種積體電路 (IC),具有可配置邏輯塊 (CLB) 和其他使用者可程式設計和可重新程式設計功能。 術語“現場可程式設計”表示FPGA的功能是可調節的,這與製造商硬連線的其他IC不同。
FPGA 是屬於可程式設計邏輯器件 (PLD) 類別的積體電路 (IC)。 FPGA 技術的基本功能建立在自適應硬體之上,具有獨特的功能,可以在製造後進行修改。 可以根據需要連線一系列硬體模組,每個模組都是可配置的,從而允許為所有應用程式構建特定於領域的高效架構。
這種硬體靈活性是 CPU 和 GPU 所不具備的獨特差異化優勢。
雖然 CPU 很靈活,但它們的底層硬體是固定的。 一旦CPU出廠,硬體就無法修改。 它依靠軟體來告訴它對記憶體中的哪些資料執行哪個特定的操作(算術函式)。 硬體必須能夠執行所有可能的操作,這是使用軟體指令呼叫的,並且通常一次只能執行一條指令。 相比之下,FPGA 可以並行處理大量資料。 自適應硬體相對於 CPU 的優勢因應用程式而異,很大程度上取決於計算的性質及其並行化能力,但與功能高度可並行化的 CPU 實現相比,效能提高 20 倍的情況並不少見。
GPU 不僅彌補了 CPU 的主要缺點之一(能夠並行處理大量資料),而且還可以在廣泛的資料集上執行。 從根本上說,GPU 類似於 CPU,因為它們具有固定的硬體並使用軟體指令執行。 單條指令可以處理1000多條資料,因此適用於圖形加速、高效能計算、處理和某些形式的機器習等特定領域。 但從根本上說,GPU 的基本架構和資料流在製造之前是固定的。
FPGA 為程式設計師和設計人員提供了更大的靈活性來調整和更新計算架構,從而產生更能滿足其需求的特定領域架構。 FPGA 並不是什麼新鮮事,但由於人工智慧等領域的創新速度,它們變得越來越重要。 AMD於2024年發明了第乙個商用FPGA,在當前FPGA市場中占有60%至70%的份額。
FPGA的用途和應用
FPGA 的應用範圍很廣。 如今,它被用於資料中心、航空航天工程、國防、人工智慧 (AI)、工業物聯網 (IoT)、有線和無線網路以及汽車。 這些裝置通常出現在使用者需要實時資訊的環境中。 例如,家庭安全攝像頭需要以高解像度和最小延遲將即時影象傳送到房主的智慧型裝置。 隨著消費者越來越依賴通過手機傳送和接收即時訊息,這些期望只會增加。
此外,FPGA 還有助於加速原本在軟體中完成的功能。 這使得 FPGA 成為解除安裝需要高效能的任務的非常有用的工具,例如用於人工智慧的深度神經網路 (DNN) 推理。
FPGA 和硬體加速
FPGA 的架構使其成為硬體加速的高效解決方案。 ASIC 和 GPU 等裝置使用過時的方法在程式設計和記憶體之間切換。 而且它們也不適合需要實時資訊的應用,因為儲存和檢索任務所需的高功率會導致效能滯後。
與 ASIC 和 GPU 不同,FPGA 不需要在記憶體和程式設計之間切換,這使得儲存和檢索資料的過程更加高效。 FPGA 架構更加靈活,因此您可以自定義希望 FPGA 用於特定任務的功率。
這種靈活性有助於將極其耗能的任務從傳統 CPU 或其他裝置解除安裝到乙個或多個 FPGA。 許多 FPGA 可以重新程式設計,因此您可以輕鬆公升級和調整硬體加速系統。
FPGA程式設計是如何工作的?
FPGA 程式設計使用 HDL 根據您希望器件執行的操作來操縱電路。 該過程與對 GPU 或 CPU 進行程式設計不同,因為您編寫的程式不會按順序執行。 相反,您可以使用 HDL 建立電路,並根據您想要執行的操作對硬體進行物理修改。
這個過程類似於軟體程式設計,你寫的**被轉換為二進位檔案並載入到FPGA上。 但結果是,HDL 通過嚴格優化裝置來對硬體進行物理修改,而不是執行軟體。
FPGA 上的程式組裝了較低階別的元件,例如邏輯門和儲存器塊,這些元件協同工作以完成單個任務。 由於您是從頭開始操作硬體,因此 FPGA 提供了很大的靈活性。 您可以根據任務調整記憶體或功耗等基本功能。
用於對 FPGA 進行程式設計的語言
FPGA 似乎主要服務於晶元設計人員,而不是專門從事軟體開發的工程師。 畢竟,大多數用於編寫 FPGA 的 HDL 都是低階語言,硬體工程師可能比軟體工程師更熟悉這些語言。 但有些 HDL 與通用軟體語言的相似程度比您想象的要高得多。
當我們對 FPGA 使用“程式設計”一詞時,它與建立軟體並不完全相同,因為程式的設定和執行方式不同。 但該術語的使用確實包含了這樣一種想法,即編寫和執行FPGA類似於建立軟體演算法的過程。 最初的思維方式是,FPGA只能由電路設計硬體工程師進行程式設計。 現在情況已不再如此。
在統一軟體平台的幫助下,軟體開發人員可以使用他們喜歡的語言對 FPGA 進行程式設計,而無需掌握 HDL 技術。 這不僅消除了必須切換到新程式語言的壓力,而且還有助於軟體開發人員將注意力從硬體轉移到概念上。 這些平台本質上是通過將高階語言翻譯成較低階別的語言來工作的,以便FPGA可以執行所需的功能。 可與統一軟體平台一起用於 FPGA 程式設計的語言包括:
TensorFlow 和 PyTorch 等 AI 框架:借助 Vitis AI,AI 科學家現在可以直接從 TensorFlow 或 PyTorch 獲取訓練有素的深度 習 模型,並對其進行編譯以進行 FPGA 加速。 這不僅消除了對低階硬體程式設計的需求,而且還可以在幾分鐘內實現瞬間編譯,與 CPU 和 GPU 的典型軟體編譯體驗相媲美。
C 和 C++ 在高階綜合 (HLS) 的幫助下,基於 C 的語言現在可用於 FPGA 設計。 具體而言,AMD Vivado HLS 編譯器提供了乙個程式設計環境,該環境與標準和專用處理器共享關鍵技術,以優化 C 和 C++ 程式。 這使軟體工程師能夠進行優化**,而無需清除有限的記憶體空間或計算資源的障礙。
Python:設計人員可以使用 Python 語言和庫建立高效能應用,並通過 PynQ 對 FPGA 進行程式設計。 Pynq 是 AMD 的乙個開源專案,可簡化 AMD 平台的使用。
此外,現在還有大量主流的HDL主要用於FPGA程式設計。 以下是其名稱和主要屬性的簡要說明:
Lucid:這種語言是專門為FPGA設計的,以補充一些較舊的語言,如Verilog。
VHDL:甚高速積體電路(VHSIC)硬體描述語言的首字母縮寫,最早出現在20世紀80年代,主要基於ADA和PASCAL。
Verilog:Verilog 是有史以來第乙個 HDL,目前主要用於測試分析和驗證。 該語言的核心基於 C 語言。
如何對 FPGA 進行程式設計
雖然FPGA只存在於硬體工程師的領域,但人工智慧科學家和軟體程式設計師現在可以訪問新平台,使這個過程感覺就像編寫軟體程式一樣。 使用正確的工具,您將找到滿足您當前硬體和軟體知識水平需求的 FPGA 程式設計解決方案。
如果您正在為 GPU 進行 習 程式設計,編寫 FPGA 的過程會感覺非常相似,即使結果略有不同。 FPGA 程式設計涉及編寫、根據需要將程式翻譯成較低階別的語言,以及將程式轉換為二進位檔案。 然後,您將向 FPGA 提供乙個程式,就像您要求 GPU 讀取用 C++ 編寫的軟體一樣。 就是這麼簡單。
但為了優化該程式設計過程,您需要訪問正確的平台。 幸運的是,AMD擁有完美的解決方案,這是一套突破性的工具,可以在FPGA程式設計過程的每一步為軟體開發人員提供幫助。
利用 Vitis 統一軟體平台簡化 FPGA 程式設計
Vitis 統一軟體平台是一款領先的應用,可為軟體工程師、資料科學家和 AI 開發人員優化 FPGA 程式設計。 它包括乙個針對 AMD FPGA 和 ACAP 硬體平台優化的可擴充套件開源庫,以及乙個核心開發套件,無需豐富的硬體經驗即可無縫構建加速應用程式。
此外,Vitis 還包括 Vitis Model Composer,它在 MATLAB 和 Simulink 中提供了一套工具。 它優化了設計和測試新應用程式的過程。
如何使用 Vitis 軟體加速應用的啟動設計
Vitis 通過四個步驟幫助您為邊緣、本地或雲端的資料和計算密集型應用設計加速器:
確定應用程式中需要加速的關鍵效能部分。
使用 Vitis 加速庫設計加速器,或使用 C、C++、OpenCL 或 RTL 開發自己的加速器。
構建、分析和除錯以驗證功能正確性並確保符合效能目標。
在邊緣、本地或雲端的 AMD 平台上部署加速應用。
AMD 是業界排名第一的 FPGA 供應商
雖然如果沒有硬體專業知識,FPGA 程式設計可能會令人望而生畏,但像 Vitis 這樣的平台可以幫助軟體開發人員簡化流程。 AMD 是業界收入最高的 FPGA 供應商,也是為軟體工程師提供資源以建立 FPGA 應用的行業領導者。
使用 AMD Vitis HLS 工具將用 C、C++ 和 OpenCL 編寫的函式整合到硬體中。 HLS 工具不僅可以自動修改和簡化更新,還可以優化 C++ 以實現每個應用程式的低延遲和高吞吐量
注意:文章** 電子發燒友社群。