Operator FrameBufferMultiRoiDyn

Operator Library: Memory

此運算子會在 frame grabber RAM (DRAM) 中對輸入影像資料進行緩衝處理,並為每個緩衝的影像讀取出多個動態興趣區 (ROI)。要讀出的 ROI 座標是透過使用額外的輸入連結來定義。下圖顯示了運算子針對一個輸入影格和四個 ROI 的運作行為總覽。

需要一個類型為 RAM 的 VisualApplets 資源(請參閱 'Allocation of Device Resources')。多個類型為 RAM 的資源會透過 ' Shared Memory Concept ' 共用相同的實體 RAM。關於如何使用共用記憶體的說明,可在 Application Note: Shared Memory 中找到。

所有 ROI 都會作為個別影像依序讀取:ROI 0、ROI 1、ROI 2... 直到 ROI N-1。N 是針對一個輸入影格要讀出的 ROI 數量,也就是座標輸入端上的影像大小。只要不超過最大輸入影格尺寸,即支援所有可能的矩形區域,亦即可以將單一像素、單一列、單一行、矩形區域或完整影格定義為 ROI。

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

每個 ROI 都可以個別定義。

ROI 可以互相重疊。

如果 ROI 影像為空(即不包含任何像素),則運算子會在其次輸出端提供一個空影像。空影像不包含任何像素。

負的 ROI 寬度 (XTopLeft > XBottomRight) 或 ROI 高度 (YTopLeft > YBottomRight) 也會導致輸出端產生空的 ROI。 支援的 ROI 最大數量取決於 XTopLeft 輸入連結上的每個影像最大像素數:XTopLeft.MaxImageWidth * XTopLeft.MaxImageHeight 。

ROI 座標在四個獨立的座標輸入連結上提供,作為包含 ROI 座標的影像: XTopLeft、YTopLeft、 XBottomRight、 YBottomRight。運算子會將這些影像中的每個像素視為有效的 ROI 座標集。因此,ROI 輸入影像的大小決定了輸出 ROI 的數量。EoLs(行結束)和變動的行長度可用但會被忽略,因為運算子的 ROI 輸入只會評估有效像素和 EoF (影格結束)。對於輸入連結 I 處的每個輸入影像,都需要一個新的 ROI 座標影像集。ROI 是由左上角的 X、Y 座標以及右下角的 X、Y 座標來定義。

請注意,ROI X 座標經過轉換以符合輸入連結 I 其 Parallelism 所定義的 X 刻度,亦即運算子 FrameBufferMultiRoiDyn 只能以 Parallelism 的刻度來切割行。當定址的像素不是 XTopLeft 平行元件的第一個像素,或是不是 XBottomRight 平行元件的最後一個像素時,座標會向上或向下捨入,且產生的 ROI 仍然包含平行元件的所有像素。

以下章節透過範例來解釋運算子的行為:

在此範例中,輸入連結 I 處的 Parallelism = 4。

因此,XTopLeft 會向下捨入至平行元件的第一個像素:0、4、8、12、...,而 XBottomRight 會向上捨入至平行元件的最後一個像素 3、7、11、15、...

例如,若 ROI X 座標為 3 和 7,則 ROI 的第一欄是輸入影像的第 3 欄,最後一欄是第 7 欄。運算子會將 XTopLeft 向下捨入為 0; XBottomRight 維持 7 不變。因此,寬度變為 8。ROI 高度不相依於 Parallelism,因此可以是任何合法的值。

[備註] 公式:

XTopLeft* = floor(XTopLeft / Parallelism) * Parallelism

XBottomRight* = ceil((XBottomRight + 1) / Parallelism) * Parallelism - 1

[備註] 範例:

在輸入連結 I 處的 Parallelism 為 4 的情況下:

  • 112 到 551 變為 112 到 551。因此,寬度變為 = 551 - 112 + 1 = 440
  • 101 到 540 變為 100 到 543。因此,寬度變為 = 543 - 100 + 1 = 444

所有 4 個 ROI 輸入彼此同步,亦即這些連結上的影像必須大小相同,且須同時同步提供。透過任意的 O 型模組網路從相同的 M 型模組取得來源時,一律會是這種情況。如需詳細資訊,請參閱'M-type Operators with Multiple Inputs'章節。

