Operator FrameBufferMultiRoi (imaFlex)

Operator Library: Memory

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

此運算子會在 Frame Grabber RAM (DRAM) 中緩衝輸入的影像資料,並針對每個緩衝的影像輸出任意數量的感興趣區域 (ROI)。

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

ROI 是在運算子參數欄位 XLength、YLength、XOffset 與 YOffset 中定義。下圖顯示了針對一個輸入影格、一組參數以及輸入 Parallelism 為 1 時,運算子輸出的概覽。

參數 MaxNumRoI 指定了每個緩衝輸入影格可讀取的最大 ROI 數量。每個 ROI 座標參數欄位 XLength、YLength、XOffset 與 YOffset 皆有 MaxNumRoI 個項目。

參數 NumRoI 指定了運算子將針對每個緩衝影像在輸出端提供的實際 ROI 數量。當設定為 dynamic 時,此數量不能超過 MaxNumRoI。當設定為 dynamic 時,您可以在影像擷取期間更新 NumRoI。對 NumRoI 的變更會在目前影格的所有 ROI 都被讀取完畢後生效。

所有 ROI 均依序讀取,並作為獨立影像提供在運算子輸出端:ROI 0、ROI 1、ROI 2... 直至 ROI N-1。其中 N 是從每個輸入影格中讀出的目前 ROI 數量,由參數 NumRoI 指定。參數欄位 XOffset、XLength、YOffset 與 YLength 指定了一組 ROI。這些參數的參數類型可以設定為 dynamic 或 static,以指定這些參數在執行階段是否可調整。當設定其中一個 ROI 參數的參數類型時,所有 ROI 參數以及 MaxFrameWidth、MaxFrameHeight 和 MaxFrameSizeMode 的參數類型也會自動調整。請參閱 「參數編輯」 以了解如何設定欄位參數。

只要不超過最大輸入影格尺寸,ROI 定義支援所有可能的矩形區域,亦即單一像素、單一行、單一列、矩形區域或完整影格皆可定義為 ROI。

不同的 ROI 不需要具備相同的尺寸。

每個 ROI 都可以個別定義。

ROI 可以重疊且可以重複。

X 座標參數 XOffset 和 XLength 必須符合輸入 Parallelism 的步進大小。

您可以透過將 XLength 或 YLength 設定為零來定義空白的 ROI。運算子隨後會在輸出端提供一個空白影像。空白影像不包含任何像素。

如果運算子搭配影像協定 VALT_LINE1D 使用,Y 座標參數將會停用。在 1D 運作中,運算子會將一個 ROI 讀取為一行。運算子的輸出將會是一個無限的 1D 影像串流,其中每一行由一個 ROI 表示,例如:line 0 = ROI 0、line 1 = ROI 1、line N = ROI N、line N+1 = ROI 0、...

一旦對應的輸入影格完全緩衝完畢(也就是收到輸入影格的 EoF(End of Frame)信號),運算子就會在其輸出端提供 ROI 影像。如果 DRAM 中有足夠的空間,則可以在讀取 ROI 的同時,將下一個輸入影格寫入 DRAM。RAM 頻寬會在寫入與讀取之間共用,但讀取只能在對應的輸入影格寫入完成後才能開始。在讀取完由欄位索引 NumRoI-1 處的 XLength、YLength、XOffset 和 YOffset 值所定義之輸入影格的最後一個 ROI 後,目前的影格即會被捨棄,且下一個 ROI(於欄位索引 0 處)會定址到下一個輸入影格。關於運算子延遲的資訊,請參閱 表 46「Memory Library 中各運算子的個別延遲」。

如果 ROI 參數類型設定為 dynamic,則所有 ROI 都可以動態更新。不過,只有在未進行影像擷取時,您才可以更新 ROI。

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

  • 對於 MaxFrameSizeMode = Auto,DRAM 會緩衝具有最大影像尺寸(即 I.MaxImgWidth * I.MaxImgHeight)的影像。

    小於最大影像尺寸的影像會直接進行緩衝,不需修改。不過,讀取 ROI 的動作一律是在具備最大可能影像尺寸的緩衝影格上進行。在此情況下,缺少的像素會填入隨機資料,並在後續處理中視為未定義。

  • 對於 MaxFrameSizeMode = Custom,緩衝輸入影格的最大尺寸是由參數 MaxFrameWidth 和 MaxFrameHeight 定義。即使實際的輸入影格更大,超出指定參數尺寸的資料也會被捨棄(類似於沒有位移的 ROI)。在此情況下,DRAM 會為影格尺寸 MaxFrameWidth * MaxFrameHeight 保留記憶體。您可以使用此模式來最佳化記憶體使用率,並在 DRAM 中儲存更多影格。

在這兩種情況下,都不會檢查定義的 ROI 是否位於輸入影像內。但無法定址位於 MaxFrameWidth 和 MaxFrameHeight 之外的 ROI。如果 ROI 位於實際輸入影像資料之外,運算子會讀取隨機的虛擬數值,但 ROI 尺寸不會改變。

