Operator CoefficientBufferMultiRoi (imaFlex)

Operator Library: Memory

適用於硬體平台
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

此 operator 允許您將主機 PC 的影像資料上傳至擷取卡 RAM (DRAM)。它可為任意數量的感興趣區域 (ROI) 提供連續的資料輸出。此處使用影像檔案作為通用的資料容器。因此,上傳的影像可以包含係數等任何資料。每個影像都會指定給一個輸出的 kernel。此外,此 operator 還提供了與 RamLUT operator 相同的初始化介面,您可以在其中手動、透過文字檔或二進位檔初始化每個記憶體位址。所有係數影像都儲存在 Frame Grabber RAM (DRAM) 中。這需要一個類型為 RAM 的 VisualApplets 資源。請查看 'Allocation of Device Resources' 以取得更多資訊。關於此 operator 的延遲資訊,請參見 Table 46, 'Individual Latencies of the Operators in Library Memory'。多個類型為 RAM 的資源會透過共用記憶體概念使用相同的實體 RAM。有關如何使用共用記憶體的說明,請參閱 Application Note: Shared Memory。

Operator CoefficientBufferMultiRoi 支援輸出的 kernel。如果使用影像檔案初始化 operator,則每個影像檔案都會指定給對應的輸出 kernel。如果使用文字檔或二進位檔手動初始化緩衝區,則必須確保資料順序正確。精確的資料格式說明如下。

算子初始化

此 operator 從多個方面簡化了緩衝區內容的編程。對於每種方式,都必須在綜合過程之後、於執行階段使用 applet 時對緩衝區進行編程。

暫存器存取

編程緩衝區的一種可能性是使用暫存器介面,它提供參數 InitAddress 和 InitData。首先,使用 InitAddress 參數設定位址。然後,將資料寫入 InitData 參數。

寫入資料會導致 operator 實際寫入緩衝區並取代先前的值。寫入最後一個平行 kernel 的最後一個 kernel 元素會導致 operator 實際寫入 RAM 並取代先前的值。RAM 位址處的資料組織方式如下(另請參見上方的動畫):

  • 每個 RAM 位址包含 O.Parallelism * O.KernelColumns * O.KernelRows 個值。

  • 因此,InitData 是包含 O.Parallelism * O.KernelColumns * O.KernelRows 個值的陣列。

  • 首先,必須列出 kernel 列的所有值,即疊代每個 kernel column。

  • 然後,資料會疊代所有 kernel rows。

  • 最後,對所有平行的資料 kernel 重複相同的操作。

檔案存取

編程緩衝區的第二種可能性是使用包含內容的一個或多個檔案。檔案存取比暫存器存取更快,但需要注意一些事項。檔案可以採用不同的格式。您必須使用 InitFileMode 參數定義格式。

text_with_checks

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

每個值代表一個 kernel 元素,且必須是正確範圍內的十進位數字。檔案包含的數值必須剛好等於 kernel 元素的數量。如果您使用的 Parallelism 大於 1,則數值數量必須為 parallelism * kernel elements。

下圖展示了 4x3 kernel 的檔案:

text_raw

此模式類似於 text_with_checks 模式,但錯誤檢查較少。在此模式下,每個值必須提供在單獨的一行中。與 text_with_checks 模式相比,在在此模式下載入檔案的速度更快。由於每個值都寫在單獨的一行中,因此 Parallelism 不會影響此檔案格式中的資料順序。上方範例在 text_raw 模式下的外觀如下:

binary

設定為 binary 模式時,系統會假設為二進位檔,其中每個 kernel 項目使用 8 個位元組。如果 kernel 項目值可以用少於 64 位元表示,則未使用的位元將被忽略。這是將值寫入 RAM 的最快方法。由於所有值都是連續寫入的,因此 Parallelism 不會影響此檔案格式的資料值順序。上方範例在 binary 模式下的外觀如下:

image_file

設定為 image_file 模式時,預期 InitFileName 參數中會包含由逗號或分號分隔的影像檔案清單。每個檔案都用於初始化一個 kernel 值:第一個初始化檔案指定給第一個 kernel 值,第二個檔案指定給第二個 kernel 值,依此類推...

由於此模式使用一般影像,因此 Parallelism 對檔案的資料格式沒有影響。初始化檔案可以是影像格式 *.tif 或 *.bmp。各個影像檔案不必採用相同的格式,也不必包含相同數量的像素。

