Operator Library: Memory
此運算子基於 Frame Grabber RAM(通常為 DRAM)實作大型對照表 (LUT)。 需要一個類型為 RAM 的 VisualApplets 資源(請參閱 「配置裝置資源」)。多個類型為 RAM 的資源會透過共用記憶體概念使用相同的實體 RAM。有關如何使用共用記憶體的說明文件,請參閱 應用筆記:共用記憶體。
運算子 RamLUT 支援輸出端上的 kernel。
此運算子的典型應用情境為色彩空間分類問題。
該運算子透過兩種方式便於程式設計 LUT 內容。 無論採用哪種方式,都必須在綜合過程完成後、於執行階段使用 applet 時對 LUT 進行程式設計。
-
程式設計 LUT 的其中一種可能性是暫存器介面,其提供位址值參數 InitAddress 與 InitData。 首先,使用參數 InitAddress 設定位址。 接著,將資料寫入參數 InitData。 寫入資料會促使運算子實際寫入 LUT 並取代先前的數值。 如果您使用 kernel,寫入最後一個 kernel 元素會促使運算子實際寫入 LUT 並取代先前的數值。
-
程式設計 LUT 的第二種可能性是使用包含內容的檔案。 檔案存取速度比暫存器存取更快,但需要注意一些事項。檔案可以採用不同的格式。 格式必須由參數 InitFileMode 定義:
-
text_with_checks
在此模式中,初始檔案必須是文字檔,其中數值字串以 空白、定位點 (tab)、換行字元 (LF) 或歸位換行字元 (CRLF) 分隔。 運算子會檢查這些檔案是否有錯誤,如果檔案無法使用則會回報錯誤。
每個數值代表一個 kernel 元素,且必須是正確範圍內的十進位數字。
The following figure demonstrates the file for a 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 初始化程序期間將初始檔案載入硬體,這會非常有用。
在模擬期間,載入初始檔案的方式與執行階段相同。 針對部分組態或發生錯誤的情況,檢查模擬記錄檔中的輸出可能會很有幫助 (您可能需要啟用 資料夾內的 對話方塊)。 -
請注意,DRAM 技術在隨機存取方面的效能非常差。 在最糟的情況下,如果對 DRAM 的每次連續存取都會導致頁面快取未命中 (page miss) 並需要新的列活化, DRAM 吞吐量將損失高達 90% 的最大效能,導致頻寬使用率僅剩約 10%。
輸入 link 可以處理動態行寬,以及空行和空影格。因此,輸出 link 也可以處理相同的影像尺寸。
為了達到最佳效能,所使用的資料位元數應盡可能與模組參數 RamDataWidth 中提供的數字相符。如果 bit width 與 kernel size 的乘積等於內部 RAM 連接埠寬度 RamDataWidth,則會達到穿過運算子的最大頻寬。
| 適用於硬體平台 |
|---|
| imaFlex CXP-12 Penta |
| imaFlex CXP-12 Quad |
| 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 寫入此參數。 請參閱上方的說明。 |
|



上一頁