如果 MaxFrameSizeMode、MaxFrameWidth 和 MaxFrameHeight 設定為參數類型 static 或 dynamic,則 ROI 參數也會自動設定為相同的參數類型,反之亦然。只有 dynamic 參數可以在執行階段進行調整。

運算子支援輸入連結上的空白影格、空白行以及不同的行長度。

[備註] 高 ROI 數量與時序

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

使用 InfiniteSource 的溢位管理

在 InfiniteSource 模式下,FrameBufferMultiRoi 的資料來源無法停止,且影像可能會遺失或損毀。發生這種情況的原因可能是 RAM 已滿而無法接受任何進一步的資料,或是輸入頻寬對共用記憶體介面而言過高。一旦運算子達到溢位狀態,所有送達的資料都會被捨棄。這會導致影格遺失或損毀。損毀的影像只會在輸入頻寬過高時發生,因為 Fill 級別是以完整的實體來計算的。當影像的一部分已經寫入 RAM,但影像的另一部分因為輸入頻寬過高且 RAM 無法以足夠快的速度接受寫入資料而被捨棄時,就會發生影像損毀。因此,讀取損毀的影像會導致未定義的輸出資料。一旦 RAM 中有足夠的空間,且共用記憶體介面允許再次將資料寫入 RAM,運算子就會從溢位中恢復,並停止捨棄輸入資料。損毀的影像會自動終止,且後續的影像不會受到影響。Overflow 參數會指示何時發生溢位。您可以使用 OverflowClearMode 參數來定義是在溢位恢復後立即重設 Overflow,還是手動重設溢位。

算子限制

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

  • 運算子支援輸入連結 I 上的空白影格,但該影格的輸出 ROI 會填入隨機的虛擬數值。

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

  • 最大連線屬性會根據算子的使用方式而有所不同。如需詳細資訊,請參閱下方的 Supported Link Format 一節。

頻寬最佳化

為求最佳效能,所使用的資料位元數應盡可能接近 RamDataWidth 模組參數中所提供的數字。當位元寬度、kernel 大小和 Parallelism 的乘積等於內部 RAM 連接埠寬度 RamDataWidth 時,即可達到通過運算子的最大頻寬。請注意,您可以使用 kernels 來增加內部位元寬度,但完整的 kernel 仍會被定址為單一像素。

為了讓運算子能夠處理超過 RAM 可用最大頻寬的長時間寫入叢發,請啟用 WritePriority 參數。建議搭配無限資料來源(例如相機,InfiniteSource = ENABLED)使用此功能。如果啟用了 WritePriority 參數,當寫入叢發導致 RAM 的可用頻寬超限時,將會禁止讀取。這允許對 RAM 進行暫時更頻繁的寫入存取。如果相機傳遞了一叢寫入資料,預期該叢資料後面會跟著寫入資料中的間隙(否則會超過可用的 RAM 頻寬),然後可用於暫時提高讀取頻寬。

I/O Properties

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

支援的 Link 格式

