跳至內容

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

本主題說明當生成的 FPGA 管線應用時,影像資料流的運作方式 流量控制. 閱讀完這個主題後,您便會了解 不可阻擋的 進行明確的生命週期管理即呼叫 勢不可擋 串流,如何 無窮無盡的來源 例如攝影師如何融入整體設計,以及如何運用緩衝操作員,這些 InfiniteSource 參數,以及該 Overflow 運算子,以避免連線錯誤和死鎖。

關鍵詞

不可中斷的資料流會持續流動。不可中斷的資料源無法透過生成的 FPGA 設計中的流量控制邏輯暫停。典型的例子是持續傳送像素資料的攝影機。相較之下,可中斷的資料流在下一道處理單元尚未準備就緒時,可以暫停。在攝影機與下游處理之間設置緩衝區,通常能將不可中斷的資料流轉變為可中斷的資料流。

因此,在攝影機之後應放置一個緩衝區。為了吸收攝影機的連續拍攝資料,建議選用 DRAM 運算子: LineBuffer 在 imaFlex 上,或 ImageBuffer 在 microEnable 5 上。使用 ImageFifo (FPGA 內部記憶體)僅用於小幅去耦,例如在……之前的一段短暫延遲 SYNC. 如果您使用 ImageFifo 以一股無法阻擋的洪流,將其與 Overflow 運算子,或使用 ImageFlowControl 而是。請參閱 Memory 元素 教學主題。

有關連結連接的正式規則,請參閱《使用者手冊》中的「無限來源/連接攝影機」。關於運算子形狀,以及模組如何暫停或延遲資料流,請參閱「運算子類型與同步」教學主題。

可中斷與不可中斷的資料流#

生成的 FPGA 管線負責控制模組間的資料流。當某個運算子尚未準備好接收更多資料時,可暫停其輸入。因此,下游的運算子可在有限時間內減緩資料流的速度。VisualApplets 在編輯器中並未實施此流量控制;實際執行此控制的是建置於 FPGA 上的小程式。

當流量控制能夠在不破壞設計的前提下阻擋資料流時,該資料流即為可阻擋的;當流量控制無法阻止資料源時,該資料流即為不可阻擋的。即使後續模組正處於忙碌狀態,資料源仍會持續傳送資料。

不可停止的資料流亦稱為無限資料源。此名稱指的是流量控制,而非影像大小沒有限制。該資料流沒有內部緩衝區,因此生成的 FPGA 設計無法暫停資料源。

VisualApplets 設計中的不可中斷來源#

攝影機操作員是最常見的無法停止的資料來源。他們從攝影機接收像素,並將其傳送至輸出鏈路。他們沒有能吸收反壓的緩衝區,也無法命令攝影機停止資料傳輸。

相較之下,可中斷的來源包括以下這類運算子: CreateBlankImage 進行明確的生命週期管理即呼叫 CoefficientBuffer.

連接無法中斷的來源#

所有O 型和P 型運算子皆可位於不可停止來源的下游。此「無限來源」特性會透過設計中的這些運算子逐級傳播,直到某個模組將該資料流轉換為可控資料流為止。

僅部分 M 型 運算子可直接接受無法停止的輸入源。這些主要包括 記憶體運算子 例如 LineBuffer, ImageBuffer, ImageFifo以及 FrameBuffer. 特定 M 型運算子是否接受無限來源,相關資訊記載於該運算子的說明文件以及 Operator 參考手冊.

若將不可停止的源連接至不接受無限源的 M 型運算子,設計規則檢查第 2 級會報告無限源錯誤。請在編譯小程式之前修正此錯誤。

有關 M 型、O 型和 P 型的行為以及流量控制規則,請參閱「運算子類型與同步」教學主題。

您有兩種方法可以控制無限源:

  • 使用類似以下的緩衝運算子: LineBuffer, ImageBuffer,或 ImageFifo
  • 透過 Overflow 的輸出連結處降低至

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

資訊

當 Overflow 運算子位於 同步 library 會刪除無法處理的幀。這會導致幀長不一,而並非所有後續的運算子都能處理這種情況。請勿將此運算子與 Arithmetic 溢位 (該結果已不再符合位元寬度;請參閱 位元 Arithmetic 教學主題)或透過 Overflow 狀態參數 關於緩衝區運算子(緩衝區已滿;請參閱 Memory 元素 教學課程主題)。

當 Overflow 該運算子本身不會對資料進行緩衝。因此,Basler 建議使用 Overflow 此運算子必須始終與緩衝區運算子搭配使用。

使用緩衝運算子#

緩衝運算子能將無法中斷的資料流轉化為可控的資料流。即使下游模組尚未準備好接收更多資料,它們仍會接受輸入端的資料。它們會將資料暫存於內部,並在下游模組準備就緒時將其轉發出去。

典型的去耦運算子包括 LineBuffer, ImageBuffer, ImageFifo,以及其他支援無限來源的記憶體運算子。放置一個 DRAM 緩衝區(LineBuffer 或 ImageBuffer) 當您需要吸收相機的連拍畫面,且下游處理或 DmaToPC 必須套用流量控制。請使用 ImageFifo 僅當所需的緩衝區較小時才適用。

資訊

當 ImageFifo 該運算子僅緩衝影像中的小部分。因此,存在顯著的 FIFO 溢出風險,而系統內部並不會偵測或處理此問題。

