軟硬件工程之間的界限比我們看到的更模糊。稱之為現場可編程門陣列 (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 並不是什麼新事物,但因人工智能等領域的創新速度,其重要性日益凸顯。第一款商用 FPGA 是 Xilinx 於 1985 年發明的,Xilinx 在目前的 FPGA 市場上占據 60% 至 70% 的份額。
FPGA 應用廣泛。今天,數據中心、航空航天工程、國防、人工智能 (AI)、工業物聯網 (IoT)、有線及無線網絡以及汽車等眾多行業無處不見其身影。這類器件通常處於用戶需要實時信息的環境中。例如,一款家庭安防攝像頭需要將即時圖像以高分辨率和最小的時延傳給房主的智能設備。隨著消費者對通過手機收發即時信息的依賴程度越來越高,這些期望值隻會增加。
此外,FPGA 也有助於完成本來可以在軟件中完成的功能加速。這使得 FPGA 成了一種非常有幫助的工具,可卸載需要高性能的任務,比如人工智能的深度神經網絡 (DNN) 推斷。
FPGA 的架構使其成了硬件加速的高效解決方案。ASIC 和 GPU 等器件使用一種過時的方法在編程和內存之間切換。而且它們也不能適應需要實時信息的應用,因為存儲和檢索任務所需的高功率會導致性能滯後。
與 ASIC 和 GPU 不同, FPGA 不需要在內存和編程之間切換,這使得存儲和檢索數據的過程更高效。FPGA 架構靈活性更高,因此您可以自定義您希望 FPGA 用於特定任務的電源。
這種靈活性有助於將能耗極高的任務從傳統 CPU 或其它器件轉移到一個或幾個 FPGA 上。許多 FPGA 都可以重新編程,因此您可以對硬件加速係統輕鬆進行升級和調整。
FPGA 編程可根據您希望器件具備的功能,使用 HDL 來操控電路。該過程不同於對 GPU 或 CPU 的編程,因為您編寫的程序將不會按順序運行。相反,您可使用 HDL 來創建電路,並根據您想要的功能對硬件進行物理修改。
這個過程類似於軟件編程,其中您編寫的代碼將轉換成二進製文件並加載在 FPGA 上。但結果是 HDL 對硬件進行了物理修改,而不是通過嚴格優化器件來運行軟件。
FPGA 上的一個程序將邏輯門和內存塊等較低層次的元件組裝在一起,其可協同工作,共同完成一項任務。因為您是從頭開始操控硬件的,因此 FPGA 將帶來很高的靈活性。您可以根據任務調整內存或功耗等基本功能。
FPGA 似乎主要服務於芯片設計人員,而不是專門從事軟件開發的工程師。畢竟,大多數用於編寫 FPGA 代碼的 HDL 都是較低級的語言,硬件工程師可能比軟件工程師更熟悉這些語言。但有些 HDL 與通用軟件語言的類似程度遠比您想象的高。
當我們將“編程”一詞用於 FPGA 時,因為程序的設置方式和執行方式的緣故,它與創建軟件並不完全相同。但使用該術語確實包含了編寫並執行 FPGA 代碼與創建軟件算法的過程相似的理念。最初的思維方式是,FPGA 隻能由電路設計硬件工程師來編程。今時不同往日。
在統一軟件平台的幫助下,軟件開發人員無需掌握 HDL 技術,便可使用他們喜歡的語言來對 FPGA 進行編程。這不僅可消除必須轉而采用全新編程語言的壓力,而且還可幫助軟件開發人員將工作重心從硬件轉向概念。這些平台的工作原理本質上是將較高級的語言翻譯成較低級的語言,以便 FPGA 執行所需的功能。能夠與統一軟件平台一起用於 FPGA 編程的語言包括:
TensorFlow 和 Pytorch 等 AI 框架:有了 Vitis AI, AI 科學家現在可直接從 TensorFlow 或 Pytorch 獲取其訓練有素的深度學習模型,並針對 FPGA 加速進行編譯。這不僅無需對低層次硬件進行編程,而且還可在幾分鍾內實現瞬間編譯,從而能夠與使用 CPU 和 GPU 的典型軟件編譯體驗相媲美。
C 和 C++:在高層次綜合 (HLS) 的幫助下,基於 C 語言的語言現在可用於 FPGA 設計。具體來說,Xilinx® Vivado® HLS 編譯器提供的編程環境能夠與標準處理器及專用處理器共享關鍵技術,用於優化 C 語言程序和 C++ 程序。這允許軟件工程師優化代碼,無需掃清有限內存空間或計算資源的路障。
Python:設計人員可使用 Python 語言和庫來創建高性能應用並通過 PYNQ 編程 FPGA。PYNQ 是 Xilinx 的一個開源項目,可簡化 Xilinx 平台的使用。
此外,現在主要用於 FPGA 編程的,也有大量主流 HDL。下麵簡單介紹一下其名稱和主要屬性:
Lucid:這種語言是專門針對 FPGA 設計的,可彌補 Verilog 等一些更早語言的不足。
VHDL:超高速集成電路 (VHSIC) 硬件描述語言的首字母縮寫,該語言最早出現在 20 世紀 80 年代,主要基於 Ada 和 Pascal。
Verilog:Verilog 是有史以來創建的第一款 HDL,今天主要用於測試分析與驗證。該語言的內核基於 C 語言。
雖然 FPGA 隻存在於硬件工程師領域,但 AI 科學家和軟件編程人員現在可以訪問新平台,讓該過程感覺就像編寫軟件程序一樣。有了正確的工具,您將找到一個為 FPGA 編程的解決方案,在當前的軟硬件知識層麵滿足您的需求。
如果您習慣了針對 GPU 進行編程,即使結果有點不同,編寫 FPGA 代碼的過程也會感覺非常相似。FPGA 編程包括編寫代碼、根據需要將該程序翻譯成較低級的語言,以及將該程序轉換為二進製文件。然後,您將向 FPGA 提供程序,操作就像讓 GPU 讀取一款用 C++ 編寫的軟件一樣。就是這麼簡單。
但為了優化該編程過程,您需要訪問正確的平台。幸運的是,Xilinx 擁有完美的解決方案,這是一套開創性的工具,可在 FPGA 編程過程的每個環節為軟件開發人員提供幫助。
Vitis™ 統一軟件平台是一款領先應用,可為軟件工程師、數據科學家以及 AI 開發人員優化 FPGA 編程過程。它包括一個針對 Xilinx FPGA 和 ACAP 硬件平台優化的擴展性開源庫,以及一個內核開發套件,有了該套件,沒有豐富的硬件經驗,也可無縫構建加速應用。
此外,Vitis™ 還包括 Vitis Model Composer,其在 MATLAB® 和 Simulink® 中提供了一個工具套件。它可優化設計並測試新應用的過程。
Vitis™ 分四個步驟幫助您針對邊緣、本地或雲端的數據及計算密集型應用設計加速器:
確定應用中需要加速的性能關鍵部分。
使用 Vitis 加速庫設計加速器,也可使用 C、C++、OpenCL 或 RTL 開發自己的加速器。
構建、分析和調試,以驗證功能正確性並確保符合性能目標。
在邊緣、本地或雲端的 Xilinx 平台上部署加速應用。
盡管沒有硬件專業技術,FPGA 編程可能會讓人望而卻步,但 Vitis™ 等平台可幫助軟件開發人員簡化該過程。Xilinx 是收入最高的 FPGA 廠商,也是為軟件工程師創建 FPGA 應用提供資源的行業領導者。
使用Xilinx 麵向 FPGA 的 Vitis™ HLS 工具,您可以采用 C、C++ 和 OpenCL™ 編程語言對功能進行編程,並將其整合在硬件上。HLS 工具不僅可為代碼修改實現自動化,簡化更新,而且還可針對每款應用的低時延和高吞吐量優化 C/C++ 代碼。