コンテンツにスキップ

停止可能および停止不可能なデータストリーム#

このトピックでは、生成されたFPGAパイプラインが適用されたときの画像データストリームの動作について説明します フロー制御。このトピックを読むことで、 stoppable および non-stoppable ストリームの違い、 infinite sources (カメラオペレーターなど)がデザインにどのように適合するか、およびバッファーオペレーター、 InfiniteSource パラメータ、および Overflow オペレータを使用して接続エラーやデッドロックを回避する方法を学びます。

主要用語

non-stoppableストリームは継続的に実行されます。non-stoppableソースは、生成されたFPGAデザインのフロー制御ロジックによって一時停止することはできません。典型的な例は、ピクセルを送り続けるカメラです。対照的に、stoppableストリームは、次のオペレーターの準備ができていないときに一時停止できます。カメラと下流処理の間のバッファーにより、non-stoppableストリームがstoppableストリームに変換されることがよくあります。

そのため、カメラの後にはバッファを配置してください。カメラのバーストデータを受け止めるには、以下のDRAMオペレータを使用することを推奨します。 LineBuffer (imaFlexの場合)、または ImageBuffer (microEnable 5の場合)。 ImageFifo (FPGA内蔵メモリ)は、例えば SYNCの前のわずかな遅延など、小さなデカップリングにのみ使用してください。もし ImageFifo を停止不可能なストリームで使用する場合は、 Overflow オペレータと組み合わせるか、代わりに ImageFlowControl 代わりに。参照 Memory要素 チュートトリアルのトピック。

リンク接続に関する正式なルールについては、ユーザーマニュアルのInfinite Sources / Connecting Camerasを参照してください。オペレーターの形状や、モジュールがデータフローを一時停止または保留する方法については、Operator Types and Synchronizationのチュートトピックを参照してください。

StoppableおよびNon-Stoppableストリーム#

生成されたFPGAパイプラインは、モジュール間のデータフローを制御します。モジュールは、これ以上のデータを受け入れる準備ができていないときに入力を一時停止できます。したがって、下流のモジュールは限られた時間だけストリームを減速させることができます。VisualAppletsはエディター内でそのフロー制御を適用するのではなく、FPGA上でビルドされたアプレットが適用します。

ストリームは、デザインを壊すことなくフロー制御によって保留できる場合にstoppableになります。ソースがフロー制御によって停止できない場合、ストリームはnon-stoppableになります。次のモジュールがビジー状態であっても、ソースはデータを配信し続けます。

ストップ不可能なストリームは、無限ソースとも呼ばれます。この名称はフロー制御を指すものであり、無制限の画像サイズを意味するものではありません。ストリームには、生成されたFPGAデザインがソースを一時停止させるための内部バッファがありません。

VisualAppletsデザインにおけるNon-Stoppableソース#

Camera operatorは、最も一般的なストップ不可能なソースです。これらはカメラからピクセルを受け取り、出力リンクに転送します。バックプレッシャーを吸収できるバッファを持たず、カメラに転送の停止を指示することもできません。

対照的に、停止可能なソースには次のようなオペレーターが含まれます。 CreateBlankImage および CoefficientBuffer.

Non-Stoppableソースの接続#

O型およびP型のすべての演算子は、停止不可能なソースの下流に配置できます。無限ソース特性は、モジュールがストリームを制御可能なストリームに変換するまで、設計内のこれらの演算子を通して伝播します。

一部の Mタイプ operatorのみがストップ不可能なソースを直接受け入れます。これらは主に Memory operator の設定および取得に関するサンプル LineBuffer, ImageBuffer, ImageFifoおよび FrameBufferです。特定のマMタイプoperatorが無限ソースを受け入れるかどうかは、operatorのヘルプおよび オペレーターリファレンス.

無限ソースを受け入れないMタイプoperatorにストップ不可能なソースを接続すると、Design Rules Check Level 2によって無限ソースエラーが報告されます。アプレットをビルドする前にこのエラーを修正してください。

Mタイプ、Oタイプ、およびPタイプの動作とフロー制御のルールについては、Operator Types and Synchronizationのチュートトリアルのトピックを参照してください。

