Library: Memory 運算子
此運算子基於 幀擷取器 RAM(通常為 DRAM)建構一個大型查找表(LUT)。 需具備一個類型為RAM的VisualApplets 資源(請參閱「裝置資源的分配」)。
運算子 RamLUT 支援輸出端的核心 (kernel)。
有關運算子延遲的資訊,請參閱 表 46「Library Memory 中各運算子的個別延遲」。
此運算子的典型應用案例為色彩空間分類問題。 例如,在 microEnable IV 系列開發板上,此運算子支援具有 2^24 個條目的查表, 也就是說,可以定義一個分類查表,其中包含 RGB 24 色彩空間中每種顏色的對應值。 該運算子透過兩種方式協助編程 LUT 內容。 無論採用何種方式,LUT 都必須在合成過程完成後,於執行時使用小程式(applet)之際進行編程。
-
對 LUT 進行程式設計的一種方式是使用暫存器介面,其提供位址-數值參數 InitAddress 與 InitData。 首先,使用參數 InitAddress 設定位址。 接下來,將資料寫入參數 InitData。 寫入資料會促使運算子實際寫入 LUT 並取代先前的值。 如果您使用核心,寫入最後一個核心元素會促使運算子實際寫入 LUT 並取代先前的值。
-
對 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 初始化程序期間將初始檔案載入硬體,這會非常有用。
在模擬期間,載入初始檔案的方式與執行階段相同。 針對部分組態或發生錯誤的情況,檢查模擬記錄檔中的輸出可能會很有幫助 (您可能需要啟用 表格中顯示 對話方塊)。 -
請注意,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。 |
| 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 寫入此參數。 請參閱上述說明。 |
|
以下範例展示了 RamLUT 運算子的使用方式:
-
'2D Shading Correction / Flat Field Correction Using Operator RamLUT'
Examples - 本範例顯示 2D Shading Correction 的實作。 校正值會儲存在 RamLUT Operator 中。 此 Applet 會執行高精確度的位移與增益校正。
-
'Functional Example for Specific Operators of Library Color, Base and Memory'
範例 - operator 使用方式示範

![[注意]](../common/images/admon/note.png)


上一頁

