管線概念#
如需正式的資料流模型,請參閱《使用者手冊》中的 Data Flow。如需如何端對端建置和驗證設計,請參閱 From Empty Design to Running Applet 教學主題。
模組、連結與管線結構#
您可以使用操作員庫中的 operators 來建置 VisualApplets 設計。每個放置的操作員實例都是一個 module。模組會公開 input 與 output 連接埠。您可以使用 links 連接連接埠。圖表中將每個連結顯示為箭頭。
VisualApplets 設計中的模組與連結共同構成影像處理 pipeline。建置作業會在擷取卡 FPGA 上將該圖形實作為硬體階段。處理順序遵循連接順序。分支與合併定義了圖形中的平行路徑與匯合點。

只要輸入資料可用,每個模組就會開始處理。當計算完成且輸出未被封鎖時,它會在輸出連結上轉發結果。在執行階段,此行為是由從模組產生的 FPGA 邏輯所實作,而不是由 VisualApplets 中的圖形符號所實作。因此,管線結構定義了資料分割的位置、匯合的位置,以及哪些操作員以串列或並行方式執行。
像素不會以完整影像的形式一次進入擷取卡。相機會將它們 one after another 傳輸至擷取路徑中 — 或者由 applet 內部的影像來源 one after another 產生它們。這些像素隨後會以相同的順序依序通過管線階段:

關鍵詞
您可以將像素想像成道路上的車輛:牠們沿著路徑互相追隨。在任何時刻,不同的車輛(像素)位於道路(管線階段)上的不同位置。道路本身就是您在 VisualApplets 設計中佈線的管線結構。建置後,該道路是擷取卡 FPGA 上的硬體,而不是 VisualApplets 編輯器內的路徑。
在此類比中,Parallelism 是道路上的車道數:車道越多,就能有更多車輛(像素)同時向前移動。
管線輸入與輸出#
每個管線至少包含一個將資料饋送至設計中的 source,以及一個或多個離開 FPGA 處理路徑的 sinks。來源與儲槽通常是 M 型操作員。可用的操作員取決於您的目標硬體平台。
Inputs#
資料可以透過下列方式進入管線:
- From a camera or other image source:特定於平台的相機操作員將來自連接相機的連續像素串流傳送至擷取路徑中。
- 在 applet 內部產生:諸如
CreateBlankImage或CoefficientBuffer之類的操作員無需即時相機即可建立或播放影像資料。您可以使用這些來源來進行 Test Patterns、從主機上傳的參考資料,或是未從相機擷取的設計。
信號路徑也可以從數位輸入開始(例如透過 GPI)或從 applet 內部信號產生器開始。關於相機來源在流量控制下與可停止的 applet 內部來源有何不同,請參閱 可停止與不可停止的資料串流 教學主題。
Outputs#
處理後的結果可以透過以下方式離開管線:
- 透過 DMA 傳送至主機:
DmaToPCoperator 會透過直接記憶體存取將影像資料傳輸至主機 PC 記憶體。這是主機軟體擷取處理後影像的常用路徑。 - 透過 GPO 發出信號:
GPOoperator 會驅動擷取卡上的數位輸出接腳。請將此路徑用於主機 PC 外部的觸發、狀態或其他硬體控制信號。 - 向主機發送 Event:
EventToHost進行明確的生命週期管理即呼叫EventDataToHostoperators 會向主機發送軟體 Event。主機應用程式透過 Framegrabber API 接收這些 Event,並可對 applet 中的狀況做出反應。EventToHost會在信號輸入的上升緣引發 Event,且不帶有負載資料。EventDataToHost會在引發 Event 的同時帶有可設定的資料負載。 - 僅有暫存器資訊:某些結果會作為可讀取的值保留在擷取卡上。諸如
GetStatus等 operators 會儲存主機軟體以動態參數讀取的值。當應用程式僅需要狀態或測量數值時,不需要影像串流或 DMA 傳輸。
一個設計可以結合其中多個輸出。例如,一個分支可以透過 DmaToPC 傳送影像,而另一個分支則在條件發生時觸發 GPO 接腳或向主機發送 Event。
如需 operator 的詳細資訊,請參閱 Operator 參考手冊中的 DmaToPC、Operator 參考手冊中的 GPO、Operator 參考手冊中的 EventToHost、Operator 參考手冊中的 EventDataToHost 以及 Operator 參考手冊中的 GetStatus。
未緩衝的管線資料流#
大多數模組內部並不會儲存完整的影像。它們會計算輸出值,並在資訊可用時立即轉發。
並非所有 operators 都會在資料到達輸入端時立即輸出結果。 M 型 特別是 operators 可能會延遲輸出。這些不只是緩衝 operators(例如 LineBuffer 或 ImageFifo )——許多濾波和同步 operators 也屬於 M-type。延遲的大小取決於 operator。如需詳細資訊,請參閱 Operator 類型與同步 教學主題與 延遲 教學主題。
緩衝 operators 會儲存資料,直到下游模組能夠接收為止。
這種 unbuffered 行為可保持較低的 latency。當同一格畫格的其他像素仍在相機輸入端時,某個像素就已經到達輸出端。擷取、處理和 DMA 可以時間重疊。
關鍵詞
可以將產生的 FPGA 管線想像成一個帶有分支和閥門的管道系統。只要有空間,水就會流過管道。緩衝區運算子就像一個小水庫,當排水速度跟不上時就會進行 Fill。
關於路徑中延遲的累積方式,以及頻寬和延遲之間的差異,請參閱 Latency 教學主題。
硬體中的並行處理#
在擷取卡 FPGA 上,所有管線階段都會同時執行。這與通常大多依序執行指令的典型 CPU 程式不同。
當一個 FPGA 模組處理一個像素時,其他模組會在路徑後方處理不同的像素。管線填滿後,多個模組會同時處理同一張影像。FPGA 將您的 VisualApplets 設計實作為專用硬體,其結構與管線圖相符。
關鍵詞
在從 VisualApplets 設計產生的 FPGA 硬體中,處理路徑會在擷取卡上實作為專用硬體邏輯。資料像輸送帶上的物品一樣在這些硬體階段中移動。CPU 通常會載入整塊資料,並依序完成各個步驟。
關於建置的 applet 如何與可編輯的 *.vad 設計關聯的詳細資訊,請參閱 VisualApplets Fundamentals 教學主題。
傳輸量與瓶頸#
Throughput 是流經管線的持續資料速率。在 VisualApplets 設計中,它與所產生 FPGA 硬體連結上的 bandwidth 息息相關。
設計中的運算子數量不會降低 Throughput。所有產生的 FPGA 階段都可以並行執行。並行分支的數量也不會降低 Throughput。分支增加了硬體資源,但它們本身不會減慢個別路徑上的資料速率。如您在以下兩個設計中所見,兩個擷取路徑可以使用不同數量的運算子,卻仍能提供相同的 Throughput:

Throughput 取決於以下因素:
- Link capacity:模組之間的連線可以承載多少資料。容量由模組和連結的參數化設定,特別是 Parallelism、Bit Width 和最大影像尺寸,以及基礎設計時脈(Base Design Clock)。如需有關連結和模組屬性的詳細資訊,請參閱 Parameterization 教學主題。
- 下游就緒狀態:模組是否能持續接受資料。如果模組無法永久接收資料(例如因為緩衝區已滿或後續模組遭到封鎖),流量控制將會停止資料流,進而導致封鎖及/或背壓(backpressure)。
- 運算子限制:某些運算子無法處理其輸入連結所提供的完整頻寬。Operator Reference 記載了每個受影響運算子的這些限制。
以像素速率(每秒像素數)表示的連結 bandwidth 遵循以下公式:
頻寬 = Parallelism × 基礎設計時脈 (Base Design Clock)
此像素速率公式不包含 Bit Width 或核心大小(kernel size)。較寬的 Bit Width 或較大的核心會增加每個時脈的資料量(位元或數值),這對 DRAM 存取和 FPGA 資源很重要,但它不會改變這個像素速率數字。關於 DRAM 資料寬度,請參閱 Memory Elements 教學主題。關於核心與像素速率頻寬的比較,請參閱 Working with Kernels 教學主題。
基礎設計時脈取決於您的擷取卡平台。請在 Device Resources 中查詢該數值。
最大影像尺寸也不會出現在此像素速率公式中,但它們仍然決定了設計:它們限制了管線可以處理的影像大小。結合 Parallelism 與 Bit Width,這些連結屬性必須與您的攝影機或線掃描來源相符。
路徑的 bottleneck 是該路徑沿線最低的頻寬。設計的整體 Throughput 永遠受限於這個最窄點。單一窄連結或頻寬受限的運算子會限制同一路徑上位於其上游的所有內容。因此,Throughput 是由路徑上的最窄頻寬以及下游模組是否持續接受資料來決定的。
設計指南
僅將 Parallelism 和連結屬性設定為支援您的攝影機或線掃描來源所需的速率即可。進一步提高這些數值會消耗額外的 FPGA 資源,如果其他元件已經是 bottleneck,則無法改善 Throughput。
有些運算子會改變其輸入與輸出之間的 Parallelism。其他運算子則會減少像素數量,例如透過裁切影像。因此,所需的輸出頻寬可能與輸入頻寬不同。在可行的情況下,運算子會自動調適 Parallelism。如果無法進行調適,VisualApplets 會回報 Design Rules Check 錯誤。
如需有關計算和調整 Parallelism 的資訊(包括如何計算設計所需頻寬的範例,以及如何在運算子合併資料流時進行頻寬 bottleneck 疑難排解),請參閱 Parallelism 教學主題和 Troubleshooting Bottlenecks 教學主題。
在設計中視覺化呈現傳輸量#
您可以透過使用 Link Info 和 Throughput 標誌,在您的設計中顯示 Parallelism 和資料傳輸量。請使用工具列中的下列按鈕啟用這些標誌:

因此,Link Info 和 Throughput 標誌將會顯示在您的設計中:

比較路徑沿線的數值以找出最窄的連結。除非更下游的運算子跟不上,否則該連結就是該路徑的 bottleneck。
資訊
Throughput 旗標並未顯示所有效能限制。例如,當多個 DRAM 運算子共用相同的記憶體介面時,來自 Shared Memory 的產生物件 DRAM 頻寬限制不會反映在 Throughput 顯示中。其他 DRAM 效率低下的情況,以及封鎖和潛在的 死結(deadlocks),也沒有顯示出來。如需關於 Shared Memory 使用方式和 DRAM 頻寬規劃的指導,請參閱 Memory Elements 教學主題。如需死結的詳細資訊,請參閱 Operator Types and Synchronization 教學主題。
連結屬性與影像格式#
Throughput 和資料格式取決於 link properties 和 module properties。除了前面涵蓋的容量相關屬性(Parallelism、Bit Width 和最大影像尺寸)之外,其他典型屬性還包括影像協定和 Color Format。
Link properties 會在管線中傳遞。您可以在攝影機輸出連結或早期處理階段上設定許多屬性。它們適用於所有下游連結,直到有運算子變更它們為止。模組參數必須與所連接連結上的 link properties 相符。因此,上游連結上的變更會影響所有後續的運算子,直到另一個運算子重設屬性為止。
有關連結屬性與傳播規則的完整清單,請參閱《使用者手冊》中的 Parameterization 教學主題與 Rules of Links。
image protocol 定義了連結上資料串流的結構。VisualApplets 支援不同的資料類型 / 串流格式:
| Protocol | 典型用途 |
|---|---|
VALT_IMAGE2D | 具備行結束與張影格結束標記的二維影像,例如來自面陣相機的影像。影格內的各行可以有不同的長度。 |
VALT_LINE1D | 無盡或連續的行資料,例如來自線陣相機的資料。 |
VALT_PIXEL0D | 不具備影像尺寸資訊的非結構化連續像素串流。 |
VALT_SIGNAL | 在每個時脈週期都有效的單位元訊號,例如在觸發邏輯中。 |
像素會以掃描順序在管線中移動:在行內由左至右,然後在影格內由上至下。某些相機來源會使用不同的順序。當您的來源不符合此慣例時,請使用適當的運算子來修正順序。
如需有關 image protocols 與像素順序的詳細資訊,請參閱《使用者手冊》中的 Image Protocols, Image Dimensions and Data Structure。
來源是否能在流量控制下暫停,會影響您佈線管線的方式。相機運算子屬於non-stoppable來源。您通常會在它們之後直接放置緩衝區運算子。如需詳細資訊,請參閱下方的 Flow Control, Blocking, and Backpressure 以及 Stoppable and Non-Stoppable Data Streams 教學主題。
流量控制、封鎖與背壓#
產生的 FPGA 管線會在各個階段之間套用flow control。當某個階段尚未準備好接受更多資料時,它可以block its input:它會停止向上一階段請求資料,而上一階段也會停止輸出。這種阻擋會以backpressure的形式向後傳播穿過管線。請注意,只有 M 型運算子才能阻擋輸入。VisualApplets 中的圖形模組描述了此硬體行為;它們本身並不會套用流量控制。
假設 DmaToPC 無法以足夠的速度將資料傳輸至主機電腦。它會不時阻擋其輸入。阻擋訊號會向上傳播至緩衝區運算子。當阻擋處於作用中狀態時,緩衝區會停止轉發資料。它會儲存進來的像素,且其 Fill 等級會上升。當相機停止傳送資料時,緩衝區會再次排空。

緩衝區運算子將以不同速率處理的階段進行解耦。如果在 non-stoppable 相機來源後方沒有緩衝區,下游模組的阻擋將無法減慢相機串流的速度。因此,設計可能會無法通過 Design Rules Check 或在硬體上發生死結。
關於運算子類型以及阻擋在 O 型、M 型和 P 型模組上的運作方式,請參閱 Operator Types and Synchronization 教學主題。
關鍵詞
Blocking 意指產生的 FPGA 階段無法接受進一步的輸入資料,例如因為後繼者不接受資料或因為階段內部的處理需要更多時間。VisualApplets 中的模組圖示代表該階段;圖示本身並不會等待或阻擋。
Backpressure 是背後的機制:「壓力」會向後作用。如果某個階段接收資料的速度夠快,上游階段就必須等待且資料流會遭到阻擋。實務上:下游階段無法接受資料 (例如因為緩衝區已滿),因此上游階段必須等待。
本主題中的 Bandwidth 是指連線的像素速率:每秒有多少像素可以透過連結傳輸。Bit Width 與核心大小會改變這些像素所攜帶的資料量,這是不同的數量。請參閱 Parallelism 教學主題。
相關主題#
- 《使用者手冊》中的 Data Flow — 正式的管線資料流模型
- VisualApplets Fundamentals 教學主題 — 設計與硬體 applet 的比較
- 從空白設計到執行中的 Applet 教學主題 — 設計、DRC、模擬與建置
- Parallelism 教學主題 — 頻寬與 Parallelism
- Latency 教學主題 — 管線沿線的延遲
- Parameterization 教學主題 — 連結屬性與影像格式
- Stoppable and Non-Stoppable Data Streams 教學主題 — 流量控制與相機來源
- Operator Types and Synchronization 教學主題 — 運算子類型與阻擋
- Operator 參考手冊