VisualApplets 基本概念#
本文件的簡介與目的#
關鍵術語
在本教學指南中,標有「關鍵術語」的方框會為尚未了解這些術語的讀者解釋常見術語。
VisualApplets 是 PC 上的設計工具。FPGA是幀擷取卡上的晶片。您需在VisualApplets 中繪製管線。編譯過程會將該管線配置為 FPGA 上的硬體。相機資料是在幀擷取卡上進行處理,而非在VisualApplets 編輯器中處理。
基本設計概念#
VisualApplets 讓您無需使用 VHDL 或 Verilog 等硬體描述語言編寫程式碼,即可在基於 FPGA 的可程式化硬體上建立影像處理功能。您可透過圖形化方式,從函式庫中的運算子建構設計,並將其相互連接,使影像資料沿著預先定義的路徑流動。

此外,您还可以使用 Python 和 Tcl 腳本語言來建立和編輯設計。
在可程式化影像擷取卡上,攝影機或其他影像來源會將連續的像素流傳送至擷取路徑,而該板上的FPGA則負責處理該像素流。您所建立的並非像 CPU 那樣由 FPGA 載入並執行的程式,而是透過此建置在 FPGA上配置一套專用的數位電路,其結構與您的管線相符。
您可在電腦上建立並編輯「VisualApplets 」設計(*.*vad檔案中的運算子、模組及連結)。接著,建構步驟會將該管線轉換為硬體邏輯。

在此類VisualApplets 設計中,您會從運算子函式庫中實例化運算子;設計中每個運算子的實例皆稱為「模組」。模組透過連結相互連接,而處理順序則取決於您如何排列與連接這些模組。模組與連結共同構成一個影像處理管線,該管線定義了像素資料如何流經擷取、處理及輸出階段。
當本教學提到某個模組在執行時會處理、緩衝、阻擋或傳輸資料時,所指的是由該模組所產生的 FPGA 邏輯。VisualApplets 中的圖形化模組僅描述該硬體行為;它本身並不會處理執行時的攝影機資料。
請將可編輯的設計儲存為*.vad檔案。當您針對特定的目標幀擷取卡建置設計時,VisualApplets 會產生一個副檔名為*.hap 的二進位硬體小程式檔案。請將此檔案載入至幀擷取卡中。請勿將*.hap檔案視為可編輯的設計原始檔。您應始終修改*.vad設計檔案,並重新建置。 在執行階段,您仍可變更應用程式或執行階段工具寫入裝置的動態寫入參數。
實際目標是在硬體上進行即時影像處理。雖然您是在個人電腦上以*.vad專案的形式編輯和驗證處理管線,但只有編譯後的*.hap檔案才會將該處理邏輯與資料流結構轉移至 FPGA,並作為可執行的硬體運行。
關鍵術語
「建置」是指將您在VisualApplets 中的圖形化設計,轉化為幀擷取卡上的 FPGA 可執行的配置。
檔案副檔名為*.hap 的硬體小程式,即是該可執行結果。
幀擷取卡是電腦中的一種擴充卡,用於接收攝影機資料、搭載 FPGA,並執行您所建置的小程式。VisualApplets 並不包含 FPGA。
FPGA 技術#
現場可程式邏輯閘陣列(FPGA)是一種包含大量可程式邏輯元件的晶片。這些元件以及晶片內的布線可經由配置,以在硬體層面實現複雜的數位電路,並能並行執行多項運算。
當您針對特定目標幀擷取卡建立VisualApplets 設計時,VisualApplets 會自動將您的運算元和連結映射至FPGA邏輯。您無需自行實作此映射。VisualApplets 會處理廠商專屬的FPGA工具鏈(通常為Xilinx Vivado),以執行佈置、佈線及位元流生成。有關PC上的*.vad專案與用於配置FPGA的*.hap之間的關聯性,請參閱《基本設計概念》。
除了通常用於建構組合邏輯電路的可程式邏輯元件外,FPGA 還提供用於時鐘控制儲存的觸發器、用於線路緩衝器及其他片上記憶體的區塊 RAM,以及用於快速乘加運算及類似功能的DSP 或算術切片。作為同一自動化建構流程的一部分,VisualApplets 會將運算子與連結映射至這些資源上。設計中的每個運算子都對應於具體的硬體,例如邏輯、記憶體、算術單元,或是這些元件的組合。
您的設計所需的FPGA 資源取決於使用的模組數量、選擇的運算子,以及如何設定並行度、緩衝區大小和其他參數。若大量使用邏輯、記憶體或並行資料路徑,將增加資源消耗。若設計超出裝置的實作能力,建置將會失敗,或可能無法達成時序收斂。當您執行「設計規則檢查第 2 級」(DRC Level 2)時,VisualApplets 會估算並回報 FPGA 資源消耗量。 請參閱《使用者手冊》中的「FPGA 資源估算」與「設計規則檢查」。若要進一步了解資源消耗的累積方式、適用規則,以及如何在設計選項間取得權衡,請另參閱 Parallelism 教學主題以及「記憶體元件」教學主題。
硬體中的管線執行#
在幀擷取卡上,內建的硬體小程式會將您的設計實作為一條管線式硬體路徑:像素資料會以連續的流量流經相互連結的運算階段。
您在「VisualApplets 」中繪製的管線,是 FPGA 上硬體路徑的模型:FPGA 會逐級處理資料,並以連續的流量將其傳遞至下游。此設計並未假設管線會在路徑上的每個階段儲存整張影像。生成的 FPGA 管線會依照此管線模型,在時鐘週期內將資料從一個階段傳輸至下一個階段,詳情請參閱「管線概念教學」主題。

