可停止與不可停止的資料流#
關鍵詞
不可暫停的串流會持續執行。不可暫停的來源無法被所產生的 FPGA 設計之流量控制邏輯暫停。典型的範例是持續傳送像素的camera。相對地,當下一個運算子尚未準備好時,可暫停的串流可以暫停。camera 與下游處理之間的緩衝區通常會將不可暫停的串流轉變為可暫停的串流。
因此,請在相機後方放置緩衝區。為了吸收相機突發資料,建議優先使用 DRAM 運算子: LineBuffer 在 imaFlex 上,或是 ImageBuffer 在 microEnable 5 上。請僅將 ImageFifo (FPGA 內部 Memory)用於小型解耦,例如在 SYNC之前的短暫延遲。如果您使用 ImageFifo 在不可停止的資料流上,請將其與 Overflow operator 結合使用,或者改用 ImageFlowControl 改為。請參閱 Memory 元素 教學主題。
關於連結連線的正式規則,請參閱使用者手冊中的 Infinite Sources / Connecting Cameras。關於運算子形狀以及模組如何暫停或保留資料流,請參閱 Operator Types and Synchronization 教學主題。
可暫停與不可暫停的串流#
產生的 FPGA pipeline 會控制模組之間的資料流。當模組尚未準備好接受更多資料時,可以 pause its input。因此,下游模組可以在有限的時間內放慢串流速度。VisualApplets 不會在編輯器中套用該流量控制,而是由 FPGA 上的建置 applet 來執行。
當流量控制可以在不破壞設計的情況下保留串流時,該串流即為可暫停。當來源無法被流量控制停止時,該串流即為不可暫停。即使下一個模組正忙碌,來源仍會持續傳遞資料。
不可暫停的串流也稱為無限來源。此名稱是指流量控制,而非無限的影像大小。串流沒有內部緩衝區可讓產生的 FPGA 設計暫停來源。
VisualApplets 設計中的不可暫停來源#
Camera operators 是最常見的不可停止來源。它們從相機接收像素並將其轉發到輸出鏈路。它們沒有可以吸收反壓的緩衝區,也無法命令相機停止傳輸。
相對地,可停止的來源包含諸如以下的 operator: CreateBlankImage 和 CoefficientBuffer.
連接不可暫停的來源#
所有 O-type 和 P-type 運算子都可以位於不可停止來源的下游。無限來源屬性會在設計中透過這些運算子傳播,直到某個模組將資料流轉換為可控制的資料流。
僅部分 M型 運算子直接接受不可停止來源。這些主要是 記憶體運算子 例如 LineBuffer, ImageBuffer, ImageFifo的狀態,以及 FrameBuffer。特定的 M-type 運算子是否接受無限來源,記載於運算子說明文件以及 Operator Reference.
如果您將不可停止來源連接到不接受無限來源的 M-type 運算子,Design Rules Check Level 2 會回報 infinite source 錯誤。請在建置 applet 之前修正此錯誤。
如需了解 M-type、O-type 和 P-type 的行為以及流量控制規則,請參閱Operator Types and Synchronization 教學主題。
您有兩種選項可控制無限來源:
- 透過緩衝區 operator,例如
LineBuffer,ImageBuffer或ImageFifo - 透過
Overflowoperator。
對於相機路徑,Basler 建議將 DRAM 緩衝區(LineBuffer 或 ImageBuffer)作為預設值。請僅將 ImageFifo 僅適用於小型解耦任務。請參閱本主題開頭的「關鍵詞」方塊以及 Memory 元素 教學主題。
資訊
影像 Overflow 中的 operator 同步化 library 會裁切無法處理的畫面。這會導致不同的畫面長度,並非所有下游運算子都能處理這種情況。切勿將此運算子與 arithmetic 溢位 (不再符合 Bit Width 的結果;請參閱 位元 Arithmetic 教學主題)或與 Overflow status parameter (緩衝區已滿;請參閱緩衝區運算子上的 Memory 元素 教學主題)。
影像 Overflow operator 本身不會緩衝資料。因此,Basler 建議您始終將 Overflow operator 與 buffer operator 一起使用。
使用緩衝區運算子#
緩衝區 operator 會將不可停止的資料流轉換為可控制的資料流。即使下游模組尚未準備好接受更多資料,它們也會在輸入端接受資料。它們會在內部儲存資料,並在下游模組準備好時予以轉發。
典型的解耦運算子包含 LineBuffer, ImageBuffer, ImageFifo,以及支援無限來源的其他記憶體運算子。當您需要吸收相機突發資料(bursts)以及下游處理或LineBuffer 或 ImageBuffer必須套用流量控制時,請在不可停止來源之後直接放置 DRAM 緩衝區( DmaToPC )。請使用 ImageFifo 僅在所需緩衝區較小時使用。
資訊
影像 ImageFifo 運算子僅快取圖像的小部分。因此,存在發生 FIFO 溢位(overflow)的重大風險,且此情況不會在內部被偵測或處理。
如果你想使用 ImageFifo operator 來緩衝無法停止的串流,Basler 建議您將 ImageFifo 與前方的 Overflow 。這能確保妥善處理進來的資料,並防止發生不受控制的溢位狀況。
作為將 Overflow 運算子與記憶體運算子結合的替代方案,你可以使用 ImageFlowControl 運算子以獲得更安全、更穩健的處理方式。它結合了 ImageFifo 的緩衝功能與內建的溢位處理機制。
典型的擷取路徑如下:
Camera → LineBuffer 或 ImageBuffer (DRAM) → 後續處理 → DmaToPC
僅適用於小型解耦,您可以使用 ImageFifo 代替 DRAM 緩衝區,最好與 Overflow 搭配使用,或使用 ImageFlowControl。