無限ソースを制御するには、次の2つの方法があります。

  • 次のようなバッファーオペレーターを使用する場合: LineBuffer, ImageBuffer、または ImageFifo
  • 次を使用することで、 Overflow オペレータ。

カメラパスの場合、BaslerはデフォルトとしてDRAMバッファー(LineBuffer または ImageBuffer)を推奨します。使用するのは ImageFifo 小規模なデカップリングタスクのみを対象としています。このトピックの冒頭にある「主要用語」ボックスおよび Memory要素 チュートトリアルのトピック。

情報

イメージ Overflow ライブラリ内の 同期化 operatorは、処理しきれないフレームをカットします。これによりフレーム長が異なり、下流のすべてのoperatorがこれを処理できるわけではありません。このoperatorを次のようなものと混同しないでください。 arithmetic overflow (Bit Widthに収まらなくなった結果。チュートリアルのトピックを参照)、または ビット演算 と混同しないでください。 Overflow ステータスパラメーターを区別しました バッファoperatorでの Memory要素 (バッファがいっぱい。チュートリアルのトピックを参照)。

イメージ Overflow オペレーター自体はデータをバッファリングしません。そのため、Basler では常に Overflow オペレーターをバッファオペレーターと組み合わせて使用することを推奨しています。

バッファーオペレーターの使用#

バッファーオペレーターは、停止不可能なストリームを制御可能なストリームに変換します。下流のモジュールがデータを処理する準備ができていない場合でも、入力でデータを受け入れます。データを内部に保存し、下流のモジュールが準備できたときに転送します。

一般的なデカップリングoperatorには、 LineBuffer, ImageBuffer, ImageFifo、および無限ソースをサポートするその他のMemory operatorが含まれます。カメラのバーストを吸収する必要がある場合や、下流の処理またはLineBuffer または ImageBufferDRAMバッファ( DmaToPC )がフロー制御を適用する必要がある場合は、ストップ不可能なソースの直後に配置します。 ImageFifo 必要なバッファーが小さい場合のみです。

情報

イメージ ImageFifo オペレーターは画像のごく一部のみをバッファリングします。その結果、FIFOオーバーフローが発生するリスクが大幅に高まりますが、これは内部で検出または処理されません。

使用する場合 ImageFifo オペレーターを使用して停止不能なストリームをバッファリングする場合、Basler では ImageFifo を先行する Overflow オペレーター。これにより、受信データの適切な処理が保証され、制御不能なオーバーフロー状態が防止されます。

組み合わせの代替として Overflow operator with a memory operator, you can use the ImageFlowControl operator for safer and more robust handling. It combines the buffering functionality of the ImageFifo with integrated overflow handling.

A typical acquisition path looks like this:

Camera → LineBufferまたはImageBuffer(DRAM) → その他の処理 → DmaToPCを使用します

小規模なデカップリングの場合に限り、DRAMバッファの代わりにImageFifoを使用できます(できればOverflowと併用するか、ImageFlowControlを使用してください)。

バッファoperatorによる無限ソースの制御

バッファがない場合、DmaToPCや入力を一時停止するその他のオペレータはカメラストリームの速度を調整できません。このデザインはDRCに不合格になるか、ハードウェア上でデッドロックのリスクが生じます。

When using a buffer operator to control infinite sources, you must set the InfiniteSource parameter of the buffer operator to ENABLED.

InfiniteSourceがENABLEDに設定されているBufferオペレータ

If the InfiniteSource parameter of the buffer operator is set to DISABLEDと組み合わせて使用することを推奨しています(DRC Level 2 が失敗します):

InfiniteSourceがDISABLEDに設定されているBufferオペレータ

For buffer sizing, FillLevelおよびRAMの使用量については、次を参照してください: Memory要素 チュートトリアルのトピック。

InfiniteSourceパラメータの設定#

Many buffer operators expose the parameter InfiniteSource. Set it to ENABLED when the operator input connects to a non-stoppable source. Set it to DISABLED when the input comes from a stoppable stream.

Follow these rules:

  • 設定 InfiniteSource を ENABLED only when the module input actually connects to a non-stoppable source.
  • 設定 InfiniteSource を DISABLED on buffer operators that receive data from a stoppable stream.
  • If you are unsure, set DISABLED を最初に実行します。次を実行: Design Rules Check Level 2 を実行し、チェックでフラグが立てられたモジュールを調整します。

