操作員FrameBufferMultiRoi (imaFlex)

Library: Memory 運算子

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

此運算子會將輸入影像資料緩存於 幀擷取卡的 RAM(DRAM)中 中,並針對每張緩衝的影像輸出任意數量的感興趣區域 (ROI)。

需要一個類型為 RAM 的 VisualApplets 資源(請參閱「裝置資源的分配」)。多個類型為 RAM 的資源會透過「共用記憶體概念」共用同一塊實體 RAM。有關如何使用 共用記憶體的說明,請參閱應用說明:《共用記憶體》。

ROI 的定義位於運算子的參數 欄位XLength、YLength、 XOffset及YOffset 中。下圖 展示了該運算子針對單一輸入幀、一組 參數以及輸入平行度為 1 時,其輸出結果的概覽。

參數 MaxNumRoI指定每幀緩衝輸入影像中可 讀取的 ROI 最大數量。每個 ROI 座標參數欄位 XLength、YLength、 XOffset及YOffset各有 MaxNumRoI個資料項。

參數 NumRoI指定操作員 針對每張緩衝影像在輸出端將提供的實際 ROI 數量。若設定為動態,此數值不得超過 MaxNumRoI。當設定為 動態時,您可在 影像擷取過程中更新NumRoI。 當所有 ROI 均已從當前幀讀取完成時,NumRoI的變更才會生效。

所有 ROI 皆依序讀取,並以 獨立影像的形式輸出至操作員輸出端:ROI 0、ROI 1、ROI 2、……直至 ROI N-1。其中 N 為當前 ROI 數量,此數值從每個輸入幀中讀取,並由 參數NumRoI 指定。 參數欄位 XOffset、XLength、 YOffset及YLength 用於指定一組 ROI。這些參數的類型可設定為 動態或靜態,這決定了參數 在執行期間是否可調整。 當其中一個 ROI 參數的類型設定後,所有 ROI 參數以及MaxFrameWidth、 MaxFrameHeight和 MaxFrameSizeMode的參數類型會自動調整。有關如何設定欄位參數的詳細說明, 請參閱「參數編輯」。

只要不超過最大輸入幀尺寸,所有可能的矩形區域 皆可作為 ROI 定義,也就是說, 單一像素、單一行、單一欄、矩形區域,或是整個 幀,皆可定義為 ROI。

不同的 ROIs 無需具有相同的 大小。

每個 ROI 均可個別定義。

ROI 之間可以重疊,也可以重複。

X 座標參數 XOffset和XLength必須 與輸入並行度的步長一致。

您可以透過將 XLength或YLength設定為 零,來定義空的 ROI。此時,該運算子會在輸出端提供一張空影像。空影像中 不包含任何像素。

若將此運算子與影像協定 VALT_LINE1D 搭配使用,則 Y 座標參數將被停用。在 1D 運作模式下, 該運算子會將一個 ROI 視為一行。 該運算子的輸出將為 一個無限的 1D 影像流,其中每條線由一個 ROI 代表,例如:第 0 條線 = ROI 0、 第 1 條線 = ROI 1、第 N 條線 = ROI N、第 N+1 條線 = ROI 0、……

該運算子會在輸出端提供 ROI 影像, 只要對應的輸入幀已完全緩衝完成,亦即輸入幀的 EoF (幀結束)訊號被接收時。若 DRAM 中有足夠空間,則可在讀取 ROI 的同時 將下一組輸入幀寫入 DRAM。RAM 頻寬由寫入與讀取共同共用,但讀取操作必須在 對應的輸入幀完成寫入後才能開始。 讀取完輸入 幀的最後一個 ROI 後(該 ROI 由場索引 NumRoI-1 處的XLength、 YLength、XOffset和 YOffset值所定義),當前幀將被捨棄,而下一個 ROI(位於場索引 0)將指向下一個輸入幀。有關此運算子的延遲 資訊,請參閱表 46,「庫記憶體中各運算子的個別延遲」。

若將 ROI 參數類型設定為「動態」,則所有 ROI 皆可動態更新。然而,您僅能在 沒有任何影像擷取作業正在執行時,才能更新 ROI。

