跳至內容

可停止與不可停止的資料串流#

本主題說明當產生的 FPGA 管線套用 流量控制時,影像資料串流的運作方式。閱讀本主題後,您將瞭解 可暫停 進行明確的生命週期管理即呼叫 不可暫停 串流之間的區別,以及 無限來源 (例如相機運算子)如何融入設計中,以及如何使用緩衝區運算子、 InfiniteSource 參數與 Overflow 運算子來避免連線錯誤與死結。

關鍵詞

不可暫停串流會持續執行。不可暫停的來源無法被所產生的 FPGA 設計之流量控制邏輯暫停。典型的例子是不斷發送像素的相機。相對地,當下一個運算子尚未準備好時,可暫停串流可以暫停。相機與下游處理之間的緩衝區通常會將不可暫停的串流轉變為可暫停的串流。

因此,請在相機之後放置緩衝區。若要吸收相機突發資料,建議優先使用 DRAM 運算子: LineBuffer 在 imaFlex 上,或 ImageBuffer 在 microEnable 5 上。僅將 ImageFifo (FPGA 內部記憶體)用於小規模的解耦,例如在以下情況之前的短暫延遲 SYNC。如果您在 ImageFifo 不可停止的串流上使用,請將其與 Overflow 運算子結合,或改用 ImageFlowControl 。請參閱 Memory 元素 教學主題。

如需有關鏈結連接的正式規則,請參閱使用者手冊中的 Infinite Sources / Connecting Cameras。如需有關運算子形狀以及模組如何暫停或保留資料流的資訊,請參閱 Operator Types and Synchronization 教學主題。

可暫停與不可暫停的串流#

產生的 FPGA 管線會控制模組之間的資料流。當運算子尚未準備好接受更多資料時,它可以暫停其輸入。因此,下游運算子可以在有限的時間內減慢串流速度。VisualApplets 不會在編輯器中套用該流量控制,而是由 FPGA 上的建置 applet 來執行。

當流量控制可以在不破壞設計的情況下阻擋串流時,該串流即為可停止的 (stoppable)。當來源無法被流量控制停止時,該串流即為不可停止的 (non-stoppable)。即使下一個模組忙碌,來源仍會持續傳送資料。

不可停止的串流也稱為無限來源 (infinite sources)。這個名稱是指流量控制,而非無限的影像大小。該串流沒有內部緩衝區可讓產生的 FPGA 設計暫停來源。

VisualApplets 設計中的不可暫停來源#

相機運算子是最常見的不可停止來源。它們接收來自相機的像素並將其轉發到輸出鏈結。它們沒有可以吸收背壓 (backpressure) 的緩衝區,也無法命令相機停止傳輸。

相比之下,可停止的來源包含諸如下列的運算子: CreateBlankImage 進行明確的生命週期管理即呼叫 CoefficientBuffer.

連接不可暫停的來源#

所有 O-type 和 P-type 運算子都可以位於不可停止來源的下游。無限來源屬性會在設計中的這些運算子之間傳播,直到某個模組將串流轉換為可控制的 (controllable) 串流。

只有某些 M 型 運算子直接接受不可停止的來源。這些主要是 記憶體運算子 例如 LineBuffer, ImageBuffer, ImageFifo以及 FrameBuffer。特定的 M-type 運算子是否接受無限來源,記錄在運算子說明以及 Operator 參考手冊.

如果您將不可停止的來源連接到不接受無限來源的 M-type 運算子,設計規則檢查層級 2 (Design Rules Check Level 2) 將回報無限來源 (infinite source) 錯誤。請在建置 applet 之前修正此錯誤。

如需 M-type、O-type 和 P-type 的行為以及流量控制規則,請參閱 Operator Types and Synchronization 教學主題。

您有兩個選項可控制無限來源:

  • 使用緩衝區運算子,例如 LineBuffer, ImageBuffer,或 ImageFifo
  • 透過 Overflow 的輸出連結處降低至

對於相機路徑,Basler 建議將 DRAM 緩衝區(LineBuffer 或 ImageBuffer)作為預設值。請僅將 ImageFifo 用於小型解耦任務。請參閱本主題開頭的「關鍵詞」方塊與 Memory 元素 教學主題。

資訊

當 Overflow 運算子位於 同步 程式庫會裁切無法處理的畫面。這會導致不同的畫面長度,且並非所有下游運算子都能處理此情況。切勿將此運算子與 Arithmetic 溢位 (不再符合 Bit Width 的結果;請參閱 位元 Arithmetic 教學主題)或透過 Overflow 狀態參數 用於緩衝區運算子(緩衝區已滿;請參閱 Memory 元素 教學課程主題)。

當 Overflow 運算子本身不會快取資料。因此,Basler 建議將 Overflow 運算子與緩衝區運算子結合使用。

使用緩衝區運算子#

緩衝區運算子能將不可停止的資料流轉化為可控的資料流。即使下游模組尚未準備好接收更多資料,它們仍能接受輸入端的資料。它們會在內部儲存資料,並在下游模組準備就緒時進行轉發。

典型的解耦運算子包括 LineBuffer, ImageBuffer, ImageFifo以及其他支援無限來源的 Memory 運算子。當您需要吸收相機突發資料,且下游處理或LineBuffer 或 ImageBuffer) 直接放置在不可停止的來源之後, DmaToPC 必須套用流控制。僅在所需緩衝區較小時使用 ImageFifo 。

資訊

當 ImageFifo 運算子僅會快取影像的一小部分。因此,存在很大的 FIFO 溢位風險,且該風險不會在內部被偵測或處理。

如果您想要使用 ImageFifo 運算子來快取不可停止的資料流,Basler 建議將 ImageFifo 與前置的 Overflow 運算子結合使用。這可確保正確處理送入的資料,並防止發生不受控制的溢位狀況。

