Operator FrameBufferRandomRead (imaFlex)

Operator Library: Memory

此運算子有助於隨機讀取緩衝的資料。畫面資料透過鏈結 I 傳輸至運算子。資料的隨機讀取可透過將位址傳輸至連接埠 RColA(讀取行位址)和 RRowA(讀取列位址)來執行。運算子會使用這些位址根據給定的座標來讀取畫面資料。產生的輸出畫面具有位址輸入的影像尺寸。需要一個類型為 RAM 的 VisualApplets 資源。請查看「Allocation of Device Resources」以取得更多資訊。

FrameBufferRandomRead 運算子將影像串流緩衝在張量擷取卡 RAM (DRAM) 中。需要一個類型為 RAM 的 VisualApplets 資源。多個類型為 RAM 的資源透過共用記憶體概念使用相同的實體 RAM。關於如何使用共用記憶體的說明可在應用筆記:共用記憶體中找到。

此運算子有兩種狀態:

  • Write 狀態:輸入影像儲存在緩衝區中。此運算子的運作方式類似 FIFO。如果有足夠的記憶體,多個影像可以儲存在緩衝區中。

  • Read 狀態:影像完全儲存至記憶體後,使用輸入端 RColA 和 RRowA 處給定的位址讀出記憶體。位址的數量和位址鏈結影像尺寸決定了輸出影像的寬度和高度。

影像資料輸入與位址輸入彼此不同步。它們可能具有不同的影像尺寸。兩個位址輸入 RColA 和 RRowA 都必須是 O 同步的。

請注意輸入鏈結的時序:在沒有緩衝的情況下,位址輸入不得由與資料鏈結輸入 I 相同的運算子提供來源。這是因為在將影像資料寫入運算子的同時,無法接受用於讀取目前畫面的位址。只有在畫面完全儲存至緩衝區後,才能接受位址。在許多情況下,會使用 CreateBlankImage 運算子來產生用於位址的影像。

此運算子使用大型非 FPGA 記憶體。如果只需要儲存小型畫面或行,請考慮使用 FrameMemoryRandomRd 或 LineMemoryRandomRd 運算子。

此運算子可以處理二維影像 (Img Protocol = VALT_IMAGE2D) 以及一維的行序列 (Img Protocol = VALT_LINE1D)。在二維模式下,會處理完整的畫面,這意味著只有在寫入完整畫面後才能開始讀取。一旦位址連接埠 (RColA 和 RRowA) 接收到畫面的結尾,該畫面的記憶體就會再次可用,並且下一個讀取會針對下一個畫面。一維模式會處理行。因此,只要寫入了一行,讀取就可以開始。位址連接埠 RColA 上的行結尾會釋放該行的記憶體,並且下一個 RColA 值將定址下一行。在一維行模式中不使用 RRowA,且應將其設為任何常數值 (CONST)。

所有接腳都允許空白畫面、空白行和不同的行長度。

輸入畫面的尺寸可能會超過內部畫面的尺寸。然後運算子會將送入的畫面裁切至由 MaxFrameWidth 和 MaxFrameHeight 定義的尺寸。

連接埠 I 上輸入影像的最大尺寸可以定義得大於 RAM 中實際可用的儲存空間。這允許靈活的使用方式,可以在非常寬和非常高的影像之間切換。MaxFrameWidth 和 MaxFrameHeight 參數定義了儲存中影像的大小。因此,這兩個參數所定義的影像不得大於可用儲存空間。

使用 InfiniteSource 的溢位管理

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

算子限制

  • 讀取位址沒有有效性檢查。如果 RColA 大於或等於 MaxFrameWidth,或者如果 RRowA 大於或等於 MaxFrameHeight(僅在 2D 模式下),運算子會從記憶體中讀取隨機的虛擬值。

  • 鏈結屬性的限制對於 Max. Image Width 始終最大為 2^24-1,對於 Max. Image Height 始終最大為 2^17-1。然而,如果將 MaxFrameSizeMode 設為 Auto,則另外適用以下限制:

    • In 2D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth * I.MaxImgHeight <= 2^RamAddressWidth.

    • In 1D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth <= 2^RamAddressWidth.

  • 所有輸入連接埠的 Parallelism 為 1。

頻寬最佳化

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

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

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

I/O Properties

Property Value
Operator Type M
輸入連結 I,影像資料輸入
RColA,I 處像素的讀取欄位位址
RRowA,I 處像素的讀取列位址
Output Link O, 影像資料輸出

同步與非同步輸入

  • 同步群組:RColA 與 RRowA
  • 輸入 I 對該群組而言是非同步的。

支援的 Link 格式

