LineBuffer 操作員(imaFlex)

Library: Memory 運算子

LineBuffer運算子會將影像資料流緩衝至 幀擷取卡的 RAM(DRAM)中,該記憶體位於幀擷取卡上,而非 FPGA 內。 LineBuffer運算子是用來取代ImageBuffer 運算子的, 後者適用於 mE5 硬體平台,並提供相同的功能。 imaFlex CXP-12 Quad 和imaFlex CXP-12 Penta 不支援ImageBuffer 運算子,因此,當 您將設計從 mE5 硬體平台轉換至 imaFlex CXP-12 Quad 或imaFlex CXP-12 Penta 平台時,任何 ImageBuffer實例都會自動被 LineBuffer 實例所取代。

需要一個類型為 RAM 的 VisualApplets 資源。更多資訊請參閱「裝置資源的分配」。 多個類型為RAM 的資源會透過 共享記憶體概念,共用同一塊實體 RAM。關於如何使用共享記憶體的說明,請參閱「共享記憶體概念」一節。 此外,LineBuffer運算子支援感興趣區域 (ROI)。總位元數(位元 寬度乘以並行度)不得超過對應幀 擷取器的記憶體限制。

此運算子會造成至少一行 的延遲。一旦該行完全寫入緩衝區,便會開始讀取該行。若 輸出被阻塞,此運算子會將輸入資料暫存於緩衝區中。

該運算單元的工作原理類似於 FIFO。緩衝區 以影像行為單位進行處理,因此記憶體延遲極短。任何已完成的 輸入資料行,只要位於選定的 感興趣區域內,且後續模組能夠以足夠快的速度處理該資料,便會立即轉發至輸出端。 因此, 來自攝影機的幀資料可在當前幀 傳輸仍在進行時,便已轉發至電腦。若 緩衝區填滿更多行,輸入與輸出資料之間的延遲便會增加。這種情況通常發生在輸出被阻塞 一段時間,尤其是因為後續模組無法以與 輸入頻寬相同的速度處理資料。因此,只有當操作者無法 以與輸入提供資料相同的速度輸出資料時,記憶體才會被填滿。通常,操作者會 被用來補償輸入頻寬的峰值。

透過參數 XOffset、XLength、 YOffset和YLength,您 可以定義一個感興趣區域。若輸入影像的寬度小於 XOffset與XLength 的總和, LineBuffer運算子仍會讀取參數化的XLength 值。 在此 情況下,該運算子會針對額外的像素輸出未定義的記憶體內容。若 輸入影像的高度小於請求的輸出影像高度,該運算子 僅會輸出可用的行。若輸入影像的高度低於YOffset, 則會導致輸出僅有一行,且該行僅包含虛值。

在Line1D應用模式下,YOffset和 YLength的設定將不產生任何效果。

為了測量緩衝區的填滿程度,該 運算子提供以下參數:FillLevel、LineCount, 以及Overflow。FillLevel以 百分比顯示 RAM 的填滿程度。LineCount則提供目前儲存於緩衝區中的行數。 當 FillLevel接近或等於 100%,且接下來 要儲存至緩衝區的影像將超過 RAM 容量時,Overflow參數會設定為 1。若發生溢出, 輸入資料將被捨棄,且輸入影像的高度會被縮減。

InfiniteSource參數用於指定運算子是否接收 無法停止的資料流,例如來自攝影機的未緩衝資料流。 有關無限來源的更多資訊,請參閱「無限來源/連接攝影機」。 僅當資料來源無法停止時(即 InfiniteSource設定為ENABLED 時),才會發生溢出。 因此,Overflow和 OverflowClearMode參數僅能在 InfiniteSource參數設定為ENABLED 時使用。 發生溢出時,記憶體中可能會儲存不完整的影像。 這些不完整的影像會自動完成處理,且後續傳入的資料將被捨棄, 直到有足夠的緩衝區空間可用於下一行為止。

Operator Restrictions

  • 不支援空框架。

[注意] 可用記憶體空間

該運算子提供只讀 參數MaxLineCount,用以回報可容納於 RAM 中的 最大行數(由XLength 定義)。 此數值還取決於當前設計中是否存在其他記憶體運算子 以及資料位元寬度。

適用於硬體平台
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

頻寬最佳化