作為將 Overflow 運算子與 Memory 運算子結合的替代方案,您可以使用 ImageFlowControl 運算子以獲得更安全、更穩健的處理方式。它結合了 ImageFifo 的緩衝功能與整合式溢位處理機制。

典型的擷取路徑如下:

Camera → LineBuffer 或 ImageBuffer (DRAM) → 進一步處理 → DmaToPC

若僅需進行小規模解耦,您可以使用 ImageFifo 代替 DRAM 緩衝區,最好與 Overflow 搭配使用,或者使用 ImageFlowControl。

使用緩衝區運算子控制無限來源

若沒有緩衝區,DmaToPC 或其他會暫停其輸入的運算子將無法調節相機資料流。此設計將無法通過 DRC 驗證,或者在硬體上產生發生死結的風險。

當使用 buffer operator 來控制無限來源時,您必須將 InfiniteSource 將緩衝運算子的參數設定為 ENABLED.

將 InfiniteSource 設為 ENABLED 的 Buffer Operator

若 buffer operator 的 InfiniteSource 參數設為 DISABLED,則 DRC Level 2 將會失敗:

將 InfiniteSource 設為 DISABLED 的 Buffer Operator

關於 buffer sizing、 FillLevel以及 RAM 使用量,請參閱 Memory 元素 教學主題。

設定 InfiniteSource 參數#

許多 buffer operator 都會公開 InfiniteSource參數。當 operator 輸入連接至無法停止的來源時,請將其設為 ENABLED 。當輸入來自可停止的串流時,請將其設為 DISABLED 。

請遵循以下規則:

  • 僅當模組輸入確實連接至無法停止的來源時,才設定 InfiniteSource 設為 ENABLED 。
  • 僅當模組輸入確實連接至無法停止的來源時,才設定 InfiniteSource 設為 DISABLED 用於接收來自可停止串流之資料的 buffer operator 上。
  • 如果不確定,請先設定 DISABLED 。執行 Design Rules Check Level 2 並調整檢查標記出的模組。

若要變更模組屬性,請按兩下該模組以開啟 Module Properties。使用 Apply 套用參數變更。如需連結與模組屬性,請參閱 Parameterization 教學主題。

當下游處理可以暫停時使用 Overflow 運算子#

當 Overflow operator 將無法停止的進來 2D 串流與可能會暫時阻塞的處理常式進行解耦。它本身沒有內部緩衝區,因此 Basler 建議將 Overflow operator 與 buffer operator 結合使用。當緩衝區因輸出資料被阻塞而 Fill 時, Overflow operator 會切斷目前的畫面、將其標記為損毀,並可略過後續畫面,直到輸出再次接受資料為止。

使用 Overflow 當來源無法停止且下游 operator 可能會暫停資料流超過行或畫面緩衝區所能涵蓋的時間時。

使用 Overflow Operator 控制無限來源

當您將 Overflow operator 置於不可停止的來源與記憶體 operator(例如 FrameBuffer)之間時,請將該記憶體 operator 上的 InfiniteSource 參數設定為 DISABLED中。 Overflow 運算子已經處理來自非可停止串流的溢位。在此拓撲中啟用 InfiniteSource 該拓撲中的記憶體模組設定錯誤並會觸發 DRC 錯誤。

當 Overflow operator 在切割影格時可能會產生非矩形影格。請確認下游 operator 能夠容忍縮短的最後一行。請參閱 operator 說明 Overflow 。

資訊

作為將 Overflow 運算子與 Memory 運算子結合的替代方案,您可以使用 ImageFlowControl 運算子以獲得更安全、更穩健的處理方式。它結合了 ImageFifo 的緩衝功能與整合式溢位處理機制。

使用 DRC 驗證您的設計#

在連接來源、緩衝區和 DMA 路徑後,執行 Analysis → Design Rules Check Level 2。Level 1 也會在模擬和建置之前自動執行。

DRC Level 2 會檢查擴充規則並估算 FPGA 資源。當不可停止的來源饋送至不接受無限來源的 M 型 operator,或者當 InfiniteSource 設定與實際連接不符時,它會回報無限來源錯誤。

讀取 DRC log 並修復反白顯示的模組或連結。如需完整的作業流程,請參閱 From Empty Design to Running Applet 教學主題。

典型管線範例#

透過緩衝區從相機傳輸至 DMA#

  1. 放置一個 camera operator 作為來源。
  2. 插入 LineBuffer 或 ImageBuffer 在影像路徑上(或 ImageFifo 僅用於小型解耦;見上文)。
  3. 僅當模組輸入確實連接至無法停止的來源時,才設定 InfiniteSource 設為 ENABLED 在緩衝區上。
  4. 連接處理 operator 與 DmaToPC.
  5. 執行 DRC Level 1 與 Level 2,然後進行模擬或建置。

如果沒有步驟 2 和步驟 3,DRC Level 2 會針對非法連接回報無限來源錯誤。

具有 Overflow 與緩衝區的不可暫停來源#

  1. 將不可停止的來源連接至 Overflow.
  2. 連接 Overflow 設為 ImageFifo, LineBuffer或其他緩衝區 operator。
  3. 僅當模組輸入確實連接至無法停止的來源時,才設定 InfiniteSource 設為 DISABLED 在下列項目之後的緩衝區上 Overflow.
  4. 連接進一步的處理並執行 DRC Level 2。確認沒有無限來源或 InfiniteSource 不匹配的情況殘留。

具有溢位 operator 與緩衝區的無限來源

Overflow 當其輸出被抑制時會切割或略過影格。下列緩衝區會為可能暫停的下游處理儲存資料。若沒有該緩衝區, Overflow 單獨使用無法將不可停止的資料來源與暫停的下游模組進行解耦。