Operator LineBuffer (imaFlex)

Operator Library: Memory

LineBuffer オペレーターは、画像データストリームをフレームグラバーのRAM(DRAM)にバッファリングします。これはFPGA内ではなく、フレームグラバー上のメモリです。LineBuffer オペレーターは、mE5ハードウェアプラットフォームで使用され、同じ機能を提供する ImageBuffer オペレーターの代替です。imaFlex CXP-12 Quad および imaFlex CXP-12 Penta は ImageBuffer オペレーターをサポートしていないため、デザインを mE5ハードウェアプラットフォームから imaFlex CXP-12 Quad または imaFlex CXP-12 Penta プラットフォームに変換すると、ImageBuffer のすべてのインスタンスが自動的に LineBuffer のインスタンスに置き換えられます。

タイプ RAM の VisualApplets リソースが1つ必要です。詳細については、「Allocation of Device Resources」を参照してください。タイプ RAM の複数のリソースは、共有メモリの概念を使用して同じ物理 RAM を使用します。共有メモリの使用方法に関するドキュメントは、「 Shared Memory Concept 」セクションにあります。さらに、LineBuffer オペレーターは関心領域(ROI)のサポートを備えています。総ビット数(ビット幅に Parallelism を掛けた値)は、それぞれのフレームグラバーのメモリ制限を超えてはなりません。

このオペレーターは、少なくとも1ラインの遅延を引き起こします。ラインの読み出しは、そのラインがバッファに完全に書き込まれるとすぐに開始されます。出力がブロックされている場合、オペレーターは入力データをバッファリングします。

このオペレーターは FIFO のように動作します。バッファは画像ライン単位で動作するため、メモリ遅延が非常に短くなります。入力データの完了したラインは、選択された関心領域内であり、後続のモジュールがデータを十分に高速に処理できる限り、直ちに出力に転送されます。その結果、カメラからのフレームデータを、現在のフレーム転送がまだ進行中の間でも PC に転送できます。バッファにさらに多くのラインが蓄積されると、入力データと出力データの間の遅延が増加します。これは、例えば後続のモジュールが入力帯域幅と同じ速度でデータを処理できないため、出力がしばらくの間ブロックされたときに発生します。したがって、オペレーターが入力の提供するデータと同じ速度でデータを出力できない場合にのみ、メモリがいっぱいになります。多くの場合、このオペレーターはピーク時の入力帯域幅を補償するために使用されます。

パラメータ XOffset、XLength、YOffset、および YLength を使用して、関心領域を定義できます。入力画像の幅が XOffset と XLength の合計より小さい場合でも、LineBuffer オペレーターはパラメータ化された XLength を読み取ります。この場合、オペレーターは追加のピクセルに対して未定義のメモリ内容を出力します。入力画像の高さが要求された出力画像の高さより小さい場合、オペレーターは利用可能なラインのみを出力します。入力画像の高さが YOffset よりも低い場合、出力にはダミー値のみを含む単一のラインが生成されます。

Line1D アプリケーションモードでは、YOffset および YLength の設定は無効です。

バッファの使用率を測定するために、オペレーターには FillLevel、LineCount、および Overflow のパラメータが用意されています。FillLevel は RAM の使用率をパーセンテージで示します。LineCount はバッファに保存されている現在のライン数を提供します。Overflow パラメータは、FillLevel が 100% に近づくか達し、バッファに保存される次の画像が RAM 容量を超える場合に 1 に設定されます。オーバーフローが発生した場合、入力データは破棄され、入力画像の高さが削減されます。

InfiniteSource パラメータは、オペレーターがカメラからのバッファなしストリームなど、停止できないデータストリームを受信するかどうかを指定します。無限ソースの詳細については、「Infinite Sources / Connecting Cameras」を参照してください。オーバーフローは、データソースが停止できない場合、つまり InfiniteSource が ENABLED に設定されている場合にのみ発生する可能性があります。その結果、Overflow および OverflowClearMode パラメータは、InfiniteSource パラメータが ENABLED に設定されている場合にのみ使用できます。オーバーフローの結果として、不完全な画像がメモリに保存される場合があります。これらの不完全な画像は自動的に確定され、次のラインに十分なバッファスペースが確保されるまで、受信データは破棄されます。

Operator Restrictions

  • 空のフレームはサポートされていません。

[注] 利用可能なメモリ空間

オペレーターは、RAM に収まる最大ライン数(XLength によって定義される)を報告する読み取り専用パラメータ MaxLineCount を提供します。この数値はさらに、現在のデザインにおける他のメモリオペレーターの存在やデータビット幅によっても異なります。

ハードウェアプラットフォームで使用可能
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

帯域幅の最適化

