Operator RamLUT (imaFlex)

Operator Library: Memory

此運算子基於 Frame Grabber RAM(通常為 DRAM)實作大型對照表 (LUT)。 需要一個類型為 RAM 的 VisualApplets 資源(請參閱 「配置裝置資源」)。多個類型為 RAM 的資源會透過共用記憶體概念使用相同的實體 RAM。有關如何使用共用記憶體的說明文件,請參閱 應用筆記:共用記憶體。

運算子 RamLUT 支援輸出端上的 kernel。

此運算子的典型應用情境為色彩空間分類問題。

該運算子透過兩種方式便於程式設計 LUT 內容。 無論採用哪種方式,都必須在綜合過程完成後、於執行階段使用 applet 時對 LUT 進行程式設計。

  1. 程式設計 LUT 的其中一種可能性是暫存器介面,其提供位址值參數 InitAddress 與 InitData。 首先,使用參數 InitAddress 設定位址。 接著,將資料寫入參數 InitData。 寫入資料會促使運算子實際寫入 LUT 並取代先前的數值。 如果您使用 kernel,寫入最後一個 kernel 元素會促使運算子實際寫入 LUT 並取代先前的數值。

  2. 程式設計 LUT 的第二種可能性是使用包含內容的檔案。 檔案存取速度比暫存器存取更快,但需要注意一些事項。檔案可以採用不同的格式。 格式必須由參數 InitFileMode 定義:

    • text_with_checks

      在此模式中,初始檔案必須是文字檔,其中數值字串以 空白、定位點 (tab)、換行字元 (LF) 或歸位換行字元 (CRLF) 分隔。 運算子會檢查這些檔案是否有錯誤,如果檔案無法使用則會回報錯誤。

      每個數值代表一個 kernel 元素,且必須是正確範圍內的十進位數字。

      下圖展示了 4x3 kernel 的檔案:

    • text_raw

      此模式類似於 text_with_checks 模式,但包含較少的錯誤檢查。 在此模式中,每個數值必須提供於單獨的行中。 與 text_with_checks 模式相比,在此模式中載入檔案的速度更快。 上述範例在 text_raw 模式下的外觀如下:

    • binary

      binary 模式假設為二進位檔案,其中每個 LUT 元素的每個 kernel 項目使用 8 個位元組。 如果 kernel 項目數值可以用少於 64 bit 表示,則未使用的位元會被忽略。 這是將數值寫入 LUT 的最快方法。 上述範例在 binary 模式下的外觀如下:

    在這三種模式中,檔案中的項目數量不得超過 LUT 元素的數量,且數值數量 必須是 KernelSize 的倍數。 因此,檔案必須包含最多 2^InputBitWidth * KernelSize 個數值。

    當初始檔案包含 2^InputBitWidth * KernelSize 個數值時,LUT 記憶體將從 位址 0 開始完全遭到覆寫。 在此情況下,參數 InitAddress 不會被觸動。

    當初始檔案包含較少項目時,會執行部分初始化。 此時,初始化會從 InitAddress 參數指定的位址開始進行。 在寫入最後一個 LUT 項目後,參數 InitAddress 會自動遞增至下一個位置。 這可用於監控已寫入了多少個 LUT 項目。 當檔案包含多於 (2^InputBitWidth - InitAddress) * KernelSize 個數值時, 則會在寫入 LUT 的最後一個項目後停止初始化,且 InitAddress 會設為 0。

    參數 InitFilename 指定包含初始值的檔案。 最後,將數值 1 寫入參數 LoadInitFile 會開始 讀取檔案,若被接受,則將數值寫入硬體。 將 0 寫入參數 LoadInitFile 不會觸發數值的載入。 如果您不希望在 applet 初始化程序期間將初始檔案載入硬體,這會非常有用。

    在模擬期間,載入初始檔案的方式與執行階段相同。 針對部分組態或發生錯誤的情況,檢查模擬記錄檔中的輸出可能會很有幫助 (您可能需要啟用 Show Details 資料夾內的 Simulation 對話方塊)。

請注意,DRAM 技術在隨機存取方面的效能非常差。 在最糟的情況下,如果對 DRAM 的每次連續存取都會導致頁面快取未命中 (page miss) 並需要新的列活化, DRAM 吞吐量將損失高達 90% 的最大效能,導致頻寬使用率僅剩約 10%。

輸入 link 可以處理動態行寬,以及空行和空影格。因此,輸出 link 也可以處理相同的影像尺寸。

頻寬最佳化

為了達到最佳效能,所使用的資料位元數應盡可能與模組參數 RamDataWidth 中提供的數字相符。如果 bit width 與 kernel size 的乘積等於內部 RAM 連接埠寬度 RamDataWidth,則會達到穿過運算子的最大頻寬。

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

I/O Properties

Property Value
Operator Type M
Input Link I,讀取位址輸入
Output Link O, 影像資料輸出

支援的 Link 格式

Link Parameter Input Link I Output Link O
Bit Width [1, RAM Address Width]1 [1, 64]2
Arithmetic unsigned as I
Parallelism 1 as I
Kernel Columns 1 [1, Ram Data Width / Bit Width]
Kernel Rows 1 [1, Ram Data Width / Bit Width / Kernel Columns]
Img Protocol {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} as I
Color Format VAF_GRAY as I
Color Flavor FL_NONE as I
Max. Img Width any as I
Max. Img Height any as I

1

允許的輸入 bit width 取決於擷取卡的實體記憶體以及有多少運算子共用該 RAM。 RamAddressWidth 參數提供了可使用的最大位址位元。 請注意,此數字可能會根據設計中基於 RAM 的運算子數量而有所變更。

2

允許的輸出 bit width 取決於擷取卡的實體記憶體。 bit width 限制為 64 bit,但可以儲存多個 kernel 元件。 (bit width * kernel size) 的乘積不得超過參數 RamDataWidth 中顯示的原生 RAM 資料寬度。

參數

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

此參數提供可在 RAM 介面上使用的資料位元數。這是輸出可以提供的最大位元數 (如果正確使用 kernel)。

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

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

InitAddress
Type 動態寫入參數
Default 0
Range [0, 2^InputBitWidth-1]

此參數定義由參數 InitData 所定義之資料的位址。 請參閱上方的說明。

InitData
Type 動態寫入參數
Default 0
Range [0, 2^OutputBitWidth-1]

此參數定義寫入至由參數 InitAddress 所定義之位址的資料。 寫入此參數會開始實際寫入至硬體中。 請參閱上方的說明。

InitFileLoadMode
Type 動態寫入參數
Default text_with_checks
Range {text_with_checks, text_raw, binary}

此參數定義載入至查找表中之檔案的檔案格式與模式。 請參閱上方的說明。

InitFileName
Type 動態寫入參數
Default InitRamLut.txt
Range

此參數定義初始化檔案的名稱。

LoadInitFile
Type 動態寫入參數
Default 0
Range [0, 1]

若要開始將 InitFileName 參數指定的檔案載入至 LUT 中,請將值 1 寫入此參數。 請參閱上方的說明。