運算子 FrameBufferRandomRead (imaFlex)

Library: Memory 運算子

此運算子可協助對 緩衝資料進行隨機讀取。幀資料是透過連結 I 傳輸至此運算子。 可透過將位址傳輸至埠 RColA(讀取欄位位址)和 RRowA(讀取行位址),來執行資料的 隨機讀取。 此運算子會利用 這些位址,依據指定的座標讀取幀資料。產生的輸出幀 其影像尺寸即為位址輸入所對應的尺寸。此處需一個類型為 RAM的VisualApplets 資源。如需更多資訊,請參閱「裝置資源的分配」。

該 FrameBufferRandomRead運算子會將影像串流 緩衝至幀擷取器 RAM(DRAM)中。需有一個類型為 RAM的VisualApplets 資源。多個類型為 RAM 的資源會依照共享記憶體的概念,共用同一塊實體 RAM。 有關如何使用共享記憶體的說明,請參閱《應用說明:共享記憶體》。

該運算子有兩種狀態:

  • 寫入狀態:輸入影像儲存於緩衝區中。該 運算子運作方式類似 FIFO。若可用記憶體充足,則可 將多張影像儲存於緩衝區中。

  • 讀取狀態:當影像已完全儲存至 記憶體後,系統會根據輸入端 RColA 和 RRowA 所提供的位址,從記憶體中讀取影像。 位址數量與位址對應的影像尺寸,共同決定了輸出 影像的寬度與高度。

影像資料輸入與位址輸入之間 並非同步。兩者的影像尺寸可能不同。兩個位址 輸入RColA和RRowA都必須 為 O-同步。

請注意輸入連結的時序:位址 輸入絕不能由與資料鏈結輸入 I 相同的運算子提供,且 不得進行緩衝。這是因為在將影像資料寫入運算子期間,無法接受任何 用於讀取當前幀的位址。只有當幀已完全儲存至 緩衝區後,才能接受位址。 在許多情況下,該運算子 CreateBlankImage 會被用來 為這些位址產生影像。

該運算子使用大型非 FPGA 記憶體。若 僅需儲存小型幀或行,請考慮使用以下運算子 FrameMemoryRandRd 或 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 時,操作器便會從溢出狀態中恢復 並停止捨棄輸入資料。溢出 參數用以指示溢出發生之時點。透過 溢出清除模式 (OverflowClearMode) 參數,您可以定義 「溢出」參數是否應在溢出 恢復後立即重置,或是需手動重置溢出。 「溢出」與 「溢出清除模式」參數僅能在 「無限來源」參數設定為 「啟用」時使用。

Operator Restrictions

  • 讀取位址並未進行有效性檢查。若 RColA大於或等於 MaxFrameWidth,或若 RRowA大於或等於 MaxFrameHeight(僅限 2D 模式),則 該運算子會從記憶體中讀取隨機的虛擬值。

  • 連結屬性的限制值始終為: 「最大圖片寬度」為 2^24-1, 「最大圖片高度」為 2^17-1。然而,若 MaxFrameSizeMode設定為 「自動」時,則會額外適用以下 限制:

    • 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.

  • 所有輸入埠的並行度為 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
Input Links I,影像資料輸入
RColA,讀取位置 I 的像素之欄位位址
RRowA,讀取位置 I 的像素之行位址
Output Link O,影像資料輸出

同步與非同步 輸入

  • 同步群組:RColA與RRowA
  • 輸入I與該群組是異步的。

Supported Link Format

Link Parameter Input Link I 輸入連結 RColA 輸入連結 RRowA Output Link O
Bit Width [1, 64]1 auto2 auto3 as I
Arithmetic {unsigned, signed} 無號數 無號數 as I
Parallelism 1 1 1 as I
Kernel Columns [1,RAM 資料寬度/Bit Width /核心行數]4 1 1 as I
Kernel Rows [1, 記憶體資料寬度 /Bit Width / 核心欄位]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]。

輸入位元寬度不得超過原生 RAM 資料寬度 RamDataWidth。

2

欄位位址的位寬為:

3

行位址的位寬為:

4

BitWidth * Columns * Rows <= RamDataWidth

5

BitWidth * Columns * Rows <= RamDataWidth

6