與 ImageBuffer運算子不同,LineBuffer運算子會自動 對像素進行聚合,以盡可能貼近記憶體資料寬度, 從而達到最佳效能。

若透過ParallelismConverter 參數啟用此功能,您可將輸出並行度調整為與輸入並行度不同的數值。 此功能可讓您在運算子的輸入與輸出之間定義非對稱的峰值資料吞吐量。 當後續的資料處理管線需要以不同的並行度運作時,您可以利用此功能, 避免額外建立PARALLELdn或PARALLELup 運算子的實例。

若要讓操作員 能處理超過 RAM 可用最大頻寬的長時間寫入資料突發,請啟用WritePriority參數。建議在 資料來源為無限時(例如攝影機,InfiniteSource=ENABLED)使用此設定。當 因寫入突發而超過 RAM 的可用頻寬時,讀取操作將被禁止。 此設定可讓對 RAM 的 寫入存取 暫時更加頻繁。若攝影機傳送一波寫入資料,預期該波資料之後會出現寫入 資料的間隙(否則 將超過 RAM 的可用頻寬),此時即可利用該間隙暫時提升讀取頻寬。

I/O Properties

Property Value
Operator Type M
Input Link I,影像資料輸入
Output Link O,影像資料輸出

Supported Link Format

Link Parameter Input Link I Output Link O
Bit Width [1, 64]12 as I
Arithmetic {unsigned, signed} as I
Parallelism any2 as I 2
Kernel Columns 1 as I
Kernel Rows 1 as I
Img Protocol {VALT_IMAGE2D, VALT_LINE1D} as I
Color Format any as I
Color Flavor any as I
Max. Img Width 2^31-13 as I
Max. Img Height 2^31-1 as I

1

輸入 Bit Width 的範圍為:

  • 針對無號輸入:[1, 64]

  • 對於有號數值:[2, 64]

  • 對於無號彩色輸入:[3, 63]

  • 針對有號色彩輸入:[6, 63]。

2

位元寬度與並行度的乘積不得超過 原生 RAM 資料寬度:RamDataWidth。

3

若LineBuffer運算子進行平行化轉換(ParallelismConverter=Yes), 它會自動將輸出端的最大影像寬度四捨五入至O 的下一倍數。Parallelism 。若 O.Parallelism大於I.Parallelism ,則I.MaxImgWidth 不得大於 2^31-1-O。Parallelism 如此一來,輸出端的四捨五入後最大影像寬度 才不會超過 2^31-1。

Parameters

RamDataWidth
Type 靜態寫入參數
Default 不適用
Range 整數

此參數指定可使用的資料位元數。

XOffset
Type 動態/靜態寫入參數
Default 0
Range [0, 圖片最大寬度 - XLength]

此參數定義了 ROI 左上角的 x 座標。

步長即為輸入並行度。

XLength
Type 動態/靜態寫入參數
Default 1024
Range [輸入並行度,min(最大影像寬度,(2^RAM 位址寬度 - 1) * 內部 RAM 並行度) - XOffset]

此參數用於定義 ROI 的寬度。

步長即為輸入並行度。

YOffset
Type 動態/靜態寫入參數
Default 0
Range [0, 圖片最大高度 - YLength]

此參數定義 ROI 左上角的 y 座標。

YLength
Type 動態/靜態寫入參數
Default 1024
Range [1, 圖片最大高度 - Y 偏移量]

此參數用於定義 ROI 的高度。

並行轉換器
Type 靜態寫入參數
Default 否
Range {Yes, No}

此參數用以定義LineBuffer運算子是否實作平行化轉換器。

  • 否:該運算子不會進行並行度轉換。輸入與輸出的並行度始終相同。 當輸入並行度發生變化時,輸出並行度會自動調整為新的輸入並行度值。 輸出並行度 無法進行編輯。

  • 是:該運算子會執行並行度轉換。輸出並行度與 輸入並行度完全無關,且可隨意編輯。

InfiniteSource
Type 靜態寫入參數
Default DISABLED
Range {ENABLED, DISABLED}