モジュールのパラメータを変更するには、モジュールをダブルクリックしてModule Propertiesを開きます。Applyをクリックしてパラメータの変更を適用します。リンクプロパティとモジュールパラメータについては、Parameterizationチュートリアルのトピックを参照してください。

下流の処理が一時停止できる場合のOverflowオペレーターの使用#

イメージ Overflow オペレーターは、一時的にブロックされる可能性のある処理から、停止不能な入力 2D ストリームを分離します。それ自体には内部バッファがないため、Basler では常に Overflow オペレーターをバッファオペレーターと組み合わせて使用することを推奨しています。出力データのブロックが原因でバッファがフルになると、 Overflow operatorは現在のフレームを切り捨てて破損したものとしてマークし、出力が再びデータを受け入れるようになるまで以降のフレームをスキップできます。

使用 Overflow これは、ソースを停止できず、下流側のoperatorがラインやフレームのバッファ容量を超える期間にわたってデータフローを一時停止する場合に使用します。

OverflowオペレータによるInfinite Sourceの制御

配置する場合: Overflow operatorを、停止不可能なソースと以下のようなMemory operatorの間に配置します。 FrameBuffer、 InfiniteSource 該当するMemory operatorのパラメータを DISABLEDが無効になります。 Overflow オペレータは、停止不可能なストリームからのオーバーフローをすでに処理します。有効化 InfiniteSource そのトポロジ内のメモリダッシュボード設定が不正であり、DRCエラーが発生します。

イメージ Overflow オペレータは、フレームをカットする際に非矩形フレームを生成する可能性があります。後続のオペレータが短縮された最終行を許容することを確認してください。オペレータの説明を参照してください Overflow オペレーターリファレンス。

情報

組み合わせの代替として Overflow operator with a memory operator, you can use the ImageFlowControl operator for safer and more robust handling. It combines the buffering functionality of the ImageFifo with integrated overflow handling.

DRCによるデザインの検証#

ソース、バッファ、およびDMAパスを配線した後、Analysis → Design Rules Check Level 2を実行します。Level 1もシミュレーションおよびビルドの前に自動的に実行されます。

DRC レベル 2 は拡張ルールをチェックし、FPGAリソースを推定します。停止できないソースがインフィニットソースを受け入れないMタイプオペレータに供給されている場合や、次の場合にインフィニットソースのエラーを報告します: InfiniteSource 設定が実際の接続と一致していません。

DRC logを読み、ハイライトされたモジュールまたはリンクを修正します。完全なワークフローについては、From Empty Design to Running Appletのチュートリアルを参照してください。

一般的なパイプラインの例#

バッファーを介したカメラからDMAへの接続#

  1. cameraオペレータをソースとして配置します。
  2. 挿入します LineBuffer または ImageBuffer イメージパス上(または ImageFifo 小さなデカップリング用のみ。上記を参照)。
  3. 設定 InfiniteSource を ENABLED バッファ上で。
  4. 処理用のoperatorと接続し、 DmaToPC.
  5. DRC Level 1およびLevel 2を実行し、シミュレーションまたはビルドを行います。

ステップ2とステップ3を行わない場合、DRC Level 2によって不正な接続に対する無限ソースエラーが報告されます。

Overflowとバッファーを備えたNon-Stoppableソース#

  1. 停止不可能なソースを接続します。 Overflow.
  2. 接続します: Overflow を ImageFifo, LineBufferまたは別のバッファoperator。
  3. 設定 InfiniteSource を DISABLED 次の処理の後のバッファ上で: Overflow.
  4. 後続の処理を接続し、DRC Level 2を実行します。無限ソースエラーや InfiniteSource の不一致が解消されていることを確認します。

Overflowオペレータとバッファを備えたInfinite Source

Overflow 出力が阻害されると、フレームのカットやスキップが発生します。次のバッファは、一時停止する可能性のある下流処理のデータを保存します。このバッファがない場合、 Overflow 単体では、停止不可能なソースと下流モジュールの一時停止を切り離すことはできません。