Library: Memory 運算子
此操作員允許將影像檔案 從主機電腦上傳至幀擷取卡,該影像將持續輸出並用作 影像來源。此處將影像檔案用作通用資料容器。因此, 上傳的影像可包含任何資料,例如係數。 所有係數影像必須 具有相同的像素寬度和高度,但格式可以完全不同。例如, 連結 0 的係數影像可以是 8 位元灰階格式;連結 1 提供的 影像可以是 RGB16 格式;而連結 2 則可以是二進位影像。所有係數影像皆 儲存於 幀擷取卡 RAM (DRAM)中。需配置一個類型為RAM的 VisualApplets 資源。更多 資訊請參閱「裝置資源的分配」。關於此運算子的延遲資訊,請參閱表 46,「庫記憶體中各運算子的個別延遲」。
![]() |
imaFlex CXP-12 Quad 及imaFlex CXP-12 Penta 平台不支援CoefficientBuffer |
|---|---|
|
imaFlex CXP-12 Quad 及imaFlex CXP-12 Penta 平台不支援CoefficientBuffer。 範例「使用ImageInjector載入Test Images 的功能範例 」 說明了如何在 imaFlex CXP-12 Quad 或imaFlex CXP-12 Penta 上, 透過ImageInjector 運算子來替代 CoefficientBuffer運算子的功能,作為測試影像來源。 範例「2DShading Correction / 使用 RamLUT 運算子進行平面場校正」示範了如何在 2D 陰影校正中,使用RamLUT取代CoefficientBuffer。 |
連結的數量對應於 儲存於 CoefficientBuffer 中的係數影像數量。係數影像只能在 未執行任何影像擷取作業時,透過軟體上傳至 FPGA 緩衝區。此 操作是透過寫入LoadCoefficients 參數來實現的。
該運算子的輸出埠以 同步方式運作。第一個影像像素的傳輸會在所有輸出埠上 精確地於同一時刻開始。若所有影像均已傳輸至接收運算子, CoefficientBuffer 便會再次以同步方式輸出這些影像。
![]() |
模擬期間的行為 |
|---|---|
|
操作員各鏈路上的影像會 同時輸出。在一個模擬步驟中,操作員在每條鏈路上最多輸出一張 影像。 若在某個模擬步驟中,所有儲存的影像(每條 鏈路各一張)均已轉發至接收方操作員,亦即未發生 阻塞的情況,則在接下來的 模擬步驟中,將轉發相同的輸出(每條鏈路一張影像)。 |
CoefficientBuffer 亦支援 感興趣區域 (RoI) 管理。RoI 由 4 個參數 XOffset、XLength、 YOffset 及 YLength 定義。XOffset 與 YOffset 定義 RoI 的左上角,即 以像素為單位的起始座標。 RoI 的尺寸不得超過 由參數 BufferWidth和 BufferHeight 所定義的儲存係數影像尺寸。RoI 可在擷取過程中動態更新, 或在無擷取任務執行時,透過將所有 4 個 RoI 座標 參數設定為新值,並寫入 UpdateROI 參數。請注意,XLength 必須 同時符合鏈結並行度的粒度要求,即 XLength 模 LinkParallelism = 0。
對於每個輸出鏈路,一個係數影像檔案 會儲存於緩衝區中,也就是說,鏈路 0 將提供係數影像 0。這些 係數影像必須在擷取開始前載入至 CoefficientBuffer 中。 係數影像必須儲存於由參數 CoefficientFile N 所指定的檔案中。N 分別代表連結編號或 係數影像編號。係數檔案必須以 TIF 格式編碼。
BufferWidth指定儲存於 CoefficientBuffer 中的所有係數 圖像的寬度(以像素為單位)。
BufferHeight指定由 CoefficientBuffer 管理之所有係數 影像的高度(單位為像素)。 BufferWidth與 BufferHeight決定所有輸出連結的 最大輸出影像尺寸。
若要建立灰階連結,必須 使用灰階圖像檔案。若要建立彩色連結,則必須使用 RGB 圖像檔案。
若連結的位元寬度高於 影像檔案的位元寬度,則操作員將使用多個影像檔案像素來產生 輸出像素。 舉例來說,一個 22 位的連結在 8 位元圖像 檔案中將需要 3 個像素。因此,圖像檔案的寬度必須是參數 BufferWidth 的 3 倍。
若連結的位元寬度小於 影像檔案的位元寬度,則此運算子將僅使用輸入影像檔案的 低位元。例如,一個 8 位元影像檔案與一個 3 位元連結,將使用該 檔案的第 0、1 和 2 位元。
使用 16 位元 TIF 檔案時應格外謹慎。
參數 LoadCoefficients 用於在 影像擷取開始之前,將係數影像載入緩衝區。此 載入作業會由寫入週期或將此參數設為 1 所觸發。將此參數寫入 0 則 無效。
「參數更新 RoI」用於在 影像擷取執行期間,或當未擷取任何影像時, 動態更新當前的 RoI。 在寫入此參數之前,必須先透過 4 個 RoI 座標參數指定新的 RoI。 寫入的值不會影響更新過程,僅有 寫入週期才會觸發更新,也就是說,寫入的值可以是 0 或 1。
參數 XOffset 指定從 影像左邊緣到 RoI 第一欄的 水平方向偏移量。該 指定值以像素為單位,且不得超過 BufferWidth-1 的值。
Parameter XLength specifies the length of the RoI in horizontal direction in pixels. The specified value must not exceed BufferWidth and must be divisible by the output link parallelism. Also the following constraint must be met: XOffset + XLength <= BufferWidth.
參數 YOffset 指定從 影像頂部邊界到 RoI 第一行在垂直方向上的偏移量。YOffset 必須 以像素為單位指定,且不得超過 BufferHeight-1。
Parameter YLength specifies the length of the RoI in vertical direction in pixels. The length must not exceed BufferHeight. Furthermore, the following constraint must be met: YOffset + YLength <= BufferHeight.
參數 CoefficientFile N 指定 以 TIF 格式儲存的連結 N 的係數圖像之檔案名稱。
![]() |
注意 |
|---|---|
|
使用此運算子時的建議設定順序
-
將 CoefficientBuffer 的所有連結連接起來。
-
請為所有連結指定連結格式。
-
設定 BufferWidth 和 BufferHeight 參數。
-
設定 RoI 座標。
-
設定係數檔案名稱。
在內部,CoefficientBuffer 運算子會從 所有係數影像像素中生成一個累積像素。這就是所謂的「超級像素」。
- 若 RAM 的資料位寬小於超像素的位寬,則 該超像素將分散於多個 RAM 儲存單元中。
- 如果超級像素小於 RAM 的資料位寬,則每個 RAM 儲存單元中僅會儲存一個 超級像素,即使有多個超級像素 能夠容納於一個 RAM 儲存單元中。
因此,一個 RAM 儲存單元只會被一個超級像素佔用,或者屬於 某個超級像素的一部分。
該運算子會將輸出位寬中的一個像素,內部儲存於一個 寬度為 RAM 資料寬度的區塊中;例如,若在 marathon VCL 平台上將輸出位寬設定為 8 位元(RAM 資料寬度為 256 位元),則每個 RAM 儲存單元中僅會 使用 8 位元,其餘位元則被浪費。
僅透過增加並行度來提升頻寬將 在這種情況下 對此情況無濟於事。
您可以在本文件中的 「平台資源」章節中,查詢您所使用之幀擷取卡的 RAM 資料位寬:
以下提供一些提升頻寬/記憶體效率的建議:
訣竅 1:
若要增加頻寬,您可以將像素的位元寬度設定為 更大,並在後續使用 CastParallel 運算子來進行修正。
範例:您需要一張 8 位元灰階影像,但需具備 8 位元的並行寬度。 為此,您可以將輸出位元寬度設定為 64(並行度 1), 隨後使用 CastParallel 運算子將資料移位回 8 位元, 並將並行度恢復為 8。
這樣一來,由於 1 個 RAM 儲存單元中可儲存多於 1 個像素, 因此您的影像所佔用的 RAM 也會較少。若直接使用(不使用 CastParallel 運算子), 儲存該影像所需的記憶體將增加 8 倍。
訣竅 2:
如果合併後的連結位寬超過 64 位元,您可以將 影像分割成多個影像,並使用多個 CoefficientBuffer 運算子的連結。由於所有輸出皆為 O-同步,因此稍後您可以將所有連結合併起來。
範例:假設您想以 4 並行度傳送一張 RGB24 影像。累積的 像素位元數將為 4 × 24 = 96 位元——這過於龐大。因此,解決此問題的方法是 將影像分割成 4 張子影像,每張子影像各佔總像素的 ¼。
在內部處理時,該運算子會將每個輸入的像素彙總為一個 96 位元的超像素。
如此一來,記憶體的效率也隨之提升。若以 Ironman mE5VQ8-CXPD 平台(128 位元寬的記憶體資料介面)上的一張 1024x1024 影像為例, 儲存於單一連結的 CoefficientBuffer 中的影像為
1024 * 1024 * 128 / 8 位元組 = 16MB。
若採用四連桿結構,其尺寸為
1024 * 1024 * (128 / 4) / 8 = 4MB
假設「係數緩衝區」僅用於單一係數影像 檔案,且每像素位元寬度為 8 位元,並行度為 1。在 這種情況下,該緩衝區的效能將大幅下降。 這是因為僅 使用了 1/8 的頻寬。此外,緩衝器讀取其值時 採用兩倍的設計時脈頻率,也就是說,實際僅使用了 1/16 的完整頻寬。
為了以最佳效能使用此緩衝器,必須對像素資料進行 重新詮釋。在本範例中,必須將緩衝器的輸出連結參數設定為 每像素 64 位元,並採用 2 級並行度。這將導致緩衝器 每設計時鐘週期讀取 128 位元。 使用 CastParallel 運算子將 64 位元資料值重新詮釋為 8 位元寬度,並採用 16 級並行度。此外, 參數BufferWidth必須設定為 係數影像寬度的 1/8。
總而言之,只有當輸出位元 寬度足夠高(例如 64 位元)時,才能達到最大頻寬。採用高輸出並行度並不會增加 頻寬。
該運算子可作為模擬來源。在此情況下,該運算子將 嘗試載入並使用由「係數檔案 N」參數所指定的影像檔案。請注意,此功能僅在影像 檔案與連結格式完全吻合時,方能正常運作。 若您的連結格式為 64 位元, 則影像檔案的寬度必須是該連結最大影像寬度的 8 倍, 因為影像的每像素位元深度為 8 位元。高度也必須與 連結中指定的最大影像高度完全一致。
流經使用 Frame Grabber RAM (DRAM) 之 operator 的理論頻寬 [bits/second] 是根據下列公式計算:

然而,由於 DRAM 效率的關係,實際頻寬總是小於理論頻寬。
流經運算子的 最大頻寬 是在 Bit Width 與 Parallelism 的乘積等於內部 RAM Port Width x 2 時達到(適用於唯讀參數)。
![]() |
平台特定值 |
|---|---|
|
RAM Port Width 與 System Clock 因平台而異。如需關於您個人平台的詳細資訊,請參閱 Device Resources。 |
|
對於無符號輸入,輸出位寬的範圍為 [1, 64]。至於 有符號輸入,其範圍為 [2, 64]。對於無符號色彩輸入,其範圍為 [3, 63];至於有符號色彩輸入,其範圍為 [6, 63]。 |
|
|
位元寬度與並行度的乘積不得超過 原生 RAM 資料寬度。請檢查 裝置資源 以取得更多 資訊。 |
| RamDataWidth | |
|---|---|
| Type | 靜態寫入參數 |
| Default | 不適用 |
| Range | 整數 |
|
此參數指定可在 RAM 介面上使用的資料位元數。 |
|
| RamAddressWidth | |
|---|---|
| Type | 靜態寫入參數 |
| Default | 不適用 |
| Range | 整數 |
|
此參數指定可用的 RAM 位址位元數。 |
|
| 緩衝區寬度 | |
|---|---|
| Type | 靜態參數 |
| Default | 1024 |
| Range | [1, 65535] |
|
此參數定義係數影像的寬度(以像素為單位)。此外,此 參數亦定義所有輸出連結的影像最大寬度。此 參數的取值範圍取決於所使用的幀擷取卡及其 RAM 容量。 |
|
| 緩衝區高度 | |
|---|---|
| Type | 靜態參數 |
| Default | 1024 |
| Range | [1, 65535] |
|
此參數定義係數影像的高度(以像素為單位)。此外, 此參數亦定義所有輸出連結的影像最大高度。此參數的 範圍取決於所使用的幀擷取卡及其 RAM 容量。 |
|
| 載荷係數 | |
|---|---|
| Type | dynamic write parameter |
| Default | 0 |
| Range | {0, 1} |
|
此參數用於在影像擷取開始之前,將係數影像載入至 緩衝區。當此參數被寫入 值「1」時,即觸發載入程序。若寫入值「0」,則不會觸發 係數檔案的載入。 |
|
| UpdateROI | |
|---|---|
| Type | dynamic write parameter |
| Default | 1 |
| Range | {1} |
|
此參數用於更新硬體中的 ROI 設定。會使用 由 4 個 ROI 座標參數所定義的數值。更新操作可於 任何時間進行,即使在擷取作業進行中亦然。 |
|
| XOffset | |
|---|---|
| Type | 動態/靜態讀寫參數 |
| Default | 0 |
| Range | [0, 最大影像寬度 - XLength] |
|
此參數定義 ROI 左上角的 x 座標。變更此值並不會直接更改 ROI 的設定。您必須 寫入UpdateROI參數,才能套用新的 設定。 步階大小即為 Parallelism。 |
|
| XLength | |
|---|---|
| Type | 動態/靜態讀寫參數 |
| Default | 1024 |
| Range | [並行度,最大影像寬度 - X 偏移量] |
|
此參數用於定義 ROI 的寬度。變更此值並不會 直接改變 ROI 的設定。您必須寫入參數 UpdateROI,才能套用新設定。 步階大小即為 Parallelism。 |
|
| YOffset | |
|---|---|
| Type | 動態/靜態讀寫參數 |
| Default | 0 |
| Range | [0, 緩衝區高度 - Y 長度] |
|
此參數定義 ROI 左上角的 y 座標。變更此值並不會直接更改 ROI 的設定。您必須 寫入UpdateROI參數,才能套用新的 設定。 |
|
| YLength | |
|---|---|
| Type | 動態/靜態讀寫參數 |
| Default | 1024 |
| Range | [1, 緩衝區高度 - Y 偏移量] |
|
此參數用於定義 ROI 的高度。變更此值並不會 直接改變 ROI 的設定。您必須寫入參數 UpdateROI,才能套用新設定。 |
|
| FillLevel | |
|---|---|
| Type | 動態讀取參數 |
| Default | 0 |
| Range | [0%, 100%] |
|
此參數以 25% 為單位提供 DRAM 的 Fill 級別。 |
|
| Overflow | |
|---|---|
| Type | 動態讀取參數 |
| Default | 0 |
| Range | [0, 1] |
|
此參數表示發生緩衝區溢位。 |
|
| 係數檔案 N | |
|---|---|
| Type | 動態讀取/寫入參數 |
| Default | coefficients_N.tif |
| Range | 任何 TIF 檔案的檔案名稱(可選路徑) |
|
此參數用以定義連結 N 的係數圖像的檔案名稱。 |
|
以下範例展示了運算子 CoefficientBuffer 的使用方式:
-
範例 — 為進行除錯,可手動插入圖片。
-
範例 - 基於除錯目的,可以檢查鏈路上的影像傳輸狀態。
-
範例 - 此範例展示了 2D Shading Correction 的實作。 校正值會儲存在擷取卡 (frame grabber) RAM 中。 此 applet 會執行高精度的位移與增益校正。
-
「1D Shading Correction Using Frame Grabber RAM」
範例 - 此範例展示了 1D Shading Correction。 校正值會儲存在 Frame Grabber RAM 中。

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



上一頁