LineBuffer運算子可直接插入在攝影機運算子之後。在此情況下,必須將InfiniteSource參數設定為ENABLED。 如此一來,該運算子將執行主動式溢出管理,並確保運算子能從溢出情況中正確恢復。 溢出情況可能發生於:當位於該運算子後方的資料接收端 停止或暫停傳輸,且緩衝區填滿程度達到最大值時發生;或是當輸入頻寬過高 導致寫入資料無法傳輸至外部 RAM 時發生。 當InfiniteSource設定為DISABLED 時,若緩衝區 填滿程度或輸入頻寬過高,系統將產生抑制訊號,阻止後續運算子傳輸資料。

建議任何與 InfiniteSource參數設定為ENABLED 一起使用的運算子,均應啟用寫入優先級。因此, 當InfiniteSource 參數設定為ENABLED 時,建議將WritePriority參數 設定為ENABLED。

如需詳細資訊,請參閱 'Infinite Sources / Connecting Cameras'。

寫入優先級
Type 靜態寫入參數
Default DISABLED
Range {ENABLED, DISABLED}

共用記憶體概念(「Shared Memory Concept」)通常會將頻寬平均分配給所有連線的記憶體運算子(即所有使用 類型為 RAM 的資源的運算子)。 若WritePriority設定為DISABLED ,LineBuffer運算子會 將讀取與寫入賦予相同的優先級。將WritePriority設定為ENABLED 時, LineBuffer運算子會讓寫入優先於讀取,但此情況僅限於臨時記憶體的資料傳輸速率高於可用頻寬時。 這種 對寫入資料的暫時性優先處理,會導致讀取過程暫時變慢。因此,平均頻寬 不得超過LineBuffer運算子的可用頻寬。 建議任何將InfiniteSource參數設定為ENABLED 的運算子,皆應採用寫入優先處理機制。 當在可停止的來源上使用寫入優先級時,請確保寫入頻寬不會持續處於高水平, 否則從LineBuffer讀取的作業將被暫停,直到緩衝區 填滿為止。由於寫入優先級是針對個別運算子的設定,因此隨著設計中新增記憶體運算子, 寫入優先級的效果會隨之減弱。

FillLevel
Type 動態讀取參數
Default 0
Range [0%, 100%]

此參數以百分比表示 DRAM 的填滿程度。

MaxLineCount
Type 動態讀取參數
Default 2^RAM 位址寬度 / (XLength/ 內部 RAM 並行度 + 1)
Range [1, 2^RAM 位址寬度 / 2]

此參數指定目前可容納於記憶體中的最大行數。可容納於記憶體中的最大行數 取決於 RAM 位址寬度,而該寬度則取決於已實例化的 RAM 運算子數量。

行數
Type 動態讀取參數
Default 0
Range [0,MaxLineCount]

此參數提供記憶體中當前的行數。

Overflow
Type 動態讀取參數
Default 0
Range [0, 3]

此參數表示發生緩衝區溢出。它是一個 2 位的位圖,其中每個位元代表不同類型的溢出。 位元 0 表示填充量溢出,而位元 1 表示 寫入頻寬溢出。溢出參數顯示溢出狀態的時間長短,取決於OverflowClearMode。

「溢出」參數僅在 「無限來源」參數設定為 「啟用」時才會生效

OverflowClearMode
Type dynamic write parameter
Default 自動清除
Range {自動清除、手動清除、讀取後清除、隨程序重置清除}

OverflowClearMode決定當運算器從溢出中恢復後, 如何清除Overflow參數的值。僅當運算器已不再處於溢出狀態時,才可透過此參數重置溢出狀態。

清除模式:

  • 自動清除:當操作員從溢出狀態恢復時,「溢出」參數會自動重置。

  • ManualClear:當操作員從溢出狀態恢復時,Overflow參數仍會顯示 溢出狀態,直到透過將「ManualClear」寫入OverflowClearMode參數來手動重置為止。 在此模式下,流程重置(例如:資料擷取停止)並不會清除「溢出」參數,這表示在資料擷取停止後, 溢出狀態仍會顯示。

  • ClearAfterRead:當操作員從溢出狀態恢復後,Overflow參數仍會顯示 溢出狀態,直到讀取該Overflow參數或發生程序重置(例如:當資料擷取停止時)為止。

  • ClearWithProcessReset:當操作員從溢出狀態恢復時,溢出參數仍會顯示 溢出狀態,直到發生重置為止(例如:當資料擷取停止時)。

只有當 InfiniteSource參數設定為 ENABLED時,OverflowClearMode參數才會生效