此運算子支援兩種模式,用於指定 儲存於 DRAM 中的緩衝影像資料幀的最大大小,您可以 透過參數MaxFrameSizeMode 進行設定:

  • 當MaxFrameSizeMode設定為 Auto 時,DRAM 會緩存一張影像,其 大小等同於最大影像尺寸,即 I.MaxImgWidth* I.MaxImgHeight。

    小於最大影像尺寸的影像會直接緩衝, 且不進行任何修改。然而,讀取感興趣區域(ROI)時,總是針對具有 最大可能影像尺寸的緩衝幀進行。在此情況下,缺失的像素會 被隨機資料填補,並應在後續 處理中視為未定義。

  • 當MaxFrameSizeMode設為 Custom 時,緩衝的 輸入幀的最大尺寸由參數 MaxFrameWidth和 MaxFrameHeight 定義。即使實際的輸入幀 尺寸較大,超出指定參數尺寸的資料仍會被捨棄 (類似於無偏移量的 ROI)。在此情況下,DRAM 會為 幀尺寸MaxFrameWidth* MaxFrameHeight 預留記憶體空間。您可以使用此模式來 優化記憶體使用效率,並將更多幀儲存至 DRAM 中。

在這兩種情況下,系統均不會檢查 所定義的 ROIs 是否位於輸入影像中。 但無法存取位於 MaxFrameWidth和 MaxFrameHeight 範圍之外的 ROI。若 ROI 位於 實際輸入影像資料範圍之外,該運算子會讀取隨機的虛擬值,但 ROI 的大小並不會 因此改變。

若 MaxFrameSizeMode、 MaxFrameWidth及 MaxFrameHeight設定為參數類型 static或dynamic,則 ROI 參數也會 自動設定為相同的參數類型,反之亦然。僅有dynamic 參數可在執行期間進行調整。

該運算子支援輸入鏈路上出現的空幀、空行 以及不固定的行長度。

[注意] 大量感興趣區域(ROI)與時間點

隨著最大 ROI 定義數量增加(由MaxNumRoI參數定義), 運算子的 BRAM 消耗也會隨之增加。這可能會在高 時脈頻率下導致時序問題。例如,當MaxNumRoI設定為 65536 時, 在完整設計中可能無法滿足時序要求。 若需要大量 ROI,請考慮改用 「FrameBufferMultiRoiDyn」運算子,該運算子會透過輸入連結傳遞 ROI 定義,且不會將其儲存於 BRAM 中。

使用 InfiniteSource 的溢位管理

在 InfiniteSource模式下, FrameBufferMultiRoi 無法停止,且影像可能會 遺失或損毀。此情況發生於以下兩種情形之一:RAM 已滿且 無法再接收任何資料,或是輸入頻寬過高,超出共用 記憶體介面的處理能力。一旦操作者達到溢出狀態,所有傳入的 資料都會被丟棄。這將導致幀資料遺失或損毀。 影像損毀的情況僅 會在輸入頻寬過高時發生,因為填滿程度是以完整的 實體為單位計算的。當影像的一部分已寫入 RAM,但另一部分卻因輸入頻寬 過高、導致 RAM 無法及時接收寫入資料而被丟棄時,便會產生損毀的影像。 因此, 讀取損壞的影像會導致輸出資料未定義。一旦 RAM 中 再次有足夠空間,且共用記憶體介面允許資料 重新寫入 RAM 時,系統即會從溢出狀態恢復,並停止丟棄 輸入資料。 損壞的影像會自動終止處理,後續的影像則 不會受到影響。「Overflow」參數會標示何時發生 溢出。「OverflowClearMode」 參數可讓您定義:溢出復原後是否 立即重置溢出狀態,或是需手動重置溢出狀態。

Operator Restrictions

  • 此運算子的輸出模式相當於 FreeRun模式的 ImageBufferMultiRoI 運算子的 FreeRun 模式,且不支援額外的 RoI 輸出模式 WaitAfterImage 以及 WaitAfterRoI。

  • 該運算子支援輸入鏈路 I 上的空幀,但該幀的輸出 ROI 會填入隨機的虛擬值。

  • 如果輸入影像小於寫入 DRAM 的幀, 則不會檢查 ROI 座標是否位於輸入影像內。在 這種情況下,運算子會從記憶體中讀取隨機的虛擬值。

  • 最大連結屬性會因 運算子的使用方式而異。請參閱下方的「支援的連結格式」 一節以獲取更多資訊。

頻寬最佳化

為了獲得最佳效能,所使用的 資料位元數應盡可能與 RamDataWidth模組參數中指定的數值 相符。 當 位元寬度、核心大小與並行度的乘積等於內部 RAM 埠 寬度RamDataWidth 時,即達到此運算子所能達到的最大頻寬。請注意,您可透過使用核心來增加 內部位元寬度,但完整的核心仍會被視為 單一像素來進行位址指定。

