RamLUT 運算子 (imaFlex)

Library: Memory 運算子

此運算子基於 幀擷取器 RAM(通常為 DRAM)實作一個大型查表(LUT)。 需有一個類型為RAM 的 VisualApplets 資源(請參閱「裝置資源的分配」)。多個類型為RAM的資源會採用相同的實體 RAM,並採用共享記憶體的概念。有關如何使用共享記憶體的說明,請參閱 《 應用說明:共享記憶體》。

運算子RamLUT支援在輸出端使用核心函式。

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

該運算子透過兩種方式協助編程 LUT 內容。 無論採用哪種方式,都必須在合成過程完成後,於運行時使用該小程式時,才對 LUT 進行編程。

  1. 編程 LUT 的其中一種方式是透過寄存器介面,該介面提供地址 值參數InitAddress和InitData。 首先,使用參數InitAddress 設定地址。 接著,將資料寫入InitData 參數中。 寫入資料會促使運算子實際將資料寫入 LUT 並取代先前的值。 若使用核心,將資料寫入最後一個核心元素,會促使運算子實際將資料寫入 LUT 並取代先前的值。

  2. 編程 LUT 的第二種方式是使用包含內容的檔案。 存取檔案的速度比存取寄存器更快,但需特別留意。檔案可以是不同的格式。 格式必須透過參數InitFileMode 來定義:

    • text_with_checks

      在此模式下,初始化檔案必須為純文字檔案,其中數值字串須以 空格、制表符、換行符 (LF) 或回車換行符 (CRLF) 之一作為分隔符。 系統會檢查這些檔案是否有錯誤,若檔案無法使用,則會回報錯誤。

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

      下圖展示了針對 4x3 核心的檔案:

    • text_raw

      此模式與text_with_checks模式相似,但進行的錯誤檢查較少。 在此模式下,每個值都必須佔據獨立的一行。 相較於text_with_checks模式,以此模式載入檔案的速度較快。 上述範例在text_raw模式下將呈現如下:

    • binary

      二進位模式假設使用二進位檔案,其中 LUT 元素的每個核心條目佔用 8 位元組。 若核心條目值可由少於 64 位元表示,則未使用的位元將被忽略。 這是將值寫入 LUT 的最快方法。 上述範例在二進位模式下的寫法如下:

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

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

    當初始化檔案中的條目數量較少時,系統將執行部分初始化。 此時,初始化將從InitAddress參數指定的位址開始進行。 InitAddress參數會自動遞增至最後一個寫入的 LUT 條目之後的下一個位置。 這樣一來,即可監控已寫入的 LUT 條目數量。 當檔案所含的數值超過 (2^InputBitWidth -InitAddress) * KernelSize時, 則初始化會在寫入 LUT 的最後一筆條目後停止,並將InitAddress設為 0。

    參數InitFilename指定包含初始值的檔案。 最後,將值1寫入參數LoadInitFile將開始 讀取該檔案,並在確認無誤後,將這些值寫入硬體。 若將0寫入參數LoadInitFile,則不會觸發值的載入。 若您不希望在 Applet 初始化 過程中將初始檔案載入至硬體,此功能便相當實用。

    在模擬過程中,載入初始化檔案的方式與執行時相同。 若需進行部分設定或發生錯誤時,查看模擬日誌中的輸出內容可能會有所幫助 (您可能需要啟用 顯示詳細資訊 表格中顯示 Simulation 對話框)。

請注意,DRAM 技術在隨機存取方面的表現極為不佳。 在最壞的情況下,當每次連續存取 DRAM 都會導致頁面未命中,並需要重新啟用新行時, DRAM 的吞吐量將較最大效能下降 90%,導致頻寬利用率僅約 10%。

輸入連結可處理動態的線寬,以及空行和空框。因此,輸出連結也能 處理相同的圖像尺寸。

頻寬最佳化

為了獲得最佳效能,所使用的資料位元數應盡可能與模組 參數RamDataWidth 中指定的數值相符。當位元寬度與核心大小的乘積等於 內部 RAM 埠寬度RamDataWidth 時,運算子即可達到最大頻寬。

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

I/O Properties

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

Supported Link Format

Link Parameter Input Link I Output Link O
Bit Width [1, 記憶體位址位寬]1 [1, 64]2
Arithmetic 無號數 as I
Parallelism 1 as I
Kernel Columns 1 [1, 記憶體資料寬度 /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

允許的輸入位元寬度取決於幀擷取卡的實體記憶體,以及有多少個運算子共用該 RAM。 RamAddressWidth參數指定可使用的最大位元地址。 請注意,此數值可能會因設計中基於 RAM 的運算子數量而有所變化。

2

允許的輸出位元寬度取決於幀擷取卡的實體記憶體。 位元寬度上限為 64 位元,但可能儲存多個核心元件。 (位元寬度 × 核心大小) 的乘積不得超過參數RamDataWidth 中所示的原生 RAM 資料寬度。

Parameters

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

此參數指定可在 RAM 介面上使用的資料位元數。這是輸出端所能提供的最大位元數 (若核心使用得當)。

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

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

InitAddress
Type dynamic write parameter
Default 0
Range [0, 2^InputBitWidth-1]

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

InitData
Type dynamic write parameter
Default 0
Range [0, 2^OutputBitWidth-1]

此參數定義了寫入至 由參數InitAddress 所定義之位址的資料。 寫入此參數將啟動對硬體的實際寫入作業。 請參閱上述說明。

InitFileLoadMode
Type dynamic write parameter
Default text_with_checks
Range {帶檢查的文字, 原始文字, 二進位資料}

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

InitFileName
Type dynamic write parameter
Default InitRamLut.txt
Range

此參數用以指定初始化檔案的名稱。

LoadInitFile
Type dynamic write parameter
Default 0
Range [0, 1]

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