相較於典型的CPU工作流程——該流程通常會將大量資料區塊傳輸至記憶體中,並主要依序執行指令——FPGA 能夠沿著管線以像素為單位並行處理和傳輸資料。相較於 GPU(後者在程式控制下針對資料執行多個執行緒)相比,FPGA 的管線運作模式更接近於固定的輸送帶。資料會依循您在設計中佈線所設定的處理階段依序移動。這正是為何技術文件中經常使用「管線」這個比喻的原因。
關鍵術語
- 不妨將FPGA視為幀擷取卡上的晶片,在您於VisualApplets 中設計的處理路徑上,許多小型運算會同時執行。建置過程會將該設計轉化為 FPGA 上的專用硬體邏輯。隨後,像素資料便會像輸送帶上的物品一樣流經這些硬體階段,這便是「管線」的概念。
- CPU通常會依序執行各項步驟,並經常載入和儲存整塊資料。
- A GPU 會在程式執行時,對多個像素或執行緒並行執行同類的運算。
時脈週期與時序#
FPGA 設計仰賴一個時鐘訊號,用以指示每個管線階段何時擷取、傳輸及處理資料。VisualApplets 及本教學指南將此時鐘稱為「基本設計時鐘」。這是所產生之 FPGA 管線的時鐘,與相機的像素時鐘不同。一個時鐘週期即為基本設計時鐘的一次脈衝。在每個時鐘上升沿,管線中的觸發器會儲存其輸入資料,並將其傳遞至下一階段。
因此,時脈週期:
- 定義管線中所有元件(例如寄存器)的時序。
- 請確保資料流穩定,因為數值僅會在可預測的時脈邊沿時,才會傳遞至下一階段。
- 請確定最大處理速度,因為基本設計時脈頻率必須足夠低,以確保所有位於寄存器之間的組合邏輯在下一週期開始前能正確穩定下來。
換言之,時鐘節奏確保了整個硬體管線的同步。個別運算子同樣採用管線化設計:此建置方案透過內部寄存器階段來實作每個運算子,因此 FPGA 階段可在每個時鐘週期接收新輸入,即使單一輸入需要數個週期,其結果才會出現在輸出端。 當管線填滿後,輸出端的吞吐量仍可維持每週期一個結果,但特定輸入到其結果產出的延遲可能大於一個週期。正因如此,建置過程中的管線化與資源映射會直接影響可達成的基礎設計時脈頻率與吞吐量。
資訊
您可在「裝置資源」中查閱您的幀擷取卡的「基準設計時脈頻率」及其他硬體資源資訊。
相關主題#
- 從空白設計到可執行 Applet的教學主題 — 設計、DRC、模擬與編譯
- 「管線概念」教學主題 — 資料如何在管線中流動
- Parallelism 教學主題 — 頻寬、時脈與 FPGA 資源
- 記憶體元件教學主題 — FPGA 記憶體與幀擷取器 DRAM
- 裝置資源— 基礎設計時鐘與平台資源
- 《使用者手冊》中的設計規則檢查— DRC 第 1 級與第 2 級