如果每行影像的最大位元組數達到 32 位元整數值的邊界,operator 可能會載入影像失敗。這僅在 O.Max.Img.Width 接近其最大寬度 (2^RamAddressWidth) 且 O.Parallelism 也大於 1 時才會發生。

當初始化檔案包含 2^RamAddressWidth * KernelSize * Parallelism 個值時,記憶體將從位址 0 開始被完全覆寫。在這種情況下,參數 InitAddress 不會被更改。

當初始化檔案包含的資料大於可寫入 RAM 的資料量時,只會使用初始化檔案的一部分。檔案開頭的資料會被使用,直到沒有可用的記憶體空間為止。

當初始化檔案包含較少項目時,會執行部分初始化。在此情況下,初始化會從 InitAddress 參數指定的位址開始。參數 InitAddress 會在寫入最後一個記憶體項目後自動遞增至下一個位置。這可讓您監控寫入了多少記憶體項目。當檔案包含超過 (2^RamAddressWidth - InitAddress) * KernelSize * Parallelism 個值時,初始化會在寫入記憶體的最後一個項目後停止,且 InitAddress 會設為 0。

對於上述指定的初始化模式,InitFilename 參數會指定包含初始值的檔案。最後,將值 1 寫入 LoadInitFile 參數會開始讀取檔案,若被接受,則將值寫入硬體。將 0 寫入 LoadInitFile 參數不會觸發載入值。如果您不希望在小程序初始化過程中將初始檔案載入硬體,這會非常有用。

在模擬期間,載入初始檔案的方式與執行階段相同。對於部分組態或發生錯誤的情況,檢查模擬記錄中的輸出可能會很有幫助:在 Simulation 對話方塊中啟動 Show Details。

ROI 的定義

一旦算子的 frame grabber RAM (DRAM) 以影像資料初始化後,它就會讀出多個興趣區 (ROI)。您可以使用下列參數定義 ROI:

  • 讀取的 ROI 數量:MaxNumRoI 與 NumRoI

  • ROI 的大小與位置:XOffset、XLength、YOffset 以及 YLength

MaxNumRoI 參數會指定可讀取的最大 ROI 數量。每個 ROI 座標參數欄位 XLength、YLength、XOffset 和 YOffset 都具有 MaxNumRoI 個項目。

參數 NumRoI 會指定算子在輸出端提供的實際 ROI 數量。如果 NumRoI 設為 dynamic,其值不能超過 MaxNumRoI 的值。如果設為 dynamic,NumRoI 可以在影像擷取期間更新。在擷取執行時,算子會循環讀取指定數量的 ROI。算子會等待 ROI cycle 結束,直到其變更為 NumRoI。

所有 ROI 都會循序讀取,並作為個別影像在算子輸出端提供:ROI 0、ROI 1、ROI 2... 直到 ROI N-1。其中 N 是由參數 NumRoI 指定目前讀取的 ROI 數量。參數欄位 XOffset、XLength、YOffset 和 YLength 指定一組 ROI。您可以將這些參數設為 dynamic 或 static,這會指定您是否可以在執行階段調整參數。當設定其中一個 ROI 參數的參數類型時,所有 ROI 參數的參數類型都會自動調整。請參閱 'Parameter Editing' 了解如何設定欄位參數。

只要不超過最大輸出畫面尺寸,ROI 定義支援所有可能的矩形區域,亦即單一像素、單一行、單一列、矩形區域或完整畫面都可以定義為 ROI。

不同的 ROI 不需要具有相同的大小。

每個 ROI 都可以個別定義。

ROI 可以重疊且可以重複。

X 座標參數 XOffset 和 XLength 需要符合輸出 parallelism 的步進大小。

您可以將 XLength 或 YLength 設為零來定義空白 ROI。算子隨後會在其次輸出端提供空白影像(或具有連線類型 VALT_LINE1D 的線條)。空白影像不包含任何像素。具有連線類型 VALT_PIXEL0D 的空白 ROI 則完全不會產生輸出。

如果算子搭配影像協定 VALT_LINE1D 或 VALT_PIXEL0D 使用,ROI 的定義是相對於初始化檔案,該檔案一律視為二維影像。系統會讀取二維 ROI,但根據連線類型,輸出會是 ROI 畫面、線條或像素的序列。