連結屬性的限制值始終為: 「最大影像寬度」為 2^24-1, 「最大影像高度」為 2^17-1。然而,若 MaxFrameSizeMode設定為 「自動」時,則另須遵守 以下限制:

  • 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.

Parameters

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

此參數指定可使用的資料位元數。

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

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

MaxFrameSizeMode
Type dynamic write parameter
Default Auto
Range {自動、自訂}

此參數用以定義參數 MaxFrameWidth與 MaxFrameHeight應自動 遵循輸入I的最大影像尺寸 (模式=自動),抑或這些參數 可進行調整(模式=自訂)。 自訂模式允許設定最大 畫面尺寸,此尺寸會根據應用程式需求進行客製化,且可能遠小於 輸入連結所設定的限制。如此一來,即可在 RAM 中儲存更多畫面。在「自動」模式下,連結屬性 (Max.Img Width和 Max.Img Height) 所定義的最大影像尺寸,不得大於 記憶體中可用插槽的數量 (2^RamAddressWidth)。 若鏈結 屬性「最大影像寬度」與 「最大影像高度」 所定義的最大影像尺寸大於 可用記憶體空間,且您處於 「自訂」模式下, 「MaxFrameSizeMode」參數將無法 再進行編輯,直到輸入連結上的最大影像尺寸被設定為較小值為止。 當資料擷取正在執行時,此參數無法寫入。在 1D 模式下, MaxFrameHeight以及 輸入端 I的Max.Img Height可視為 1。

MaxFrameWidth
Type dynamic write parameter
Default 1024
Range [1,I 處的最大影像寬度]

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

MaxFrameHeight
Type dynamic write parameter
Default 1024
Range [1,I 處的最大影像高度]

此參數用於設定當前影像處理 設定中的最大影像高度。超過此高度限制的輸入幀將被裁切至 MaxFrameHeight。將此數值 降低至最大影像高度以下,可節省記憶體空間並容許儲存更多幀。 此參數僅能在 MaxFrameSizeMode設定為 「自訂」且「影像 協定」設定為 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 模式下處於停用狀態。

幀數
Type 動態讀取參數
Default 0
Range [0,最大幀數]

此參數提供記憶體中當前的幀數。

此參數在 1D 模式下處於停用狀態。

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

該操作員可直接置於攝影師之後。在此 情況下,必須將InfiniteSource參數 設定為ENABLED。該操作員隨後將執行 主動溢出管理,並確保操作員能從 溢出情況中正確恢復。 溢出可能發生於:當操作器後方的資料接收端 停止或暫停傳輸,且緩衝區填滿程度達到最大值時; 或是當輸入頻寬過高,導致寫入資料無法傳輸 至外部 RAM 時。 當InfiniteSource 設定為DISABLED 時,若緩衝區填充 水準或輸入頻寬過高,系統將產生抑制訊號, 以阻止後續運算子傳輸資料。

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

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

寫入優先級
Type 靜態寫入參數
Default DISABLED
Range {ENABLED, DISABLED}

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

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

此參數表示緩衝區溢出。它是一個 2 位元的位圖,其中 每個位元代表不同類型的溢出。 位元 0 表示填充水準 溢出,而位元 1 表示寫入頻寬溢出。 「溢出」參數顯示溢出狀態的時間長短, 取決於「溢出清除模式」。

「溢出」參數僅在 「無限來源」參數設定為 「啟用」時才生效

OverflowClearMode
Type dynamic write parameter
Default 自動清除
Range {自動清除、手動清除、讀取後清除、隨程序重置清除}

OverflowClearMode決定當 運算子從溢出狀態恢復後, 如何清除Overflow參數。只有當運算子已不再處於溢出狀態時, 才能使用此參數重置溢出狀態。

清除模式:

  • 自動清除:當操作員從 溢出狀態恢復時,溢出 參數會自動重置。

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

  • ClearAfterRead:當操作員 從溢出狀態恢復後, 「溢出」參數仍會顯示 溢出狀態,直到讀取該「溢出」 參數或發生程序重置(例如:當資料擷取 停止時)。

  • ClearWithProcessReset:當 運算子從溢出中恢復時, 「溢出」參數仍會顯示 溢出狀態,直到發生重置為止(例如:當資料擷取 停止時)。

OverflowClearMode參數僅在 InfiniteSource參數 設定為ENABLED時才生效