Link Parameter Input Link I Output Link O
Bit Width [1, 64]12 as I
Arithmetic {unsigned, signed} as I
Parallelism [1, RamDataWidth / Bit Width / KernelColumns / KernelRows]2 as I
Kernel Columns [1, RamDataWidth / Bit Width / Parallelism / KernelRows]2 as I
Kernel Rows [1, RamDataWidth / Bit Width / 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

Bit width、Parallelism 與 kernel size 的乘積不得超過原生的 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 bit:

參數

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

此參數提供可以在 RAM 中使用的最大資料寬度。

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

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

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

此參數提供 DRAM 的填充率(以百分比表示)。

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

此參數提供目前能放入 memory 中的最大畫面數。能放入 memory 中的最大畫面數取決於參數 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。接著,運算子將會執行主動溢位管理,並確保運算子能夠從溢位中適當復原。當運算子後方的資料接收端停止或暫停傳輸且緩衝區 Fill 等級達到最大值時;或者當輸入頻寬太高以致寫入資料無法傳輸至外部 RAM 時,皆可能會發生溢位。當 InfiniteSource 設定為 Disabled 時,若緩衝區 Fill 等級或輸入頻寬變得太高,則會產生一個禁止信號,以停止前一個運算子傳輸資料。

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

請參閱 'Infinite Sources / Connecting Cameras' 以取得更多資訊。

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

' Shared Memory Concept ' 概念通常會在所有連接的 memory 運算子(亦即所有使用類型為 RAM 之資源的運算子)之間平均分配頻寬。如果 WritePriority 參數為 DISABLED,則 FrameBufferMultiRoi 運算子會為讀取和寫入指定相同的優先順序。透過將 WritePriority 設定為 ENABLED,FrameBufferMultiRoi 運算子會將寫入優先於讀取,但僅限於暫存 memory 資料速率高於可用頻寬的時間。暫時優先處理寫入資料會導致讀取過程暫時變慢。因此,對於 FrameBufferMultiRoi 運算子而言,平均頻寬不得超過可用頻寬。建議將寫入優先順序用於將 InfiniteSource 參數設定為 ENABLED 的任何運算子。當將寫入優先順序搭配可停止的來源使用時,請確保寫入頻寬不會持續過高,否則將會停止從 FrameBufferMultiRoi 運算子讀取,直到緩衝區滿載為止。由於寫入優先順序是針對個別運算子的設定,因此寫入優先順序的影響會隨著設計中增加每個額外的 memory 運算子而遞減。

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

此參數表示緩衝區溢位。這是一個 2-bit 位元圖,其中每個 bit 表示不同類型的溢位。Bit 0 表示 Fill 等級溢位,而 bit 1 表示寫入頻寬溢位。Overflow 的顯示時間取決於所選的 OverflowClearMode。

OverflowClearMode
Type 動態寫入參數
Default AutoClear
Range {AutoClear, ManualClear, ClearAfterRead, ClearWithProcessReset}

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

清除模式:

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

  • ManualClear:當運算子從溢位中復原時,Overflow 參數仍會顯示溢位,直到透過將 ManualClear 寫入 OverflowClearMode 參數來手動重設為止。在此模式下,處理程序重設(例如 Acquisition Stop)不會清除 Overflow 參數,這表示在擷取停止後溢位仍然清晰可見。

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

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

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

此參數定義運算子可以儲存的最大 ROI 數量。在高時脈速率下,大量的 ROI 會對時序產生負面影響。

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

此參數定義實際使用的 ROI 數量。運算子會從每個輸入影像中讀取 NumRoI 個 ROI,並在其輸出上提供這些 ROI。如果參數設定為 static,則範圍為 [1, 65536],且 MaxNumRoI 會被停用。

XOffset
Type dynamic/static read/write parameter
Default 0
Range [0, MaxFrameWidth - XLength]

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

步進大小即為 Parallelism。

瞭解如何在 'Parameter Editing' 中設定欄位參數。

XLength
Type dynamic/static read/write parameter
Default 1024
Range [0, MaxFrameWidth - XOffset]

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

步進大小即為 Parallelism。

瞭解如何在 'Parameter Editing' 中設定欄位參數。

YOffset
Type dynamic/static read/write parameter
Default 0
Range [0, MaxFrameHeight - YLength]

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

瞭解如何在 'Parameter Editing' 中設定欄位參數。

YLength
Type dynamic/static read/write parameter
Default 1024
Range [0, MaxFrameHeight - YOffset]

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

瞭解如何在 'Parameter Editing' 中設定欄位參數。

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

此參數定義 MaxFrameWidth 和 MaxFrameHeight 參數是應自動遵循輸入 I 處的最大影像尺寸 (mode=Auto),還是可以進行調整 (mode=Custom)。Custom 模式允許設定針對應用程式自訂的最大影格尺寸,該尺寸可以小於輸入連接所定義的限制。透過這種方式,可以在 RAM 中儲存更多影格。在 Auto 模式下,I 的連接 Property(Max.Img Width 和 Max.Img Height)不得定義大於記憶體中可用插槽數量 (2^RamAddressWidth) 的最大影像。如果 I 的連接 Property Max.Img Width 和 Max.Img Height 定義的最大影像大於可用記憶體空間,且您處於 Custom 模式,則在縮減輸入連接上的最大影像之前,將無法再編輯 MaxFrameSizeMode 參數。當採集正在運行時,無法寫入此參數。MaxFrameSizeMode 具有與 MaxFrameWidth、MaxFrameHeight 和 ROI 參數相同的參數類型。

MaxFrameWidth
Type 動態/靜態寫入參數
Default 1024
Range [1, Max. Image Width at I]

此參數設定目前影像處理組態的最大影像寬度。超出此限制的輸入影格行將被裁切為 MaxFrameWidth。將此數字減少到最大影像寬度以下可以節省記憶體空間並允許儲存更多影格。此參數僅在 MaxFrameSizeMode 設定為 Custom 時才能編輯。MaxFrameHeight 與 MaxFrameWidth 的乘積不得大於可用記憶體插槽數量 2^RamAddressWidth 乘以輸入 parallelism。當採集正在運行時,無法編輯此參數。MaxFrameWidth 具有與 MaxFrameSizeMode、MaxFrameHeight 和 ROI 參數相同的參數類型。

MaxFrameHeight
Type 動態/靜態寫入參數
Default 1024
Range [1, Max. Image Height at I]

此參數設定目前影像處理組態的最大影像高度。超出此高度限制的輸入影格將被裁切為 MaxFrameHeight。將此數字減少到最大影像高度以下可以節省記憶體空間並允許儲存更多影格。此參數僅在 MaxFrameSizeMode 設定為 Custom 時才能編輯。MaxFrameHeight 與 MaxFrameWidth 的乘積不得大於可用記憶體插槽數量 2^RamAddressWidth 乘以輸入 parallelism。當採集正在運行時,無法編輯此參數。MaxFrameHeight 具有與 MaxFrameSizeMode、MaxFrameWidth 和 ROI 參數相同的參數類型。