オペレーター RamLUT

Operator Library: Memory

このオペレーターは、通常DRAMであるFrame Grabber RAMに基づく大規模なルックアップテーブル(LUT)を実装します。 タイプ RAM のVisualAppletsリソースが1つ必要です('Allocation of Device Resources'を参照)。

オペレーター RamLUT は、出力上のカーネルをサポートします。

オペレーターのレイテンシについては、「表 46:Library Memory 内のオペレーターの個別のレイテンシ」を参照してください。

このオペレーターの一般的なユースケースは、色空間の分類問題です。 たとえば、microEnable IVファミリのボードでは、このオペレーターにより2^24エントリのルックアップテーブルが可能になります。 つまり、RGB 24色空間の各色の値を含む分類ルックアップテーブルを定義できます。 このオペレーターは、2つの方法でLUTコンテンツのプログラミングを容易にします。 どちらの方法でも、LUTは合成プロセスの後、実行時にアプレットが使用される時点でプログラミングする必要があります。

  1. LUTをプログラミングする1つ目の方法は、アドレス値パラメータ InitAddress および InitData を提供するレジスタインターフェイスです。 まず、パラメータ InitAddress を使用してアドレスを設定します。 次に、データムをパラメータ InitData に書き込みます。 データを書き込むと、オペレーターは実際にLUTに書き込みを行い、前の値を置き換えます。 カーネルを使用する場合、最後のカーネル要素への書き込みによって、オペレーターが実際に LUTに書き込みを行い、前の値を置き換えます。

  2. LUTをプログラミングする2つ目の方法は、コンテンツを含むファイルの使用です。 ファイルアクセスはレジスタアクセスよりも高速ですが、いくつか注意が必要です。ファイルはさまざまな形式にすることができます。 形式はパラメータ InitFileMode で定義する必要があります:

    • text_with_checks

      このモードでは、初期化ファイルはテキストファイルである必要があり、値の文字列は 空白、タブストップ、ラインフィード(LF)、またはキャリッジリターンラインフィード(CRLF)のいずれかで区切られます。 オペレーターはこれらのファイルのエラーをチェックし、ファイルを使用できない場合はエラーを報告します。

      各値はカーネル要素を表し、正しい範囲内の十進数である必要があります。

      次の図は、4x3カーネルのファイルを示しています。

    • text_raw

      このモードは text_with_checks モードに似ていますが、エラーチェックの数が少なくなっています。 このモードでは、各値を別々の行で指定する必要があります。 このモードでのファイルの読み込みは、text_with_checks モードに比べて高速です。 上記の例は、text_raw モードでは次のようになります:

    • binary

      binary モードはバイナリファイルを想定しており、LUT要素の各カーネルエントリに8バイトが使用されます。 カーネルエントリ値を64ビット未満で表現できる場合、未使用のビットは無視されます。 これは、値をLUTに書き込む最速の方法です。 上記の例は、binary モードでは次のようになります:

    3つのモードすべてにおいて、ファイル内のエントリ数がLUT要素の数を超えてはならず、値の数は KernelSizeの倍数である必要があります。 したがって、ファイルには最大で 2^InputBitWidth * KernelSize の値を含める必要があります。

    初期化ファイルに 2^InputBitWidth * KernelSize の値が含まれている場合、LUTメモリはアドレス 0 から 完全に上書きされます。 この場合、パラメータ InitAddress は変更されません。

    初期化ファイルに含まれるエントリが少ない場合は、部分初期化が実行されます。 その後、InitAddress パラメータで指定されたアドレスから初期化が行われます。 パラメータ InitAddress は、最後に書き込まれたLUTエントリの次の位置に自動的にインクリメントされます。 これにより、書き込まれたLUTエントリの数を監視できます。 ファイルに (2^InputBitWidth - InitAddress) * KernelSize を超える値が含まれている場合、 初期化はLUTの最後のエントリの書き込み後に停止し、InitAddress は 0 に設定されます。

    パラメータ InitFilename は、初期値を格納しているファイルを指定します。 最後に、パラメータ LoadInitFile に値 1 を書き込むと、 ファイルの読み取りが開始され、受け入れられた場合はハードウェアに値が書き込まれます。 パラメータ LoadInitFile に 0 を書き込んでも、値の読み込みは発生しません。 これは、アプレットの初期化プロセス中に初期ファイルをハードウェアに読み込みたくない場合に役立ちます。

    シミュレーション中、初期化ファイルの読み込みは実行時と同じ方法で行われます。 部分的な設定の場合やエラーが発生した場合は、シミュレーションログで出力を確認することが役立ちます (アクティブ化する必要がある場合があります 詳細を表示 で シミュレーション ダイアログ)。