ImageBuffer オペレーターとは対照的に、LineBuffer オペレーターは、最適なパフォーマンスを達成するために、メモリデータ幅にできるだけ近づけるようにピクセルの自動集約を実行します。

ParallelismConverter パラメータによって有効にされている場合、出力の Parallelism を入力の Parallelism とは異なる値に調整できます。これにより、オペレーターの入力と出力の間で非対称なピークデータスループットを定義できるようになります。後続のデータ処理パイプラインで異なる Parallelism で作業する必要がある場合に、PARALLELdn または PARALLELup オペレーターの追加インスタンスを回避するためにこの機能を使用できます。

RAM の利用可能な最大帯域幅を超える書き込みデータの大きなバーストをオペレーターが処理できるようにするには、WritePriority パラメータを有効にします。これは、カメラ(InfiniteSource = ENABLED)などの無限データソースを使用する場合に推奨されます。書き込みバーストが原因で RAM の利用可能な帯域幅を超えた場合、読み出しは禁止されます。これにより、RAM へのより頻繁な書き込みアクセスを一時的に許可できます。カメラが書き込みデータのバーストを配信する場合、そのバーストの後に書き込みデータのギャップが続くことが予想され(そうでない場合、利用可能な RAM 帯域幅を超過します)、その後、そのギャップを利用して読み出し帯域幅を一時的に引き上げることができます。

I/O Property

Property 値
オペレータータイプ M
Input Link I、画像データ入力
Output Link O、画像データ出力

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

Link Parameter Input Link I Output Link O
Bit Width [1, 64]12 as I
Arithmetic {unsigned, signed} as I
Parallelism any2 as I 2
Kernel Columns 1 as I
Kernel Rows 1 as I
Img Protocol {VALT_IMAGE2D, VALT_LINE1D} as I
Color Format any as I
Color Flavor any as I
Max. Img Width 2^31-13 as I
Max. Img Height 2^31-1 as I

1

入力 Bit Width の範囲は次のとおりです:

  • 符号なし入力の場合: [1, 64]

  • 符号付き入力の場合: [2, 64]

  • 符号なしカラー入力の場合: [3, 63]

  • 符号付きカラー入力の場合: [6, 63]。

2

ビット幅と Parallelism の積は、ネイティブ RAM データ幅(RamDataWidth)を超えてはなりません。

3

LineBuffer オペレーターが Parallelism を変換する場合(ParallelismConverter = Yes)、出力での最大画像幅を自動的に O.Parallelism の次の倍数に丸めます。O.Parallelism が I.Parallelism より大きい場合、出力での丸められた最大画像幅が 2^31-1 を超えないように、I.MaxImgWidth は 2^31-1-O.Parallelism を超えてはなりません。

パラメーター

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

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

XOffset
タイプ dynamic/static write parameter
Default 0
範囲 [0, Max.Img Width - XLength]

このパラメータは、ROI の左上隅の x 座標を定義します。

ステップサイズは入力 Parallelism です。

XLength
タイプ dynamic/static write parameter
Default 1024
範囲 [input parallelism, min(Max.Img Width, (2^RAM address width - 1) * internal RAM parallelism) - XOffset]

このパラメータはROIの幅を定義します。

ステップサイズは入力 Parallelism です。

YOffset
タイプ dynamic/static write parameter
Default 0
範囲 [0, Max.Img Height - YLength]

このパラメータは、ROI の左上隅の y 座標を定義します。

YLength
タイプ dynamic/static write parameter
Default 1024
範囲 [1, Max.Img Height - YOffset]

This parameter defines the height of the ROI.

ParallelismConverter
タイプ static write parameter
Default いいえ
範囲 {Yes, No}

このパラメータは、LineBuffer オペレーターが Parallelism コンバーターを実装するかどうかを定義します。

  • No:オペレーターは Parallelism 変換を実行しません。入力と出力の Parallelism は常に同じです。入力 Parallelism が変更されると、出力 Parallelism は自動的に新しい入力 Parallelism の値に変更されます。出力 Parallelism は編集できません。

  • Yes:オペレーターは Parallelism 変換を実行します。出力 Parallelism は入力 Parallelism から完全に独立しており、自由に編集できます。

InfiniteSource
タイプ static write parameter
Default DISABLED
範囲 {ENABLED, DISABLED}

LineBuffer オペレーターは、カメラオペレーターの直後に挿入できます。この場合、InfiniteSource パラメータを ENABLED に設定する必要があります。その後、オペレーターはアクティブなオーバーフロー管理を実行し、オペレーターがオーバーフローから正常に回復できるようにします。オーバーフローは、オペレーターの後方のデータシンクが送信を停止または一時停止してバッファ使用率が最大に達したとき、または入力帯域幅が高すぎて書き込みデータを外部 RAM に転送できないときに発生する可能性があります。InfiniteSource が DISABLED に設定されている場合、バッファの使用率や入力帯域幅が高くなりすぎると、先行するオペレーターがデータの転送を停止する禁止信号が生成されます。

