跳至內容

VisualApplets 基本概念#

本文件的簡介與目的#

本主題說明使用 VisualApplets 所需了解的基本概念。讀完本主題後,您將理解 VisualApplets 設計背後的核心概念:影像處理管線、如何結合與參數化運算子,以及這些概念如何與擷取卡上的 FPGA 相關聯。

關鍵詞

在本教學中,標有 Key Terms 的方框會為尚未熟悉這些概念的讀者解釋常見術語。

VisualApplets 是 PC 上的設計工具。FPGA 是frame grabber上的晶片。您可以在 VisualApplets 中繪製管線。建置過程會將該管線配置為 FPGA 上的硬體。相機資料是在 frame grabber 上處理,而不是在 VisualApplets 編輯器中。

基本設計概念#

VisualApplets 允許您在基於 FPGA 的可程式化硬體上建立影像處理功能,而無需編寫 VHDL 或 Verilog 等硬體描述語言的程式碼。您可以透過圖形化方式從程式庫運算子建置設計並將其連接,以便影像資料沿著定義的路徑流動。

VisualApplets 中的圖形化程式設計

此外,您還可以使用 Python 和 Tcl 文書處理語言建立和編輯設計。

在可程式化 frame grabber上,相機或其他影像來源會將連續的像素串流傳送到擷取路徑中,而該板卡上的 FPGA 則會處理該串流。您所建置的並不是像 CPU 那樣由 FPGA 擷取並執行的程式。相反地,建置過程會在 FPGA 上配置一個專用數位電路,其結構與您的管線相符。

您可以在 PC 上建立和編輯 VisualApplets design(在 *.vad 檔案中的運算子、模組與連結)。隨後的 build 步驟會將該管線轉譯為硬體邏輯。

在 VisualApplets 中設計的影像處理管線

在這樣的 VisualApplets設計中,您可以從運算子庫中執行個體化運算子;設計中的每個運算子執行個體都稱為 module。模組透過連結相連,處理順序則取決於您如何安排和連接這些模組。模組與連結共同構成了一個影像處理管線,定義了像素資料如何在擷取、處理和輸出階段中移動。

當本教學指出某個模組在執行階段進行處理、緩衝、阻擋或傳輸資料時,是指從該模組產生的 FPGA 邏輯。VisualApplets 中的圖形模組描述了該硬體行為;它本身不處理執行階段相機資料。

您可以將可編輯的設計儲存為 *.vad 檔案。當您針對特定的目標 frame grabber 建置設計時,VisualApplets 會產生附檔名為 *.hap 的二進位硬體 applet 檔案。您可以將此檔案載入到 frame grabber 上。請勿將 *.hap 檔案視為可編輯的設計來源。您應始終變更 *.vad 設計並再次建置。在執行階段,您仍然可以變更應用程式或執行階段工具寫入裝置的動態寫入參數。

實務上的目標是硬體中的即時影像處理。雖然您作為 *.vad 專案在 PC 上編輯和驗證管線,但只有已建置的 *.hap 才會將該處理邏輯和資料流結構作為可執行的硬體帶入 FPGA 中。

關鍵詞

Build 意指將您在 VisualApplets 中的圖形化設計轉化為 frame grabber FPGA 可以執行的配置。
副檔名為 *.hap 的 hardware applet 就是該可執行的結果。
frame grabber 是電腦中的擴充板,用於接收相機資料、承載 FPGA 並執行您所建置的 applet。VisualApplets 本身並不包含 FPGA。

FPGA 技術#

field-programmable gate array (FPGA) 是一個包含大量可程式化邏輯元件的晶片。這些元件與晶片上的佈線可以進行配置,以在硬體中實現複雜的數位電路,從而並行執行許多操作。

當您針對目標 frame grabber 建置 VisualApplets 設計時,VisualApplets 會自動將您的運算子和連結對應至 FPGA 邏輯。您不需要自己實作該對應。VisualApplets 會處理用於佈局、繞線和位元串流產生的供應商專屬 FPGA 工具鏈(通常為 Xilinx Vivado)。請參閱基本設計概念以了解 PC 上的 *.vad 專案如何與配置 FPGA 的 *.hap 相互關聯。