ROI 座標與輸入連結 I 非同步。您可以使用 CreateBlankImage 運算子來產生 ROI 座標。

一旦對應的輸入影格完全緩衝完成(即收到輸入影格的 EoF (End of Frame) 信號),並且收到各個 ROI 影像定義輸入連結 XTopLeft, YTopLeft, XBottomRight, YBottomRight 上的第一個像素,運算子就會在其輸出端提供 ROI 影像。如果 DRAM 中有足夠的空間,則在讀取 ROI 的同時,可以將下一個輸入影格寫入 DRAM。RAM 頻寬在寫入和讀取之間共用,但讀取只能在寫入對應的輸入影格之後才能開始。讀取輸入影格的最後一個 ROI(由各個 ROI 影像定義輸入連結上的最後一個像素定義,即收到 ROI 影像 EoF (End of Frame))之後,會捨棄目前的影格,且下一個 ROI 影像會定址下一個輸入影格。關於運算子的延遲資訊,請參閱 Table 46, 'Individual Latencies of the Operators in Library Memory'。

運算子支援兩種將影像資料緩衝至 DRAM 的模式,您可以透過參數 MaxFrameSizeMode 來進行設定:

  • 對於 MaxFrameSizeMode = AUTO,DRAM 會緩衝大小為最大影像尺寸的影像,也就是 I.MaxImgWidth * I.MaxImgHeight。

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

  • 對於 MaxFrameSizeMode = CUSTOM,緩衝輸入影格的最大尺寸是由參數 MaxFrameWidth 和 MaxFrameHeight 來定義。即使實際的輸入影格更大,超出指定參數尺寸的資料也會被捨棄(類似於沒有位移的 ROI)。在該情況下,DRAM 會為影格大小 MaxFrameWidth * MaxFrameHeight 保留記憶體。

在這兩種情況下,都不會檢查輸入連結 ROI 座標是否位於輸入影像內。由於座標可以設定為最大輸入影格的任何像素。如果它們位於實際輸入影像資料之外,運算子會讀取隨機的虛擬值,但 ROI 大小不會改變。

此運算子支援所有輸入鏈路上的空白畫面、空白行和不同的行長度。

使用 InfiniteSource 的溢位管理

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

算子限制

  • 輸入鏈路的 Parallelism 必須是 2 的冪次方。

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

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

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

頻寬最佳化

為了獲得最佳效能,所使用的資料位元數應盡可能接近模組參數 RamDataWidth 中提供的數值。如果 Bit Width、核心大小和 Parallelism 的乘積等於內部 RAM 連接埠寬度 RamDataWidth,則會達到通過運算子的最大頻寬。請注意,內部 Bit Width 可以透過使用核心來增加,但完整核心仍將被定址為單一像素。

為了讓運算子能夠處理超出 RAM 可用最大頻寬的長寫入資料突發(burst),請啟用 WritePriority 參數。建議將其用於無限資料來源,例如相機(InfiniteSource = ENABLED)。如果啟用了 WritePriority 參數,則在因寫入突發而超出 RAM 的可用頻寬時,將禁止讀取。這允許對 RAM 進行暫時更頻繁的寫入存取。如果相機傳送寫入資料突發,預期該突發後面會有寫入資料的間隙(否則會超出可用的 RAM 頻寬),然後可用於暫時提高讀取頻寬。

I/O Properties

Property Value
Operator Type M
輸入連結 I,影像資料輸入
XTopLeft,座標資料輸入
YTopLeft,座標資料輸入
XBottomRight,座標資料輸入
YBottomRight,座標資料輸入
Output Link O, data output

同步與非同步輸入

  • 4 個 ROI 座標輸入 XTopLeft、YTopLeft、XBottomRight 和 YBottomRight 是彼此同步的。
  • ROI 座標輸入 XTopLeft、YTopLeft、XBottomRight 和 YBottomRight 與輸入鏈路 I 非同步。

支援的 Link 格式

Link Parameter Input Link I 輸入連結 XTopLeft 輸入連結 YTopLeft 輸入連結 XBottomRight 輸入連結 YBottomRight Output Link O
Bit Width [1, 64]12 自動3 自動4 自動3 自動4 as I
Arithmetic {unsigned, signed} unsigned unsigned unsigned unsigned as I
Parallelism 2^N,其中 N = {0,1,2...}2 1 1 1 1 as I
Kernel Columns [1, RamDataWidth / Bit Width / Parallelism / KernelRows]2 1 1 1 1 as I
Kernel Rows [1, RamDataWidth / Bit Width / Parallelism / KernelColumns]2 1 1 1 1 as I
Img Protocol VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D VALT_IMAGE2D as I
Color Format any VAF_GRAY VAF_GRAY VAF_GRAY VAF_GRAY as I
Color Flavor any FL_NONE FL_NONE FL_NONE FL_NONE as I
Max. Img Width 2^31 - 15 2^31 - 1 與 XTopLeft 相同 與 XTopLeft 相同 與 XTopLeft 相同 as I
Max. Img Height 2^RamAddressWidth5 2^31 - 1 與 XTopLeft 相同 與 XTopLeft 相同 與 XTopLeft 相同 as I

1

輸入 bit width 的範圍為:

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

  • 對於有符號輸入:[2, 64]

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

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

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

2

Bit Width、Parallelism 和核心大小的乘積不得超過原生 RAM 資料寬度。

3

X 座標輸入的 Bit Width 為:

4

Y 座標輸入的 Bit Width 為:

5

輸入連結 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 的 Bit Width 總和必須小於 48 bit。

參數

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

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

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

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

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

此參數定義參數 MaxFrameWidth 和 MaxFrameHeight 是否應自動遵循輸入 I 處的最大影像尺寸(mode=Auto),或者是否可以調整這些參數(mode=Custom)。Custom 模式允許設定針對應用程式自訂的最大畫面尺寸,該尺寸可能比輸入鏈路定義的限制小得多。透過這種方式,可以在 RAM 中儲存更多的畫面。在 Auto 模式下,I 的鏈路屬性(Max.Img Width 和 Max.Img Height)不得定義大於記憶體中可用插槽數量(2^RamAddressWidth)的最大影像。如果 I 的鏈路屬性 Max.Img Width 和 Max.Img Height 定義了比可用記憶體空間更大的最大影像,且您處於 Custom 模式,則在將輸入鏈路上的最大影像定義得更小之前,將無法編輯 MaxFrameSizeMode 參數。當擷取正在執行時,無法寫入此參數。

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

此參數設定目前影像處理組態的最大影像寬度。超出此限制的輸入畫面行將被裁切至 MaxFrameWidth。將此數字降低到最大影像寬度以下可節省記憶體空間並允許儲存更多畫面。此參數僅在 MaxFrameSizeMode 設定為 Custom 時才能編輯。MaxFrameHeight 和 MaxFrameWidth 的乘積不得大於可用記憶體插槽數 2^RamAddressWidth 乘以輸入 Parallelism。當擷取正在執行時,無法編輯此參數。

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

此參數設定目前影像處理組態的最大影像高度。超出此高度限制的輸入畫面將被裁切至 MaxFrameHeight。將此數字降低到最大影像高度以下可節省記憶體空間並允許儲存更多畫面。此參數僅在 MaxFrameSizeMode 設定為 Custom 時才能編輯。MaxFrameHeight 和 MaxFrameWidth 的乘積不得大於可用記憶體插槽數 2^RamAddressWidth 乘以輸入 Parallelism。當擷取正在執行時,無法編輯此參數。

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。然後,運算子將執行主動溢位管理,並確保運算子能夠從溢位中適當恢復。當運算子後方的資料接收端停止或暫停傳輸且緩衝區填滿程度達到最大值時,或者當輸入頻寬過高以致寫入資料無法傳輸到外部 RAM 時,可能會發生溢位。當 InfiniteSource 設定為 DISABLED 時,如果緩衝區填滿程度或輸入頻寬變得過高,將產生一個禁止訊號,以阻止後續運算子傳輸資料。

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

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

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

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

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

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

Overflow 參數僅在 InfiniteSource 參數設為 ENABLED 時作用

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 參數仍會顯示溢位,直到發生重設(例如停止擷取時)為止。

OverflowClearMode 參數僅在 InfiniteSource 參數設為 ENABLED 時作用