書き込みの優先順位付けは、InfiniteSource パラメータが ENABLED に設定された状態で使用されるすべてのオペレーターに推奨されます。したがって、InfiniteSource パラメータが ENABLED に設定されている場合は、WritePriority パラメータを ENABLED に設定することが推奨されます。

詳細については、「Infinite Sources / Connecting Cameras」を参照してください。

WritePriority
タイプ static write parameter
Default DISABLED
範囲 {ENABLED, DISABLED}

共有 Memory の概念(' Shared Memory Concept ')は通常、接続されているすべての Memory オペレーター(RAM リソースを使用するすべてのオペレーター)間で帯域幅を均等に分配します。WritePriority が DISABLED の場合、LineBuffer オペレーターは読み込みと書き込みに同じ優先度を割り当てます。WritePriority を ENABLED に設定すると、一時的な Memory データレートが利用可能な帯域幅を超えている間のみ、LineBuffer オペレーターは読み込みよりも書き込みを優先します。書き込みの一時的な優先順位付けにより、読み込み処理が一時的に低速化します。その結果、平均帯域幅が LineBuffer オペレーターの利用可能な帯域幅を超過しないようにする必要があります。InfiniteSource パラメーターが ENABLED に設定されているオペレーターを使用する場合は、書き込みの優先順位付けが推奨されます。停止可能なソースで書き込みの優先順位付けを使用する場合は、書き込み帯域幅が高くなりすぎないようにしてください。そうしないと、バッファがいっぱいになるまで LineBuffer からの読み込みが停止されます。書き込みの優先順位付けは個々のオペレーターの設定であるため、デザイン内の Memory オペレーターが増えるごとに、書き込みの優先順位付けの効果は低下します。

FillLevel
タイプ 動的リードパラメータ
Default 0
範囲 [0%, 100%]

このパラメータは、DRAM の Fill レベルをパーセンテージで提供します。

MaxLineCount
タイプ 動的リードパラメータ
Default 2^RAM アドレス幅 / (XLength / 内部 RAM Parallelism + 1)
範囲 [1, 2^RAM アドレス幅 / 2]

このパラメータは、現在 Memory に収まる最大行数を提供します。Memory に収まる最大行数は、インスタンス化された RAM オペレーターの数によって決まる RAM アドレス幅に依存します。

LineCount
タイプ 動的リードパラメータ
Default 0
範囲 [0, MaxLineCount]

このパラメータは、Memory 内の現在の行数を提供します。

Overflow
タイプ 動的リードパラメータ
Default 0
範囲 [0, 3]

このパラメータはバッファオーバーフローを示します。これは 2 ビットのビットマップであり、各ビットは異なるタイプのオーバーフローを示します。ビット 0 は Fill レベルのオーバーフローを示し、ビット 1 は書き込み帯域幅のオーバーフローを示します。Overflow パラメータがオーバーフローを表示し続ける時間は、OverflowClearMode によって異なります。

Overflow パラメータは、InfiniteSource パラメータが ENABLED に設定されている場合にのみ有効になります。

OverflowClearMode
タイプ 動的書き込みパラメータ
Default AutoClear
範囲 {AutoClear, ManualClear, ClearAfterRead, ClearWithProcessReset}

OverflowClearMode は、オペレーターがオーバーフローから回復したときに Overflow パラメータがどのようにクリアされるかを決定します。このパラメータでオーバーフロー状態をリセットできるのは、オペレーターがすでにオーバーフロー状態から脱している場合のみです。

クリアモード:

  • AutoClear:オペレーターがオーバーフローから回復すると、Overflow パラメータは自動的にリセットされます。

  • ManualClear:オペレーターがオーバーフローから回復した後も、OverflowClearMode パラメータに ManualClear を書き込んで手動でリセットされるまで、Overflow パラメータはオーバーフローを表示し続けます。このモードでは、プロセスリセット(Acquisition Stop など)では Overflow パラメータはクリアされないため、取り込みが停止した後もオーバーフローが表示されたままになります。

  • ClearAfterRead:オペレーターがオーバーフローから回復した後も、Overflow パラメータが読み取られるか、またはプロセスリセットが発生する(取り込みが停止されたときなど)まで、Overflow パラメータはオーバーフローを表示し続けます。

  • ClearWithProcessReset:オペレーターがオーバーフローから回復した後も、リセットが発生する(取り込みが停止されたときなど)まで、Overflow パラメータはオーバーフローを表示し続けます。

OverflowClearMode パラメータは、InfiniteSource パラメータが ENABLED に設定されている場合にのみ有効になります。