DRAMテクノロジーはランダムアクセスのパフォーマンスが非常に低いことに注意してください。 DRAMへの連続したアクセスごとにページミスが発生し、新しい行のアクティブ化が必要になる最悪のシナリオでは、 DRAMのスループットは最大パフォーマンスから90%低下し、帯域幅の使用率は約10%になります。 ただし、複数のDRAMバンクを組み合わせることで、最悪の場合でもスループットを向上させることができます。 2つ以上のRamLUTオペレーターを連携させ、それぞれに異なるルックアップジョブを処理させます。 連続する入力値が急速に変化しない場合、オペレーターのパフォーマンスははるかに高くなります。 ハードウェアユーザーガイドで、フレームグラバーのそれぞれのRAMテクノロジーと寸法を確認してください。

帯域幅の最適化

Frame Grabber RAM (DRAM) を使用するオペレーターを通過する理論上の帯域幅 [ビット/秒] は、次の式に従って計算されます。

しかし、実際の帯域幅はDRAMの効率により、常に理論上の帯域幅よりも小さくなります。

オペレータを通過する maximum bandwidth は、Bit Width と Parallelism の積が内部 RAM ポート幅 x 2(読み取り専用パラメータの場合に該当)と等しいときに達します。

[注] プラットフォーム固有の値

RAM Port WidthとSystem Clockはプラットフォーム固有のものです。 個々のプラットフォームの詳細については、Device Resourcesを参照してください。

I/O Property

Property 値
オペレータータイプ M
Input Link I、読み取りアドレス入力
Output Link O、画像データ出力

サポートされているリンクフォーマット

Link Parameter Input Link I Output Link O
Bit Width [1, RAMアドレス幅]1 [1, RAMデータ幅]2
Arithmetic unsigned as I
Parallelism 1 as I
Kernel Columns 1 [1, RAMデータ幅 / Bit Width]2
Kernel Rows 1 [1, Ram Data Width / Bit Width / Kernel Columns]2
Img Protocol {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} as I
Color Format VAF_GRAY as I
Color Flavor FL_NONE as I
Max. Img Width any as I
Max. Img Height any as I

1

許可される入力ビット幅は、フレームグラバーの物理メモリと、何個のオペレーターがRAMへのアクセスを共有しているかによって異なります。 パラメータ RamAddressWidth は、使用できる最大のアドレスビットを提供します。 この数は、デザイン内のRAMベースのオペレーターの数によって変わる場合があることに注意してください。 詳細については、Device Resources を確認してください。

2

許可される出力ビット幅は、フレームグラバーの物理メモリによって異なります。 ビット幅は64ビットに制限されていますが、複数のカーネルコンポーネントを格納できます。 (ビット幅 * カーネルサイズ)の積は、パラメータ RamDataWidth に示されているネイティブRAMデータ幅を超えてはなりません。 詳細については、Device Resources を確認してください。

パラメーター

RamDataWidth
タイプ static write parameter
Default N/A
範囲 整数

このパラメータは、RAMインターフェイスで使用できるデータビット数を提供します。これは、出力が提供できる最大ビット数です(カーネルが適切に使用されている場合)。

RamAddressWidth
タイプ static write parameter
Default N/A
範囲 整数

このパラメーターは、使用できるアドレスビットの数を提供します。

InitAddress
タイプ 動的書き込みパラメータ
Default 0
範囲 [0, 2^InputBitWidth-1]

このパラメーターは、InitDataパラメーターで定義されたデータのアドレスを定義します。 上記の記述を参照してください。

InitData
タイプ 動的書き込みパラメータ
Default 0
範囲 [0, 2^OutputBitWidth-1]

このパラメーターは、InitAddressパラメーターで定義されたアドレスに書き込まれるデータを定義します。 このパラメーターへの書き込みにより、ハードウェアへの実際の書き込みが開始されます。 上記の記述を参照してください。

InitFileLoadMode
タイプ 動的書き込みパラメータ
Default text_with_checks
範囲 {text_with_checks, text_raw, binary}

このパラメーターは、ルックアップテーブルにロードされるファイルのファイル形式とモードを定義します。 上記の記述を参照してください。

InitFileName
タイプ 動的書き込みパラメータ
Default InitRamLut.txt
範囲

このパラメーターは、初期化ファイルの名前を定義します。

LoadInitFile
タイプ 動的書き込みパラメータ
Default 0
範囲 [0, 1]

InitFileNameパラメーターで指定されたファイルをLUTにロードし始めるには、このパラメーターに値1を書き込みます。 上記の記述を参照してください。

使用例

RamLUTオペレーターの使用方法は、以下の例に示されています。