Operator RamLUT

Library: Memory 運算子

此運算子基於 幀擷取器 RAM(通常為 DRAM)建構一個大型查找表(LUT)。 需具備一個類型為RAM的VisualApplets 資源(請參閱「裝置資源的分配」)。

運算子 RamLUT 支援輸出端的核心 (kernel)。

有關運算子延遲的資訊,請參閱 表 46「Library Memory 中各運算子的個別延遲」。

此運算子的典型應用案例為色彩空間分類問題。 例如,在 microEnable IV 系列開發板上,此運算子支援具有 2^24 個條目的查表, 也就是說,可以定義一個分類查表,其中包含 RGB 24 色彩空間中每種顏色的對應值。 該運算子透過兩種方式協助編程 LUT 內容。 無論採用何種方式,LUT 都必須在合成過程完成後,於執行時使用小程式(applet)之際進行編程。

  1. 對 LUT 進行程式設計的一種方式是使用暫存器介面,其提供位址-數值參數 InitAddress 與 InitData。 首先,使用參數 InitAddress 設定位址。 接下來,將資料寫入參數 InitData。 寫入資料會促使運算子實際寫入 LUT 並取代先前的值。 如果您使用核心,寫入最後一個核心元素會促使運算子實際寫入 LUT 並取代先前的值。

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

    • text_with_checks

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

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

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

    • text_raw

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

    • binary

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

    在這三種模式中,檔案中的項目數量不得超過 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%。 然而,透過將多個 DRAM 銀行組合在一起,即使在最壞情況下,仍可提高吞吐量。 將 2 個或更多 RamLUT 運算子串聯起來,並讓每個運算子處理不同的查表任務。 若連續的輸入值變化速度不快,運算器的效能將大幅提升。 請參閱硬體使用手冊,確認您的影像擷取卡所採用的 RAM 技術及規格。

頻寬最佳化

流經使用 Frame Grabber RAM (DRAM) 之 operator 的理論頻寬 [bits/second] 是根據下列公式計算:

然而,由於 DRAM 效率的關係,實際頻寬總是小於理論頻寬。

該 最大頻寬 通過該運算子的 最大頻寬,將在Bit Width 與Parallelism 的乘積等於內部 RAM 埠寬 × 2 時達到(此條件僅適用於唯讀 參數)。

[注意] 平台特定值

RAM Port Width 與 System Clock 因平台而異。如需關於您個人平台的詳細資訊,請參閱 Device Resources。

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, RAM 位址寬度]1 [1, 記憶體資料寬度]2
Arithmetic 無號數 as I
Parallelism 1 as I
Kernel Columns 1 [1, Ram 資料寬度 / Bit Width]2
Kernel Rows 1 [1, Ram Data Width / Bit Width / Kernel Columns]2
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 {text_with_checks, text_raw, binary}

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

InitFileName
Type dynamic write parameter
Default InitRamLut.txt
Range

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

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

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

Examples of Use

以下範例展示了 RamLUT 運算子的使用方式: