Operator Library: Memory
| ハードウェアプラットフォームで使用可能 |
|---|
| imaFlex CXP-12 Penta |
| imaFlex CXP-12 Quad |
このオペレーターを使用すると、ホストPCからフレームグラバーのRAM(DRAM)に画像データをアップロードできます。任意の数の関心領域(ROI)に対して継続的なデータ出力が提供されます。ここでは画像ファイルが汎用データコンテナとして使用されます。そのため、アップロードされた画像には係数などの任意のデータを含めることができます。各画像は1つの出力カーネルに割り当てられます。さらに、このオペレーターは RamLUT オペレーターと同様の初期化インターフェイスを備えており、各メモリマッピングアドレスをテキストファイルまたはバイナリファイルにより手動で初期化できます。すべての係数画像は Frame Grabber RAM (DRAM) に保存されます。 RAM タイプのVisualAppletsリソースが1つ必要です。詳細については、'Allocation of Device Resources'を確認してください。オペレーターのレイテンシについては、Table 46, 'Individual Latencies of the Operators in Library Memory'を参照してください。 RAM タイプの複数のリソースは、共有メモリのコンセプトに基づいて同じ物理RAMを使用します。共有メモリの使用方法に関するドキュメントは、Application Note: Shared Memoryに記載されています。
CoefficientBufferMultiRoi オペレーターは、出力側のカーネルをサポートします。オペレーターが画像ファイルで初期化される場合、各画像ファイルは対応する出力カーネルに割り当てられます。バッファを手動で、またはテキストファイルもしくはバイナリファイルで初期化する場合は、データが正しい順序になっていることを確認する必要があります。正確なデータフォーマットについては、以下で説明します。

このオペレーターにより、いくつかの方法でバッファコンテンツのプログラミングを簡素化できます。どの方法においても、バッファは、合成プロセスの完了後、実行時にアプレットが使用される時点でプログラミングする必要があります。
バッファをプログラミングする1つの方法として、パラメータ InitAddress および InitData を提供するレジスタインターフェイスがあります。まず、 InitAddress パラメータを使用してアドレスを設定します。次に、 InitData パラメータにデータを書き込みます。
データを書き込むと、オペレーターは実際にバッファに書き込みを行い、以前の値を置き換えます。最後の並列カーネルの最後のカーネル要素に書き込むと、オペレーターは実際にRAMに書き込みを行い、以前の値を置き換えます。RAMアドレス上のデータは次のように構成されている必要があります(上記の図も参照してください)。
-
各RAMアドレスには、 O.Parallelism * O.KernelColumns * O.KernelRows の値が含まれます。
-
その結果、 InitData は O.Parallelism * O.KernelColumns * O.KernelRows の値の配列になります。
-
まず、カーネル行のすべての値をリストする必要があります。つまり、各カーネル column ごとに反復処理を行います。
-
次に、データはすべてのカーネル rows に対して反復処理を行います。
-
最後に、すべての並列データカーネルに対して同じことが繰り返されます。

バッファをプログラミングする2つ目の方法は、コンテンツを含む1つまたは複数のファイルを使用することです。ファイルアクセスはレジスタアクセスよりも高速ですが、いくつか注意が必要です。ファイルはさまざまなフォーマットにすることができます。 InitFileMode パラメータを使用してフォーマットを定義する必要があります。
このモードでは、初期化ファイルは、値の文字列が空白、タブストップ、ラインフィード(LF)、またはキャリッジリターンラインフィード(CRLF)のいずれかで区切られているテキストファイルである必要があります。オペレーターはこれらのファイルのエラーをチェックし、ファイルを使用できない場合はエラーを報告します。
各値はカーネル要素を表し、正しい範囲内の10進数である必要があります。ファイルには、カーネル要素の数と正確に一致する数の値が含まれている必要があります。1より大きい Parallelism を使用する場合、値の数は parallelism * kernel elements である必要があります。
次の図は、4x3カーネルのファイルを示しています。

このモードは text_with_checks モードに似ていますが、エラーチェックの数が少なくなっています。このモードでは、各値を個別の行に指定する必要があります。このモードでのファイルの読み込みは、 text_with_checks モードに比べて高速です。各値が個別の行に書き込まれるため、このファイルフォーマットでは Parallelism がデータシーケンスに影響を与えません。上記の例は、 text_raw モードでは次のようになります。

バイナリモードでは、各カーネルエントリに8バイトを使用するバイナリファイルを想定しています。カーネルエントリの値が64ビット未満で表現できる場合、未使用のビットは無視されます。これは、RAMに値を書き込む最も高速な方法です。すべての値が連続して書き込まれるため、このファイル形式では並列処理がデータ値のシーケンスに影響を与えません。上記の例は、バイナリモードでは次のようになります。

The image_file mode expects a list of image files in the InitFileName parameter that are separated by comma or semicolon. Each file is used to initialize one kernel value: the first init file is assigned to the first kernel value, the second file is assigned to the second kernel value and so on ...
Since this mode uses regular images, the parallelism is irrelevant for the
data format of the files. The init file can be of the image format
*.tif または *.bmp. The individual
image files don't have to be the same format and they also don't have to
contain the same number of pixels.
If the maximum number of bytes per image line reaches the borders of 32-bit integer values, the operator might fail to load the image. This can only occur, if the O.Max.Img.Width is close to its maximum width (2^RamAddressWidth) and the O.Parallelism is also greater than 1.
When an init file contains 2^RamAddressWidth * KernelSize * Parallelism values, then the memory gets overwritten completely, starting from address 0. In this case, the parameter InitAddress is not touched.
When an init file contains more data than can be written into the RAM, only part of the initialization file is used. The data at the beginning of the file is used until no more memory space is available.
When an init file contains less entries, then partial initialization is performed. In this case, initialization is starting from the address given by the InitAddress parameter. The parameter InitAddress is automatically incremented to the next position after the last written memory entry. This allows to monitor how many memory entries were written. When the file contains more than (2^RamAddressWidth - InitAddress) * KernelSize * Parallelism values, the initialization stops after writing the last entry of the memory and InitAddress is set to 0.
For the initialization modes specified above, the InitFilename parameter specifies the file that contains the initial values. Finally, writing the value 1 to the LoadInitFile parameter starts reading the file and, if accepted, writes the values to the hardware. Writing 0 to the LoadInitFile parameter doesn't cause loading the values. This can be useful, if you don't want the initial file to be loaded to the hardware during the applet initialization process.
During simulation, loading an init file is done the same way as during runtime. For partial configuration or in case of errors, it may be useful to check the output in the simulation log: activate in the dialog.
オペレーターのフレームグラバー 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 を循環的に読み出します。オペレーターは、NumRoI に変更されるまで ROI サイクルの終了を待機します。
すべての ROI は順次読み出され、オペレーター出力で個別の画像(ROI 0、ROI 1、ROI 2... から ROI N-1 まで)として提供されます。ここで、N はパラメータ NumRoI で指定された、読み出される ROI の現在の数です。パラメータフィールド XOffset、XLength、YOffset、および YLength は、ROI のセットを指定します。これらのパラメータを dynamic または static に設定することで、実行時にパラメータを調整できるかどうかを指定できます。すべての ROI パラメータのパラメータタイプは、1 つの ROI パラメータのパラメータタイプが設定されると、自動的に適応されます。フィールドパラメータの設定方法については、'Parameter Editing'を参照してください。
最大出力フレーム寸法を超えない限り、ROI の定義には可能なすべての矩形領域がサポートされます。つまり、単一ピクセル、単一条、単一列、矩形領域、または完全なフレームを ROI として定義できます。
異なる ROI が同じサイズである必要はありません。
各ROIを個別に定義できます。
ROI は重複したり、繰り返したりすることができます。
X 座標パラメータの XOffset と XLength は、出力 Parallelism のステップサイズにする必要があります。
XLength または YLength を 0 に設定することで、空の ROI を定義できます。その場合、オペレーターはその出力に空の画像(またはリンクタイプが VALT_LINE1D のライン)を提供します。空の画像にはピクセルが含まれません。リンクタイプが VALT_PIXEL0D の空の ROI は、出力をもたらしません。
オペレーターが画像プロトコル VALT_LINE1D または VALT_PIXEL0D と共に使用される場合、ROI は、常に 2 次元画像と見なされる初期化ファイルに関連して定義されます。2 次元 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 サイクル」が完了し、すべての NumRoI 個の ROI が読み出された後にのみ適用されます。
![]() |
多数の ROI とタイミング |
|---|---|
|
パラメータ MaxNumRoI で定義される最大 ROI 定義の数が増加するにつれて、オペレーターの BRAM 消費量が増加します。これにより、高クロックレートでタイミングの問題が発生する可能性があります。たとえば、MaxNumRoI が 65536 の場合、フルデザインでタイミングを満たさない可能性があります。 |
以下の制限が CoefficientBufferMultiRoi オペレーターに適用されます。
-
DRAM が完全に初期化されていない場合、ROI 座標に実際に画像データが含まれているかどうかのチェックは行われません。この場合、オペレーターはメモリからランダムなダミー値を読み出します。
-
最大リンクPropertyは、オペレータの使用方法によって異なります。詳細については、以下のSupported Link Formatセクションを参照してください。
-
高い MaxNumRoI(最大値の 65536 に近い)は、タイミングの問題につながる可能性があります。
-
InitFileLoadMode が image_file モードに設定されている場合、過度に幅の広い画像はロードできない可能性があります。
最適なパフォーマンスを得るには、使用されるデータビット数が、モジュールのパラメータ RamDataWidth で提供される数にできる限り近い必要があります。ビット幅、カーネルサイズ、および Parallelism の積が内部 RAM ポート幅 RamDataWidth と等しい場合、オペレーターを通過する最大帯域幅に達します。内部ビット幅はカーネルの使用によって増加する可能性がありますが、完全なカーネルは引き続き単一ピクセルとしてアドレス指定されることに注意してください。
|
入力 Bit Width の範囲は次のとおりです:
入力 Bit Width は、ネイティブ RAM データ幅 RamDataWidth を超えてはなりません。 |
|
|
Bit Width、Parallelism、およびカーネルサイズの積は、ネイティブなRAMデータ幅を超えてはなりません:
|
|
|
最大画像サイズは利用可能なRAMを超えてはなりません:
これにより、O.MaxImageWidth および O.MaxImageHeight について以下の条件が得られます:
|
| RamDataWidth | |
|---|---|
| タイプ | static write parameter |
| Default | N/A |
| 範囲 | 整数 |
|
このパラメータは、RAMで使用できる最大データ幅を提供します。このパラメータは、使用するハードウェアプラットフォームによって異なります。 |
|
| RamAddressWidth | |
|---|---|
| タイプ | static write parameter |
| Default | N/A |
| 範囲 | 整数 |
|
このパラメータは、使用できるアドレスビットの数を提供します。利用可能なRAMスロットの数は 2^RamAddressWidth によって定義されます。現在の RamAddressWidth は、ハードウェアプラットフォームだけでなく、デザイン内の現在のメモリ演算子の数(つまり、RAMリソースを使用する演算子)にも依存します。 |
|
| InitAddress | |
|---|---|
| タイプ | 動的書き込みパラメータ |
| Default | 0 |
| 範囲 | [0, 2^RamAddressWidth-1] |
|
このパラメータは、パラメータ InitData で定義されたデータのアドレスを定義します。このパラメータは、初期化ファイルでRAMを初期化する際、オフセットアドレスとしても使用できます。上記の記述を参照してください。 |
|
| InitData | |
|---|---|
| タイプ | 動的書き込みパラメータ |
| Default | 0 |
| 範囲 | [0, 2^O.BitWidth-1] |
|
このフィールドパラメータは、パラメータ InitAddress で定義されたアドレスに書き込まれるデータを定義します。InitData には、O.Parallelism * O.KernelColumns * O.KernelRows の値が含まれます。InitData 配列の最後のフィールドを書き込むと、ハードウェアへの実際の書き込みが行われます。上記の詳細な説明を参照してください。 |
|
| InitFileLoadMode | |
|---|---|
| タイプ | 動的書き込みパラメータ |
| Default | image_file |
| 範囲 | {text_with_checks, text_raw, binary, image_file} |
|
このパラメータは、ルックアップテーブルに読み込まれるファイルのファイル形式とモードを定義します。
上記の詳細な説明を参照してください。 |
|
| InitFileName | |
|---|---|
| タイプ | 動的書き込みパラメータ |
| Default | InitCoefficientBuffer.tif |
| 範囲 | |
|
このパラメータは、初期化ファイルの名前を定義します。 اگر InitFileLoadMode が image_file に設定されている場合、このパラメータには単一のファイル名ではなくファイルのリストが含まれます。ファイルリストでは、各エントリをカンマまたはセミコロンで区切る必要があります。image_file モードで指定するファイルの数は、LoadInitFile でファイルをロードする際、利用可能なカーネル値の数(O.KernelColumns * O.KernelRows)と同じでなければなりません。 このパラメータは、先頭と末尾に空白文字、および先頭と末尾に “"” または ‘'’ 文字が含まれるファイル名を受け入れます。 |
|
| LoadInitFile | |
|---|---|
| タイプ | 動的書き込みパラメータ |
| Default | 0 |
| 範囲 | [0, 1] |
|
InitFileName パラメーターで指定されたファイルをRAMへの読み込みを開始するには、このパラメーターに 1 の値を書き込みます。詳細な説明については上記を参照してください。 |
|
| MaxNumRoI | |
|---|---|
| タイプ | static write parameter |
| Default | 1 |
| 範囲 | [1, 65536] |
|
このパラメーターは、オペレーターが保存できるROIの最大数を定義します。 NumRoI が static に設定されている場合、このパラメーターは編集できません。代わりに、自動的に NumRoI と同じ値になります。 最大ROI数である MaxNumRoI に非常に大きな値を設定すると、アプレットのビルド時にタイミングに関する問題が発生する可能性があります。 |
|
| NumRoI | |
|---|---|
| タイプ | dynamic/static write parameter |
| Default | 1 |
| 範囲 | [1, MaxNumRoI] |
|
このパラメーターは、実際に使用されるROIの数を定義します。オペレーターは、最初のROIの読み込みを再度開始する前に、NumRoI 個のROIを読み込みます。取り込みの実行中、後続のオペレーターによって出力がブロックされるまで、オペレーターは周期的に NumRoI 個のROIを出力します。パラメーターが static に設定されている場合、範囲は [1, 65536] であり、MaxNumRoI は無効になります。 |
|
| XOffset | |
|---|---|
| タイプ | dynamic/static read/write parameter |
| Default | 0 |
| 範囲 | [0, O.MaxImgWidth - XLength] |
|
このフィールドパラメーターは、ROIの最も左側の列のx座標の配列を定義します。 ステップサイズはParallelismです。 'パラメータの編集'でのフィールドパラメータの設定方法については、こちらをご覧ください。 |
|
| XLength | |
|---|---|
| タイプ | dynamic/static read/write parameter |
| Default | 1024 |
| 範囲 | [0, O.MaxImgWidth - XOffset] |
|
このフィールドパラメーターは、ROIの幅の配列を定義します。 ステップサイズはParallelismです。 'パラメータの編集'でのフィールドパラメータの設定方法については、こちらをご覧ください。 |
|
| YOffset | |
|---|---|
| タイプ | dynamic/static read/write parameter |
| Default | 0 |
| 範囲 | [0, O.MaxImgHeight - YLength] |
|
このフィールドパラメーターは、ROIの最初の行のy座標の配列を定義します。 'パラメータの編集'でのフィールドパラメータの設定方法については、こちらをご覧ください。 |
|
| YLength | |
|---|---|
| タイプ | dynamic/static read/write parameter |
| Default | 1024 |
| 範囲 | [0, O.MaxImgHeight - YOffset] |
|
このフィールドパラメーターは、ROIの高さの配列を定義します。 'パラメータの編集'でのフィールドパラメータの設定方法については、こちらをご覧ください。 |
|
| LinesToSimulate | |
|---|---|
| タイプ | static write parameter |
| Default | 1 |
| 範囲 | {1, 2^31-1} |
|
このパラメーターは、デザインタイム中のシミュレーションで使用され、O.LinkType が VALT_LINE1D に設定されている場合のみ使用されます。 このパラメーターは、オペレーターによってシミュレートされるROIラインの数を定義します。ROIは初期化画像内の2次元領域として定義されますが、シミュレーション出力は、指定されたすべてのROIを周期的に反復処理するラインのシーケンスを提供します(NumRoI 個のROIラインの読み込み後にROI 0から再度開始します)。 |
|
| PixelsToSimulate | |
|---|---|
| タイプ | static write parameter |
| Default | 1 |
| 範囲 | {1, 2^31-1} |
|
このパラメーターは、デザインタイム中のシミュレーションで使用され、O.LinkType が VALT_PIXEL0D に設定されている場合のみ使用されます。 このパラメーターは、オペレーターによってシミュレートされるROIピクセルの数を定義します。ROIは初期化画像内の2次元領域として定義されますが、シミュレーション出力は、NumRoI 個のROIピクセルの読み込み後にROI 0から再度開始して、指定されたすべてのROIを周期的に反復処理するピクセルのシーケンスを提供します。 |
|

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



前へ

