Library: Memory 運算子
此運算子基於 幀擷取器 RAM(通常為 DRAM)實作一個大型查表(LUT)。 需有一個類型為RAM 的 VisualApplets 資源(請參閱「裝置資源的分配」)。多個類型為RAM的資源會採用相同的實體 RAM,並採用共享記憶體的概念。有關如何使用共享記憶體的說明,請參閱 《 應用說明:共享記憶體》。
運算子RamLUT支援在輸出端使用核心函式。
此運算子的典型應用情境是色彩空間分類問題。
該運算子透過兩種方式協助編程 LUT 內容。 無論採用哪種方式,都必須在合成過程完成後,於運行時使用該小程式時,才對 LUT 進行編程。
-
編程 LUT 的其中一種方式是透過寄存器介面,該介面提供地址 值參數InitAddress和InitData。 首先,使用參數InitAddress 設定地址。 接著,將資料寫入InitData 參數中。 寫入資料會促使運算子實際將資料寫入 LUT 並取代先前的值。 若使用核心,將資料寫入最後一個核心元素,會促使運算子實際將資料寫入 LUT 並取代先前的值。
-
編程 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 初始化 過程中將初始檔案載入至硬體,此功能便相當實用。
在模擬過程中,載入初始化檔案的方式與執行時相同。 若需進行部分設定或發生錯誤時,查看模擬日誌中的輸出內容可能會有所幫助 (您可能需要啟用 表格中顯示 對話框)。 -
請注意,DRAM 技術在隨機存取方面的表現極為不佳。 在最壞的情況下,當每次連續存取 DRAM 都會導致頁面未命中,並需要重新啟用新行時, DRAM 的吞吐量將較最大效能下降 90%,導致頻寬利用率僅約 10%。
輸入連結可處理動態的線寬,以及空行和空框。因此,輸出連結也能 處理相同的圖像尺寸。
為了獲得最佳效能,所使用的資料位元數應盡可能與模組 參數RamDataWidth 中指定的數值相符。當位元寬度與核心大小的乘積等於 內部 RAM 埠寬度RamDataWidth 時,運算子即可達到最大頻寬。
| 可用於硬體平台 |
|---|
| imaFlex CXP-12 Penta |
| imaFlex CXP-12 Quad |
| 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寫入此參數。 請參閱上方的說明。 |
|



上一頁