Link Parameter Input Link I 輸入連結 RColA 輸入連結 RRowA Output Link O
Bit Width [1, 64]1 自動2 自動3 as I
Arithmetic {unsigned, signed} unsigned unsigned as I
Parallelism 1 1 1 as I
Kernel Columns [1, Ram Data Width / Bit Width / Kernel Rows]4 1 1 as I
Kernel Rows [1, Ram Data Width / Bit Width / Kernel Columns]5 1 1 as I
Img Protocol VALT_LINE1D / VALT_IMAGE2D as I as I as I
Color Format any VAF_GRAY VAF_GRAY as I
Color Flavor any FL_NONE FL_NONE as I
Max. Img Width 2^24-16 any 同 RColA 同 RColA
Max. Img Height 2^17-16 any 同 RColA 同 RColA

1

輸入 bit width 的範圍為:

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

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

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

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

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

2

欄位位址的 bit width 為:

3

列位址的 bit width 為:

4

BitWidth * Columns * Rows <= RamDataWidth

5

BitWidth * Columns * Rows <= RamDataWidth

6

鏈結屬性的限制對於 Max. Image Width 始終最大為 2^24-1,對於 Max. Image Height 始終最大為 2^17-1。然而,如果將 MaxFrameSizeMode 設為 Auto,則另外適用以下限制:

  • In 2D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth * I.MaxImgHeight <= 2^RamAddressWidth.

  • In 1D-mode, if MaxFrameSizeMode is set to Auto, then I.MaxImgWidth <= 2^RamAddressWidth.

參數

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

此參數提供可使用的資料位元數。

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

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

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

此參數用於定義參數 MaxFrameWidth 與 MaxFrameHeight 是否應自動遵循輸入 I 處的最大影像尺寸(模式 = Auto),或者這些參數是否可進行調整(模式 = Custom)。Custom 模式允許設定針對應用程式客製化的最大影格尺寸,該尺寸可能遠小於輸入連線的限制。透過這種方式,可以在 RAM 中儲存更多影格。在 Auto 模式下,I 的連線屬性(Max.Img Width 與 Max.Img Height)所定義的最大影像不得大於記憶體中可用槽位的數量(2^RamAddressWidth)。如果 I 的連線屬性 Max.Img Width 與 Max.Img Height 所定義的最大影像大於可用記憶體空間,且您處於 Custom 模式,則無法再編輯 MaxFrameSizeMode 參數,直到將輸入連線上的最大影像定義得更小為止。當擷取正在執行時,此參數無法寫入。在 1D 模式下,輸入 I 的 MaxFrameHeight 與 Max.Img Height 可被視為 1。

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

此參數用於設定目前影像處理組態的最大影像寬度。超過此限制的輸入影格行將被裁剪至 MaxFrameWidth。將此數值降低至最大影像寬度以下可節省記憶體空間並允許儲存更多影格。此參數僅在 MaxFrameSizeMode 設定為 Custom 時才能編輯。MaxFrameHeight 與 MaxFrameWidth 的乘積不得大於可用記憶體槽位的數量:2^RamAddressWidth。在 1D 模式下,MaxFrameHeight 可被視為 1。當擷取正在執行時,此參數無法編輯。

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

此參數用於設定目前影像處理組態的最大影像高度。超過此高度限制的輸入影格將被裁剪至 MaxFrameHeight。將此數值降低至最大影像高度以下可節省記憶體空間並允許儲存更多影格。此參數僅在 MaxFrameSizeMode 設定為 Custom 且 Image Protocol 設定為 VALT_IMAGE2D 時才能編輯。在 1D 模式下,MaxFrameHeight 可被視為 1。MaxFrameHeight 與 MaxFrameWidth 的乘積不得大於可用記憶體槽位的數量:2^RamAddressWidth。當擷取正在執行時,此參數無法編輯。

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

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

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

此參數提供目前可放入記憶體中的最大影格數。可放入記憶體中的最大影格數取決於參數 RamAddressWidth、MaxFrameHeight 與 MaxFrameWidth。

MaxFrameCount = 2^RamAddressWidth / (MaxFrameHeight * MaxFrameWidth)

此參數在 1D 模式下無效。

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

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

此參數在 1D 模式下無效。

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}

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

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

此參數表示緩衝區溢位。這是一個 2-bit 的點陣圖,其中每一個 bit 分別表示不同類型的溢位。Bit 0 表示 fill level 溢位,bit 1 表示寫入頻寬溢位。Overflow 參數顯示溢位持續的時間,取決於 OverflowClearMode。

只有在 InfiniteSource 參數設為 ENABLED 時,Overflow 參數才會作用。

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

只有在 InfiniteSource 參數設為 ENABLED 時,OverflowClearMode 參數才會作用。