如果您想使用一個 ImageFifo 若要使用運算子來緩衝無法中斷的資料流,Basler 建議使用 ImageFifo 配合前面的 Overflow 運算子。這可確保對傳入資料進行正確處理,並防止發生失控的溢位情況。

作為結合上述方法之外的另一種選擇, Overflow 若要將運算子與記憶體運算子結合使用,您可以使用 ImageFlowControl 運算子,可實現更安全且更穩健的處理。它結合了 ImageFifo 並具備整合式溢出處理功能。

典型的獲客路徑如下:

相機→線性緩衝區或影像緩衝區(DRAM) → 進一步處理 →DmaToPC

若僅需進行小幅解耦,您可以使用ImageFifo取代 DRAM 緩衝區,建議搭配Overflow 使用,或直接使用ImageFlowControl。

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

若沒有緩衝區,DmaToPC或其他會暫停輸入的操作元便無法對攝影機串流進行流量控制。此設計將導致 DRC 檢查失敗,或可能在硬體層面引發死鎖。

使用緩衝運算子來控制無限來源時,必須設定 InfiniteSource parameter of the buffer operator to ENABLED.

緩衝區運算子,其 InfiniteSource 設定為 ENABLED

如果該 InfiniteSource 緩衝運算子的參數設定為 DISABLED, DRC 第 2 級將失敗:

當 InfiniteSource 設定為「停用」時的緩衝區操作員

關於緩衝區大小的設定, FillLevel,以及 RAM 使用量,請參閱 Memory 元素 教學主題。

設定 InfiniteSource 參數#

許多緩衝區運算子會公開該參數 InfiniteSource. 將其設定為 ENABLED 當操作員輸入連接至無法停止的來源時。請將其設定為 DISABLED 當輸入來自可暫停的資料流時。

請遵守以下規則:

  • 集合 InfiniteSource 設為 ENABLED 僅當模組輸入實際連接至無法中斷的電源時。
  • 集合 InfiniteSource 設為 DISABLED 關於從可暫停流中接收資料的緩衝區運算子。
  • 如果您不確定,請設定 DISABLED 第一步。執行 Design Rules Check Level 2 並調整檢查標記出的模組。

若要變更模組屬性,請雙擊該模組以開啟「模組屬性」。點擊「套用」以套用參數變更。有關連結與模組屬性的詳細資訊,請參閱「參數化教學」章節。

當下游處理可暫停時,如何使用溢出運算子#

當 Overflow 此運算子將無法停止的 2D 輸入串流與可能暫時阻塞的處理程序解耦。由於它本身沒有內建緩衝區,因此 Basler 建議使用 Overflow 此運算子必須始終與緩衝區運算子搭配使用。當輸出資料因被阻塞而導致緩衝區填滿時,該 Overflow 此運算子會截斷當前幀,將其標記為損壞,並可跳過後續幀,直到輸出端再次接受資料為止。

使用 Overflow 當來源無法停止,且下游處理器可能暫停資料流的時間超過一行或一個幀緩衝區所能涵蓋的範圍時。

使用溢出運算子控制無限來源

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

當 Overflow 該加工機在裁切框架時,可能會產生非矩形框架。請確認後續加工機能容忍最後一行被縮短的情況。請參閱該加工機的說明 Overflow 。

資訊

作為結合上述方法之外的另一種選擇, Overflow 若要將運算子與記憶體運算子結合使用,您可以使用 ImageFlowControl 運算子,可實現更安全且更穩健的處理。它結合了 ImageFifo 並具備整合式溢出處理功能。

使用 DRC 驗證您的設計#

在完成源頭、緩衝器及 DMA 路徑的佈線後,請執行「分析」→「設計規則檢查(第 2 級)」。第 1 級檢查也會在模擬和建置之前自動執行。

DRC Level 2 檢查擴展規則並估算 FPGA 資源。當一個無法停止的來源饋入一個不接受無限來源的 M 型運算子時,或當 InfiniteSource 設定與實際連線不符。

請閱讀DRC 日誌,並修正標示出的模組或連結。有關完整的作業流程,請參閱「從空白設計到可執行 Applet」教學主題。

典型管線範例#

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

  1. 將攝影師設為來源。
  2. 插入 LineBuffer 或 ImageBuffer 在圖片路徑上(或 ImageFifo 僅適用於小幅去耦;詳見上文)。
  3. 集合 InfiniteSource 設為 ENABLED 在緩衝區上。
  4. 將處理運算子連接起來,並 DmaToPC.
  5. 執行 DRC 第 1 級和第 2 級檢查,然後進行模擬或編譯。

若未執行步驟 2 和步驟 3,DRC 第 2 級會針對該非法連接報告「無限來源」錯誤。

具有溢出與緩衝區的不可停止源#

  1. 將這股源源不絕的能量源連接至 Overflow.
  2. 連線 Overflow 設為 ImageFifo, LineBuffer,或另一個緩衝區運算子。
  3. 集合 InfiniteSource 設為 DISABLED 在緩衝區之後 Overflow.
  4. 將後續處理步驟串接起來,並執行 DRC 第 2 級檢查。確認是否存在無限源或 InfiniteSource 不匹配的情況仍然存在。

帶有溢出運算子與緩衝區的無限來源

Overflow 當輸出被抑制時,會發生畫面被切斷或跳幀的情況。下方的緩衝區會儲存供後續處理使用的資料,而後續處理可能會暫停。若沒有該緩衝區, Overflow 僅憑此無法將一個無法停止的來源與下游模組的暫停狀態解耦。