為了讓運算子能夠處理超過 RAM 可用最大頻寬的大量寫入資料叢發,請啟用 WritePriority 參數。建議將此參數搭配無限資料來源(例如相機,InfiniteSource = ENABLED)使用。如果啟用了 WritePriority 參數,當寫入叢發導致超出 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 [1, RamDataWidth / BitWidth / KernelColumns / KernelRows]2 as I
Kernel Columns [1, RamDataWidth / BitWidth /Parallelism / KernelRows]2 as I
Kernel Rows [1, RamDataWidth / BitWidth /Parallelism / KernelColumns]2 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^RamAddressWidth3 as I

1

輸入 Bit Width 的範圍為:

  • 對於無符號灰階輸入:[1, 64]

  • 對於帶符號的灰色輸入:[2, 64]

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

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

輸入 bit width 不得超過原生 RAM 資料寬度 RamDataWidth。

2

位元寬度、並行度與核心大小的乘積不得超過 原生 RAM 的資料寬度:

3

輸入連結I的最大影像寬度與影像 高度會因 營運商的使用方式而異:

  • 當MaxFrameSizeMode設定為 Auto 時, I.MaxImageWidth與 I.MaxImageHeight的乘積必須能容納於 可用 RAM 容量內:

  • 當MaxFrameSizeMode設定為 Custom 時, I.MaxImageWidth與 I.MaxImageHeight皆受限於 最大 RAM 容量。 該產品的記憶體使用量可超過總 RAM 容量,因為僅有 由參數 MaxFrameWidth和 MaxFrameHeight選定的子影像才會寫入 RAM:

    由於每個 RAM 向量會寫入I.Parallelism個像素, 因此 I.MaxImageWidth可能超過 2^RamAddressWidth,但絕不會大於 2^31 - 1:

    I.MaxImageWidth 與 I.MaxImageHeight的位元寬度之和必須小於 48 位元:

Parameters

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

此參數指定可在 RAM 中使用的最大資料寬度。

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

此參數提供可使用的位址位元數。可用 RAM 槽的數量由 2^RamAddressWidth 定義。目前的 RamAddressWidth 取決於硬體平台以及設計中記憶體運算子(即使用 RAM 類型資源的運算子)的目前數量。

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

此參數提供 DRAM 的 Fill 百分比水準。

MaxFrameCount
Type 動態讀取參數
Default 2^RamAddressWidth/ (MaxFrameHeight* (MaxFrameWidth/ I.Parallelism))
Range [1, 2^RamAddressWidth]

此參數指定目前可容納於記憶體中的 最大幀數。可容納於記憶體中的最大幀數取決於 RamAddressWidth、 MaxFrameHeight、 I.Parallelism以及 MaxFrameWidth 等參數。

MaxFrameCount =2^RamAddressWidth/ (MaxFrameHeight* (MaxFrameWidth/ I.Parallelism))

FrameCount
Type 動態讀取參數
Default 0
Range [0, MaxFrameCount]

此參數提供記憶體中的目前影格數。

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

在該 設計中,操作員可直接位於攝影師身後。在此情況下,InfiniteSource 參數必須設定為ENABLED。操作員將 執行主動式溢出管理,並確保操作員能 從溢出狀況中正確恢復。 溢出可能發生於: 操作器後方的資料接收端停止或暫停傳輸,且緩衝區填滿程度達到 最大值時;或是當輸入頻寬過高,導致寫入資料無法 傳輸至外部 RAM 時。當 將InfiniteSource設定為 「停用」時,若緩衝區填滿程度或 輸入頻寬過高,便會產生一個抑制訊號, 用以停止前一操作員的資料傳輸。

建議任何搭配 InfiniteSource 使用的運算子都啟用寫入優先順序。因此,當 InfiniteSource 參數設定為 ENABLED 時,建議將 WritePriority 參數設定為 ENABLED。

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

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

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

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

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

OverflowClearMode
Type dynamic write parameter
Default AutoClear
Range {AutoClear, ManualClear, ClearAfterRead, ClearWithProcessReset}

OverflowClearMode 用於決定當運算子從溢位中恢復時,如何清除 Overflow 參數。唯有當運算子不再處於溢位狀態時,您才能使用此參數重設溢位狀態。

清除模式:

  • AutoClear:當運算子從溢位中恢復時,Overflow 參數會自動重設。

  • ManualClear:當操作員 從溢出狀態恢復時, Overflow參數仍會顯示 溢出狀態,直到透過寫入 ManualClear寫入 OverflowClearMode參數中。在此 模式下,流程重置(例如:擷取停止)並不會清除 Overflow參數,這表示 即使擷取已停止,溢出狀態仍會持續顯示。

  • ClearAfterRead:當運算子從溢位中恢復時,Overflow 參數仍會顯示溢位,直到讀取 Overflow 參數或發生程序重設(例如停止擷取時)為止。

  • ClearWithProcessReset:當運算子從溢位中恢復時,Overflow 參數仍會顯示溢位,直到發生重設(例如停止擷取時)為止。