若沒有緩衝區,DmaToPC 或其他會暫停其輸入的運算子將無法調節相機資料流。設計將無法通過 DRC 或在硬體上冒著死結的風險。
當使用緩衝區運算子來控制無限來源時,你必須將緩衝區運算子的 InfiniteSource 參數設定為 ENABLED.

如果已啟用 InfiniteSource 緩衝區運算子的參數設為 DISABLED,DRC Level 2 失敗:

關於緩衝區大小調整、 FillLevel,以及 RAM 使用量,請參閱 Memory 元素 教學主題。
設定 InfiniteSource 參數#
許多緩衝區運算子都提供 InfiniteSource參數。當運算子輸入連接至不可停止的來源時,請將其設為 ENABLED 。當輸入來自可停止的資料流時,請將其設為 DISABLED 。
請遵循以下規則:
- 設定
InfiniteSource設定為ENABLED僅當模組輸入實際連接至不可停止的來源時。 - 設定
InfiniteSource設定為DISABLED在接收來自可停止串流之資料的緩衝區運算子上。 - 如果不確定,請先設定
DISABLED首先。執行 Design Rules Check Level 2 並調整標記有檢查旗標的模組。
若要變更模組參數,請按兩下該模組以開啟 Module Properties。使用 Apply 套用參數變更。有關 link properties 與模組參數,請參閱 Parameterization 教學主題。
當下游處理可以暫停時使用 Overflow 運算子#
影像 Overflow operator 會將無法停止的輸入 2D 串流與可能會暫時阻塞的處理程序進行解耦。它本身沒有內部緩衝區,因此 Basler 建議您始終將 Overflow operator 與 buffer operator 一起使用。當緩衝區因輸出資料被阻擋而 Fill 時, Overflow 運算子會切割目前的畫面、將其標記為損毀,並可跳過後續畫面,直到輸出再次接受資料為止。
使用 Overflow 當來源無法停止且下游運算子暫停資料流的時間超過行或畫面緩衝區所能涵蓋的範圍時。

當您將 Overflow 運算子放置在不可停止的來源與記憶體運算子(例如 FrameBuffer,請將 InfiniteSource )之間時,請將該記憶體運算子上的 DISABLED。Vignetting Correction Overflow operator 已經處理來自非停止串流的溢位。在此拓撲中對記憶體模組啟用 InfiniteSource 設為
影像 Overflow operator 在切割影格時可能會產生非矩形影格。請確認下游 operator 是否能承受縮短的最後一行。請參閱 operator 說明 Overflow Operator Reference 中的。
資訊
作為將 Overflow 運算子與記憶體運算子結合的替代方案,你可以使用 ImageFlowControl 運算子以獲得更安全、更穩健的處理方式。它結合了 ImageFifo 的緩衝功能與內建的溢位處理機制。
使用 DRC 驗證您的設計#
在連接來源、buffer 和 DMA 路徑後,執行 Analysis → Design Rules Check Level 2。Level 1 也會在模擬與建置前自動執行。
DRC Level 2 會檢查擴充規則並估算 FPGA 資源。當不可停止的來源傳送資料給不接受無限來源的 M 型 operator,或者當 InfiniteSource 設定與實際連接不符時,它會回報無限來源錯誤。
讀取 DRC log 並修正反白顯示的模組或連線。如需完整的工作流程,請參閱 From Empty Design to Running Applet 教學主題。
典型管線範例#
透過緩衝區從 camera 到 DMA#
- 放置一個 camera operator 作為來源。
- 插入
LineBuffer或ImageBuffer於影像路徑上(或僅在需要小型解偶時使用ImageFifo;請參閱上述說明)。 - 設定
InfiniteSource設定為ENABLED於緩衝區上。 - 連接處理運算子與
DmaToPC. - 執行 DRC Level 1 與 Level 2,然後進行模擬或建置。
若沒有步驟 2 和步驟 3,DRC Level 2 會針對非法連接回報無限來源錯誤。
具備 Overflow 與緩衝區的不可暫停來源#
- 將不可停止的來源連接至
Overflow. - 連接
Overflow設定為ImageFifo,LineBuffer,或另一個緩衝區運算子。 - 設定
InfiniteSource設定為DISABLED位於以下項目之後的緩衝區上Overflow. - 連接後續處理並執行 DRC Level 2。確認沒有無限來源或
InfiniteSource不匹配的情況殘留。

Overflow 在其輸出被抑制時會切割或略過影格。下列緩衝區會儲存資料,供可能會暫停的下游處理使用。若沒有該緩衝區, Overflow 本身無法將不可停止的來源與暫停的下游模組解耦。
相關主題#
- 使用者手冊中的 Rules of Links — Infinite Sources / Connecting Cameras — 正式連線規則
- Operator Types and Synchronization 教學主題 — M 型 operator 與阻擋
- Memory 元素 教學主題 — buffer operator 與
InfiniteSource - 參數化 教學主題 —
InfiniteSource以及相關模組參數 - Pipeline Concept 教學主題 — 流程控制、阻擋與背壓
- 教學主題 From Empty Design to Running Applet — DRC、模擬與建置