除了通常用於建構組合邏輯電路的可程式化邏輯元件之外,FPGA 還提供用於時脈儲存的正反器、用於行緩衝器及其他晶片內建記憶體的block RAM,以及用於快速乘加及類似功能的 DSP 或算術片段。作為相同自動化建置流程的一部分,VisualApplets 會將運算子和連結對應至這些資源。您設計中的每個運算子都對應至具體的硬體,例如邏輯、記憶體、算術或其組合。

您的設計所需的FPGA 資源取決於使用的模組數量、選擇的運算子,以及您如何設定並行度、緩衝區大小和其他參數。若大量使用邏輯、記憶體或並行資料路徑,將增加資源消耗。若設計超出裝置的實作能力,編譯將會失敗,或者您可能無法達成時序收斂。當您執行「設計規則檢查第 2 級」(DRC Level 2)時,VisualApplets 會估算並回報 FPGA 資源消耗量。 請參閱《使用者手冊》中的「FPGA 資源估算」與「設計規則檢查」。若要進一步了解資源消耗的累積方式、適用規則,以及如何在設計選項間取得權衡,請另參閱 Parallelism 教學主題以及「記憶體元件」教學主題。

硬體中的管線執行#

在擷取卡上,內建的硬體 Applet 會將您的設計實作為管線化硬體路徑:像素資料以連續流動方式通過連結的模組階段。

您在「VisualApplets 」中繪製的管線,是 FPGA 上硬體路徑的模型:FPGA 會逐級處理資料,並以連續的流量將其傳遞至下游。此設計並未假設管線會在路徑上的每個階段儲存整張影像。生成的 FPGA 管線會依照此管線模型,在時脈週期內將資料從一個階段傳輸至下一個階段,相關詳情請參閱「管線概念教學」主題。

採用並行管線結構的設計

相較於典型的CPU工作流程——該流程通常會將大量資料塊傳輸至記憶體中,並主要依序執行指令——FPGA 能夠沿著管線以像素為單位並行處理與傳輸資料。相較於 GPU(後者在程式控制下針對資料執行多個執行緒)相比,FPGA 的管線運作模式更接近於固定的輸送帶。資料會依循您在設計中佈線所設定的處理階段依序移動。這正是為何技術文件中經常使用「管線」這個比喻的原因。

關鍵詞

  • 不妨將FPGA視為幀擷取卡上的晶片,在您於VisualApplets 中設計的處理路徑上,許多小型運算會同時執行。編譯過程會將該設計轉化為 FPGA 上的專用硬體邏輯。隨後,像素資料便會像輸送帶上的物品一樣流經這些硬體階段,這便是「管線」的概念。
  • CPU通常是依序執行各個步驟,並經常載入和儲存整塊資料。
  • 在程式的控制下,GPU 會在許多像素或執行緒上平行執行相同類型的運算。

時脈週期與時序#

FPGA 設計依賴時脈訊號來告知每個管線階段何時擷取、傳輸和處理資料。VisualApplets 與本教學將此時脈稱為 Base Design Clock。它是所產生 FPGA 管線的時脈,與相機像素時脈不同。時脈週期(clock cycle)即 Base Design Clock 的一個脈衝。在每個時脈上升緣,管線中的正反器會儲存其輸入資料並將其傳遞至下一個階段。

因此,時脈週期可以:

  • 定義時序:例如管線中的暫存器等所有元素。
  • 確保穩定的資料流,因為數值只會在可預測的時脈邊緣移至下一個階段。
  • 決定最大處理速度,因為 Base Design Clock 頻率必須夠慢,才能確保暫存器之間的所有組合邏輯在下一個週期開始前正確穩定。

換句話說,時脈節奏使整個硬體管線保持對齊。個別運算子也是管線化的:建置使用內部暫存器階段實作每個運算子,因此 FPGA 階段可以在每個時脈週期接受新的輸入,即使單個輸入需要幾個週期才能在其輸出端顯示結果。在管線填滿之後,輸出端的產出量仍然可以是每個週期一個結果,而從給定輸入到其結果的延遲可能會大於一個週期。這就是為什麼建置過程中的管線化和資源對應會直接影響可達到的基礎設計時脈頻率和產出量。

資訊

您可以在 Device Resources 中找到關於您的擷取卡的 Base Design Clock 頻率和其他硬體資源資訊。