MaxNumRoI
Type 靜態寫入參數
Default 1
Range [1, 65536]

此參數定義操作員可儲存的區域興趣 (ROI) 最大數量。 當時脈頻率較高時,過多的 ROI 可能會對時序造成負面影響。

NumRoI
Type 動態/靜態寫入參數
Default 1
Range [1, MaxNumRoI]

此參數定義實際使用的 ROIs 數量。 該運算子將 從每張輸入影像中讀取NumRoI個 ROIs,並 將其提供至輸出端。若此參數設定為 static,其取值範圍為 [1, 65536],且 MaxNumRoI將被停用。

XOffset
Type 動態/靜態讀寫參數
Default 0
Range [0, MaxFrameWidth - XLength]

此欄位參數定義了最 左側一欄中,ROI 的 X 座標陣列。

步長即為並行度。

請參閱「參數編輯」中,了解如何設定欄位參數。

XLength
Type 動態/靜態讀寫參數
Default 1024
Range [0, MaxFrameWidth - XOffset]

此欄位參數用於定義 ROI 寬度的陣列。

步長即為並行度。

請參閱「參數編輯」中,了解如何設定欄位參數。

YOffset
Type 動態/靜態讀寫參數
Default 0
Range [0, MaxFrameHeight - YLength]

此欄位參數定義了 ROI 第一行 的 Y 座標陣列。

請參閱「參數編輯」中,了解如何設定欄位參數。

YLength
Type 動態/靜態讀寫參數
Default 1024
Range [0, MaxFrameHeight - YOffset]

此欄位參數用以定義 ROI 高度的陣列。

請參閱「參數編輯」中,了解如何設定欄位參數。

MaxFrameSizeMode
Type 動態/靜態寫入參數
Default Auto
Range {Auto, Custom}

此參數用以定義參數 MaxFrameWidth與 MaxFrameHeight應自動 遵循輸入I的最大影像尺寸 (模式=自動),抑或可 手動調整這些參數(模式=自訂)。 自訂模式允許設定最大 畫面尺寸,此尺寸是針對應用程式量身訂製的,可能遠小於 輸入連結所定義的限制。如此一來,便能在 RAM 中儲存 更多畫面。 在「自動」模式下,I 的鏈路屬性 (Max.Img Width和 Max.Img Height) 所定義的最大影像尺寸,不得大於 記憶體中可用插槽的數量 (2^RamAddressWidth)。若連結 的屬性「最大影像寬度」與 「最大影像高度」 所定義的最大影像尺寸大於 可用記憶體空間,且您處於 「自訂」模式下, 「MaxFrameSizeMode」參數將無法 再進行編輯,直到您在輸入連結中減少最大影像大小為止。此 參數在擷取執行期間無法寫入。 MaxFrameSizeMode的參數 類型與MaxFrameWidth、 MaxFrameHeight以及 ROI 參數相同。

MaxFrameWidth
Type 動態/靜態寫入參數
Default 1024
Range [1, I 處的最大影像寬度]

此參數用於設定當前影像 處理配置的最大影像寬度。超過此限制的輸入幀的行數將 被裁切至MaxFrameWidth。將此數值 降低至最大影像寬度以下,可節省記憶體空間並容許儲存更多幀。 此參數僅在 MaxFrameSizeMode設定為 Custom 時才能編輯。 MaxFrameHeight與 MaxFrameWidth 的乘積不得大於 可用記憶體插槽的數量 2^RamAddressWidth乘以 輸入並行度。當擷取作業正在 執行時,此參數無法編輯。MaxFrameWidth的參數 類型與MaxFrameSizeMode、 MaxFrameHeight以及 ROI 參數相同。

MaxFrameHeight
Type 動態/靜態寫入參數
Default 1024
Range [1, I 處的最大影像高度]

此參數用於設定當前影像 處理配置的最大影像高度。超過此高度限制的輸入幀將被裁切至 MaxFrameHeight。將此數值 降低至最大影像高度以下,可節省記憶體空間並容許儲存更多 幀。 此參數僅在 MaxFrameSizeMode設定為 Custom 時方可編輯。 MaxFrameHeight與 MaxFrameWidth的乘積不得大於 可用記憶體插槽數 2^RamAddressWidth乘以 輸入並行度。當擷取作業 正在執行時,此參數無法編輯。MaxFrameHeight的 參數類型與MaxFrameSizeMode、 MaxFrameWidth以及 ROI 參數相同。