使用連線類型 VALT_LINE1D 時,輸出是無限的線條序列,個別定義的 ROI 之間不存在分隔。同樣地,在連線類型 VALT_PIXEL0D 中,算子會提供無限的像素序列,個別 ROI 甚至 ROI 線條之間都不存在分隔。

一旦擷取開始且算子的輸出未被後續算子封鎖,算子就會在其輸出端提供 ROI 資料。關於算子的延遲資訊,請參閱 Table 46, 'Individual Latencies of the Operators in Library Memory'。

如果 ROI 參數類型設為 dynamic,您可以動態更新所有 ROI。不過,更新的 ROI 只有在目前的「ROI cycle」完成且所有 NumRoI ROI 都讀取完畢後才會套用。

[備註] 高 ROI 數量與時序

隨著由參數 MaxNumRoI 定義的最大 ROI 定義數量增加,算子的 BRAM 消耗量也會增加。這可能會在高時脈速率下導致時序問題。例如,MaxNumRoI 為 65536 可能無法在完整設計中符合時序要求。

算子限制

下列限制適用於 CoefficientBufferMultiRoi 算子:

  • 如果 DRAM 未完全初始化,將不會檢查 ROI 座標是否實際包含影像資料。在此情況下,算子會從記憶體讀取隨機的虛擬值。

  • 最大連線屬性會根據算子的使用方式而有所不同。如需詳細資訊,請參閱下方的 Supported Link Format 一節。

  • 高的 MaxNumRoI(接近其最大值 65536)可能會導致時序問題。

  • 當 InitFileLoadMode 設定為 image_file 模式時,過寬的影像可能無法載入。

頻寬最佳化

為了獲得最佳效能,所使用的資料位元數應盡可能與模組參數 RamDataWidth 中提供的數值相符。若 Bit Width、kernel size 與 Parallelism 的乘積等於內部 RAM 連接埠寬度 RamDataWidth,則可達到穿過該 operator 的最大頻寬。請注意,雖然內部 bit width 可以透過使用 kernel 來增加,但完整的 kernel 仍將被視為單一像素來定址。

I/O Properties

Property Value
Operator Type M
Output Link O, data output

支援的 Link 格式

Link Parameter Output Link O
Bit Width [1, 64]12
Arithmetic any
Parallelism [1, RamDataWidth / Bit Width / KernelColumns / KernelRows]2
Kernel Columns [1, RamDataWidth / Bit Width / Parallelism / KernelRows]2
Kernel Rows [1, RamDataWidth / Bit Width / Parallelism / KernelColumns]2
Img Protocol any
Color Format any
Color Flavor any
Max. Img Width [1, 2^RamAddressWidth * Parallelism]3
Max. Img Height [1, 2^RamAddressWidth]3

1

輸入 bit width 的範圍為:

  • 對於無符號輸入:[1, 64]

  • 對於有符號輸入:[2, 64]

  • 對於無符號彩色輸入:[3, 63]

  • 對於有符號彩色輸入:[6, 63]。

輸入 bit width 不得超過原生的 RAM 資料寬度 RamDataWidth。

2

Bit width、Parallelism 與 kernel size 的乘積不得超過原生的 RAM 資料寬度:

3

最大影像尺寸不得超過可用的 RAM:

這會對 O.MaxImageWidth 與 O.MaxImageHeight 產生以下條件:

參數

RamDataWidth
Type 靜態寫入參數
Default 不適用
Range 整數

此參數提供可用於 RAM 中的最大資料寬度。此參數取決於所使用的硬體平台。

RamAddressWidth
Type 靜態寫入參數
Default 不適用
Range 整數

此參數提供可使用的位址位元數。可用 RAM 槽的數量由 2^RamAddressWidth 定義。目前的 RamAddressWidth 取決於硬體平台以及設計中目前的 Memory operator 數量(即使用 RAM 資源的 operator)。

InitAddress
Type 動態寫入參數
Default 0
Range [0, 2^RamAddressWidth-1]

此參數定義由參數 InitData 所定義的資料位址。當使用初始檔案初始化 RAM 時,此參數也可以用作偏移位址。請參閱上述說明。

InitData
Type 動態寫入參數
Default 0
Range [0, 2^O.BitWidth-1]

此欄位參數定義寫入由參數 InitAddress 所定義位址的資料。InitData 包含 O.Parallelism * O.KernelColumns * O.KernelRows 個數值。寫入 InitData 陣列的最後一個欄位會觸發實際寫入硬體的動作。請參閱上述詳細說明。

InitFileLoadMode
Type 動態寫入參數
Default image_file
Range {text_with_checks, text_raw, binary, image_file}

此參數定義載入查詢表中檔案的檔案格式與模式。

  • text_with_checks:一種文字檔,其中 kernel 值是以空白、定位點 (tab stop) 等分隔。

  • text_raw:一種文字檔,其中 kernel 值是寫在個別的行中。

  • binary:一種二進位檔,其中 kernel 值由 8 個位元組組成。

  • image_file: 檔案清單 (*.tiff 或 *.bmp) 以逗號或分號分隔,其中每個影像檔案都會指派給一個 kernel 索引。

請參閱上述詳細說明。

InitFileName
Type 動態寫入參數
Default InitCoefficientBuffer.tif
Range

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

如果將 InitFileLoadMode 設定為 image_file,則此參數包含的是檔案清單,而不是單一檔案名稱。在檔案清單中,每個項目必須以逗號或分號分隔。使用 LoadInitFile 載入檔案時,image_file 模式中指定的檔案數量必須與可用 kernel 值的數量(O.KernelColumns * O.KernelRows)相同。

此參數接受包含前導和尾隨空白字元,以及前導和尾隨 “"” 或 “'” 字元的檔案名稱。

LoadInitFile
Type 動態寫入參數
Default 0
Range [0, 1]

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

MaxNumRoI
Type 靜態寫入參數
Default 1
Range [1, 65536]

此參數定義運算子可以儲存的最大 ROI 數量。

如果將 NumRoI 設定為 static,則此參數無法編輯。它將自動擁有與 NumRoI 相同的值。

建置 applet 時,針對最大 ROI 計數 MaxNumRoI 設定非常大的數字可能會導致時序問題。

NumRoI
Type 動態/靜態寫入參數
Default 1
Range [1, MaxNumRoI]

此參數定義實際使用的 ROI 數量。運算子會讀取 NumRoI 個 ROI,然後重新開始讀取第一個 ROI。在擷取執行期間,運算子會循環輸出 NumRoI 個 ROI,直到輸出被後續運算子封鎖為止。如果此參數設定為 static,則範圍為 [1, 65536],且 MaxNumRoI 會停用。

XOffset
Type dynamic/static read/write parameter
Default 0
Range [0, O.MaxImgWidth - XLength]

此欄位參數定義 ROI 最左側欄位的 x 座標陣列。

步進大小即為 Parallelism。

請參閱 「Parameter Editing」 了解如何設定欄位參數。

XLength
Type dynamic/static read/write parameter
Default 1024
Range [0, O.MaxImgWidth - XOffset]

此欄位參數定義 ROI 寬度的陣列。

步進大小即為 Parallelism。

請參閱 「Parameter Editing」 了解如何設定欄位參數。

YOffset
Type dynamic/static read/write parameter
Default 0
Range [0, O.MaxImgHeight - YLength]

此欄位參數定義了 ROI 第一列的 y 座標陣列。

請參閱 「Parameter Editing」 了解如何設定欄位參數。

YLength
Type dynamic/static read/write parameter
Default 1024
Range [0, O.MaxImgHeight - YOffset]

此欄位參數定義了 ROI 高度的陣列。

請參閱 「Parameter Editing」 了解如何設定欄位參數。

LinesToSimulate
Type 靜態寫入參數
Default 1
Range {1, 2^31-1}

此參數用於設計階段的模擬,且僅在 O.LinkType 設為 VALT_LINE1D 時有效。

此參數定義運算子應模擬多少個 ROI 行。ROI 在初始化影像中被定義為二維區域,但模擬輸出會提供一個行的序列,以循環方式走訪所有指定的 ROI(在讀取 NumRoI 個 ROI 的行之後,重新從 ROI 0 開始)。

PixelsToSimulate
Type 靜態寫入參數
Default 1
Range {1, 2^31-1}

此參數用於設計階段的模擬,且僅在 O.LinkType 設為 VALT_PIXEL0D 時有效。

此參數定義運算子應模擬多少個 ROI 像素。ROI 在初始化影像中被定義為二維區域,但模擬輸出會提供一個像素的序列,以循環方式走訪所有指定的 ROI,並在讀取 NumRoI 個 ROI 的像素後重新從 ROI 0 開始。