Operator Library: Memory
LineBuffer 運算子會在 Frame Grabber RAM (DRAM) 中緩衝影像資料串流,這是取像卡上的記憶體,而不是 FPGA 中的記憶體。LineBuffer 運算子是用來替代用於 mE5 硬體平台並提供相同功能的 ImageBuffer 運算子。imaFlex CXP-12 Quad 與 imaFlex CXP-12 Penta 不支援 ImageBuffer 運算子,因此,當您將設計從 mE5 硬體平台轉換為 imaFlex CXP-12 Quad 或 imaFlex CXP-12 Penta 平台時,任何 ImageBuffer 的執行個體都會自動被取代為 LineBuffer 的執行個體。
需要一個類型為 RAM 的 VisualApplets 資源。如需詳細資訊,請參閱 'Allocation of Device Resources'。多個類型為 RAM 的資源會透過共用記憶體概念使用相同的實體 RAM。關於如何使用共用記憶體的說明文件可在 ' Shared Memory Concept ' 一節中找到。此外,LineBuffer 運算子具備興趣區域 (ROI) 支援。總位元數(Bit Width 乘以 Parallelism)不得超過各自取像卡的記憶體限制。
該運算子會造成至少一行的延遲。一旦該行完全寫入緩衝區,就會開始讀取該行。如果輸出遭到封鎖,運算子會緩衝輸入資料。
該運算子的運作方式類似 FIFO。緩衝區針對影像行進行運作,從而產生非常短的記憶體延遲。只要在選定的興趣區域內且後續模組能夠以足夠快的速度消耗資料,任何已完成的輸入資料行都會立即轉發到輸出。因此,當目前影格傳輸仍在進行中時,來自相機的影格資料即可轉發至 PC。如果緩衝區填入更多行,輸入與輸出資料之間的延遲就會增加。當輸出遭到封鎖一段時間時(特別是因為後續模組無法以與輸入頻寬相同的速率處理資料),就會發生這種情況。因此,只有在運算子無法以輸入提供資料的相同速率輸出資料時,記憶體才會被填滿。通常,該運算子用於補償尖峰輸入頻寬。
透過參數 XOffset、XLength、YOffset 和 YLength,您可以定義興趣區域。如果輸入影像寬度小於 XOffset 和 XLength 的總和,LineBuffer 運算子仍會讀取已參數化的 XLength。在這種情況下,運算子會針對額外的像素輸出未定義的記憶體內容。如果輸入影像高度小於要求的輸出影像高度,運算子只會輸出可用的行。如果輸入影像高度低於 YOffset,將會在輸出端產生僅包含虛擬值的單行。
在 Line1D 應用模式下,YOffset 和 YLength 設定無效。
為了測量緩衝區的填滿程度,運算子提供了以下參數:FillLevel、LineCount 和 Overflow。FillLevel 顯示 RAM 的填滿程度百分比。LineCount 提供目前儲存在緩衝區中的行數。當 FillLevel 接近或等於 100% 且要儲存在緩衝區中的下一張影像將超出 RAM 容量時,Overflow 參數會設為 1。如果發生溢位,將會捨棄輸入資料並縮減輸入影像高度。
InfiniteSource 參數指定運算子是否接收無法停止的資料串流(例如來自相機的未緩衝串流)。如需有關無限來源的詳細資訊,請參閱 'Infinite Sources / Connecting Cameras'。唯有當資料來源無法停止時(即 InfiniteSource 設為 ENABLED 時),才會發生溢位。因此,Overflow 和 OverflowClearMode 參數僅能在 InfiniteSource 參數設為 ENABLED 時使用。由於溢位,不完整的影像可能會儲存在記憶體中。這些不完整的影像會自動完成,並且會捨棄傳入的資料,直到有足夠的緩衝區空間可用於下一行為止。
-
不支援空白畫面。
![]() |
可用的 Memory 空間 |
|---|---|
|
運算子提供唯讀參數 MaxLineCount,其回報適合放入 RAM 的最大行數(由 XLength 定義)。此數字進一步取決於目前設計中是否存在其他記憶體運算子以及資料 Bit Width。 |
| 適用於硬體平台 |
|---|
| imaFlex CXP-12 Penta |
| imaFlex CXP-12 Quad |
與 ImageBuffer 運算子相比,LineBuffer 運算子會自動聚合像素,以盡可能貼近記憶體資料寬度,從而達到最佳效能。
如果透過 ParallelismConverter 參數啟用,您可以將輸出 Parallelism 調整為與輸入 Parallelism 不同的值。這使得定義運算子輸入與輸出之間的不對稱尖峰資料吞吐量成為可能。當後續資料處理管線需要使用不同的 Parallelism 時,您可以使用此功能來避免額外執行個體化 PARALLELdn 或 PARALLELup 運算子。
為了使運算子能夠處理超出 RAM 可用最大頻寬的長時間寫入叢發,請啟用 WritePriority 參數。建議將其用於無限資料來源,例如相機(InfiniteSource = ENABLED)。當因為寫入叢發而超出 RAM 的可用頻寬時,將會禁止讀取。這允許對 RAM 進行暫時更頻繁的寫入存取。如果相機傳遞寫入資料叢發,預期該叢發後面會接著寫入資料中的間隙(否則會超出可用的 RAM 頻寬),然後可用於暫時提高讀取頻寬。
|
輸入 bit width 的範圍為:
|
|
|
Bit Width 與 Parallelism 的乘積不得超過原生 RAM 資料寬度:RamDataWidth。 |
|
|
如果 LineBuffer 運算子轉換 Parallelism(ParallelismConverter = Yes),它會自動將輸出端的最大影像寬度四捨五入到 O.Parallelism 的下一個倍數。如果 O.Parallelism 大於 I.Parallelism,則 I.MaxImgWidth 不得大於 2^31-1-O.Parallelism,以便輸出端四捨五入後的最大影像寬度不超過 2^31-1。 |
| RamDataWidth | |
|---|---|
| Type | 靜態寫入參數 |
| Default | 不適用 |
| Range | 整數 |
|
此參數提供可使用的資料位元數。 |
|
| XOffset | |
|---|---|
| Type | 動態/靜態寫入參數 |
| Default | 0 |
| Range | [0, Max.Img Width - XLength] |
|
此參數定義 ROI 左上角的 x 座標。 步階大小即為輸入 Parallelism。 |
|
| XLength | |
|---|---|
| Type | 動態/靜態寫入參數 |
| Default | 1024 |
| Range | [input parallelism, min(Max.Img Width, (2^RAM address width - 1) * internal RAM parallelism) - XOffset] |
|
此參數定義 ROI 的寬度。 步階大小即為輸入 Parallelism。 |
|
| YOffset | |
|---|---|
| Type | 動態/靜態寫入參數 |
| Default | 0 |
| Range | [0, Max.Img Height - YLength] |
|
此參數定義 ROI 左上角的 y 座標。 |
|
| YLength | |
|---|---|
| Type | 動態/靜態寫入參數 |
| Default | 1024 |
| Range | [1, Max.Img Height - YOffset] |
|
此參數定義 ROI 的高度。 |
|
| ParallelismConverter | |
|---|---|
| Type | 靜態寫入參數 |
| Default | 否 |
| Range | {Yes, No} |
|
此參數定義 LineBuffer 運算子是否實作 Parallelism 轉換器。
|
|
| InfiniteSource | |
|---|---|
| Type | 靜態寫入參數 |
| Default | DISABLED |
| Range | {ENABLED, DISABLED} |
|
LineBuffer 運算子可以直接插入相機運算子後面。在這種情況下,InfiniteSource 參數必須設為 ENABLED。然後,運算子將執行主動溢位管理,並確保運算子能夠從溢位中適當恢復。當運算子後方的資料接收端停止或暫停傳輸且緩衝區填滿程度達到最大值,或者當輸入頻寬太高以致寫入資料無法傳輸至外部 RAM 時,就會發生溢位。當 InfiniteSource 設為 DISABLED 時,如果緩衝區填滿程度或輸入頻寬變得太高,將會產生一個禁止訊號,阻止後續運算子傳輸資料。 建議任何搭配將 InfiniteSource 參數設為 ENABLED 的運算子使用寫入優先順序。因此,當 InfiniteSource 參數設為 ENABLED 時,建議將 WritePriority 參數設為 ENABLED。 請參閱 'Infinite Sources / Connecting Cameras' 以取得更多資訊。 |
|
| WritePriority | |
|---|---|
| Type | 靜態寫入參數 |
| Default | DISABLED |
| Range | {ENABLED, DISABLED} |
|
共用記憶體概念 (' Shared Memory Concept ') 通常會在所有連接的 Memory 運算子(即所有使用 RAM 類型資源的運算子)之間平均分配頻寬。如果 WritePriority 設為 DISABLED,則 LineBuffer 運算子會為讀取和寫入指派相同的優先順序。透過將 WritePriority 設為 ENABLED,LineBuffer 運算子會優先處理寫入而非讀取,但前提是暫存記憶體資料速率高於可用頻寬。暫時提高寫入資料的優先順序會導致讀取程序暫時變慢。因此,平均頻寬不得超過 LineBuffer 運算子的可用頻寬。建議對所有將 InfiniteSource 參數設為 ENABLED 的運算子啟用寫入優先順序。當對可停止的來源使用寫入優先順序時,請確保寫入頻寬不會持續過高,否則讀取 LineBuffer 的動作將會暫停,直到緩衝區滿載為止。由於寫入優先順序是針對個別運算子的組態,因此在設計中每增加一個 Memory 運算子,寫入優先順序的效果就會隨之降低。 |
|
| FillLevel | |
|---|---|
| Type | 動態讀取參數 |
| Default | 0 |
| Range | [0%, 100%] |
|
此參數提供 DRAM 的 Fill 百分比級別。 |
|
| MaxLineCount | |
|---|---|
| Type | 動態讀取參數 |
| Default | 2^RAM 位址寬度 / (XLength / 內部 RAM 平行度 + 1) |
| Range | [1, 2^RAM 位址寬度 / 2] |
|
此參數提供目前可容納在記憶體中的最大行數。可容納在記憶體中的最大行數取決於 RAM 位址寬度,而 RAM 位址寬度又取決於所實例化的 RAM 運算子數量。 |
|
| LineCount | |
|---|---|
| Type | 動態讀取參數 |
| Default | 0 |
| Range | [0, MaxLineCount] |
|
此參數提供記憶體中的目前行數。 |
|
| Overflow | |
|---|---|
| Type | 動態讀取參數 |
| Default | 0 |
| Range | [0, 3] |
|
此參數表示緩衝區溢位。這是一個 2 位元點陣圖,其中每個位元表示不同類型的溢位。位元 0 表示 Fill 級別溢位,位元 1 表示寫入頻寬溢位。Overflow 參數顯示溢位的持續時間取決於 OverflowClearMode。 Overflow 參數僅在 InfiniteSource 參數設為 ENABLED 時作用 |
|
| OverflowClearMode | |
|---|---|
| Type | 動態寫入參數 |
| Default | AutoClear |
| Range | {AutoClear, ManualClear, ClearAfterRead, ClearWithProcessReset} |
|
OverflowClearMode 決定當運算子從溢位中恢復時,如何清除 Overflow 參數。只有當運算子不再處於溢位狀態時,您才能使用此參數重設溢位狀態。 清除模式:
OverflowClearMode 參數僅在 InfiniteSource 參數設為 ENABLED 時作用 |
|

![[備註]](../common/images/admon/note.png)



上一頁

