ハードウェアアプレット:アイデアからアプリケーションまで

このアプリケーションノートでは、VisualAppletsで画像処理アプリケーション(アプレット)を設計・作成し、フレームグラバー上で使用する方法について説明します。また、microDisplayおよびFramegrabber APIを使用して実行時にこのアプレットを使用する方法や、このソフトウェアでアプレットのパラメータを構成する方法についても説明します。microDisplayでのアプレットの設計、ビルド、実行時の使用方法に関するイントロダクションについては、Getting Startedを参照してください。このアプリケーションノートでは、Sobelエッジフィルタアプリケーションを例に挙げて、アプレットの開発と使用における前述のフェーズについて説明します。より簡単なガイド付きのパスとして、From Empty Design to Running Appletのチュートリアル トピックがあります。

ワークフローの説明

ワークフローは次のとおりです。

  1. VisualAppletsでのアプレットの設計。

  2. VisualAppletsでのアプレットのシミュレーションと設計ルールチェック(DRC)の実行。

  3. アプレットのビルド。

  4. mE5プラットフォームの場合:アプレットのフラッシング。

  5. microDisplayまたはFramegrabber APIを介したハードウェア上のアプレットの使用。

VisualAppletsでのアプレットの設計

新規プロジェクトの開始

アプレットの設計フェーズはVisualAppletsで行われます。VisualAppletsを開くには、VisualAppletsインストールディレクトリ内の VisualApplets.exe で bin フォルダー、またはWindowsスタートメニューのVisualAppletsプログラムアイコン、またはデスクトップ上のアイコンをクリックします。

  1. 最初、プロジェクトが読み込まれていないVisualAppletsメインウィンドウが開きます。

    VisualAppletsメインウィンドウ

    図 186. VisualAppletsメインウィンドウ


  2. File+New ( Ctrl+N )をクリックするか、FileアイコンバーのNewアイコンを使用します。New Projectウィンドウが開き、プロジェクト名、ターゲットハードウェアプラットフォーム、ターゲットランタイムを指定できます。これらの設定は、後からいつでも変更できます。

  3. この例に従うには、次の設定を使用します。

    Project Name: Sobel_Filter

    Hardware Platform: microEnable 5 marathon VCL

    Target Runtime: Win 64 (Windows/AMD64)

  4. OKをクリックして設定を確定します。

    New Projectウィンドウ

    図 187. New Projectウィンドウ


VisualAppletsで新しいプロジェクトが開始され、プログラムウィンドウの中央に空白の設計ウィンドウが表示されます。右側のProject Infoタブには、プロジェクト名、ターゲットハードウェア、ターゲットプラットフォームなど、現在のプロジェクトに関する情報が表示されます。

オペレーターとリンク

VisualAppletsでは、画像処理操作はオペレーターで表されます。これらのすべてのオペレーターは、VisualApplets設計ウィンドウの右側にあるOperator Libraryにあります。ドラッグアンドドロップを使用して、設計ウィンドウにオペレーターを非常に簡単に配置できます。

設計内のオペレーターのインスタンスはモジュールと呼ばれます。オペレーターには入力ポートと出力ポートを含めることができます。設計内のオペレーター(つまりモジュール)は、これらのポートを使用して接続できます。モジュール間の接続はリンクと呼ばれ、設計ウィンドウでは矢印で表されます。これらのモジュールとリンクは、画像(または信号)処理パイプラインを表します。したがって、操作の順序はモジュールの順序によって決定されます。

オペレーターとリンクには、画像寸法など、現在の画像処理パイプラインに関連する設定を記述するプロパティがあります。これらのプロパティを表示および編集するには、オペレーターをダブルクリックします。オペレーターのプロパティの詳細については、Helpのオペレータードキュメントを参照してください。

VisualAppletsのオペレータードキュメント

図188:VisualAppletsでのオペレーターマニュアル


デザインの実装

この例では、Sobelエッジフィルターアルゴリズムを実装しています。

VisualAppletsのデザインサンプルライブラリには、エッジフィルタリングやその他の画像処理アプリケーション用の「すぐに使用できる」サンプルが用意されています。これらのデザインサンプルは以下にあります: Examples\Processing (VisualAppletsのインストールディレクトリ内、関連ドキュメントについては、 処理の例を参照してください)。これらのサンプルデザインを独自のアプリケーションのベースとして使用できます。

このサンプルSobelフィルターデザインを実装するには、Operator Libraryからオペレーターを見つけてデザイン内にドラッグし、Getting Startedセクションの説明に従ってリンクで接続します。

デザインの概要を把握しやすくし、実行時の使い勝手を向上させるために、後からモジュールの名前を変更することができます。

デザインの概要を分かりやすくするために、必要に応じてHierarchicalBoxesを使用してデザインを構造化してください。

また、適宜デザインを保存することを忘れないでください。

デザインコンポーネント

このアプリケーションノートのサンプルデザインは、次の図に示すように以下のコンポーネントで構成されています:

サンプルデザインの実装 Sobel_Filter.va

図189:サンプルデザインの実装 Sobel_Filter.va


  • Camera Linkグレースケールカメラインターフェース

  • イメージバッファ

  • XおよびY方向のエッジフィルタリング機能を備えたSobelエッジフィルターモジュール(次の場所にあるサンプルに基づく SobelMultiGradient.vad : Examples\Processing\Filter\EdgeDetection\Sobel_Multi_Gradient (VisualAppletsのインストールディレクトリ内))

  • 実行時にディスプレイ上で二値化画像をより見やすくするための、調整可能な二値化閾値とスケールオペレーター

  • PCへのDMA。

カメラで取得した画像の代わりに、デザイン内のCoefficientBufferを画像のシミュレーションソースとして使用できます。オペレーターSourceSelectorを介して、VisualApplets内および実行時の処理パイプライン用の画像入力ソースを選択できます。

パラメータ設定

オペレーターとリンクのパラメータを設定するには、要素をダブルクリックして各要素のパラメータを編集します。

Link Parameters

リンクにはPropertyがあり、最大画像寸法、画像プロトコル、Bit Width、最大可能帯域幅に関連するパラメータであるParallelism(つまり、1つのデザインクロックサイクルで転送されるピクセル数)など、処理された画像のPropertyを定義します。これらのリンクが特定のオペレーター(対応するオペレーターマニュアルを参照)、例えばカメラインターフェースオペレーターに接続されている場合は、目的に応じてこれらのPropertyを編集および調整できます。

選択する最大画像寸法とParallelismが大きいほど、FPGAリソースの消費量が増加します。そのため、FPGAリソースを節約するために、これらの値は必要な大きさにのみ設定することをBaslerでは推奨しています。リンクのPropertyは、VisualAppletsのデザインフェーズでのみ変更できます。

Link Properties

図190:リンクのProperty


Operator Properties

オペレーターのPropertyには、staticとdynamicの2種類があります。staticパラメータはVisualAppletsのデザインフェーズでのみ変更できますが、dynamicパラメータはデザインフェーズ中および実行時の両方で変更できます。オペレーターIS_GreaterThanのstaticおよびdynamicパラメータの例については、以下のスクリーンショットを参照してください。

スタティックおよびダイナミックオペレーターパラメータ

図 191:スタティックおよびダイナミックオペレーターパラメータ


このサンプルデザインでは、以下のパラメータを設定します:

オペレーター IS_GreaterThan:

パラメータ Number を 600 に設定します。

これにより、エッジの階調が識別されます。エッジの階調を確認するには、IS_GreaterThan オペレーターの前にシミュレーションプローブを配置し、シミュレーションを実行して、エッジを含むピクセルを拡大してどの階調を持っているかを確認します。これはダイナミックパラメータであり、実行時に変更できます。

オペレーター SCALE:

パラメータ ScaleFactor を 255 に設定します。

これにより、エッジの視認性が向上します。これはダイナミックパラメータですが、FPGAリソースを節約するために、このパラメータを Static に設定することもできます。

ランタイム時のパラメータアクセスの準備

実行時には、ダイナミックパラメータを変更できます。一般的なユースケースとしては、デザイン内に多数のオペレーターが存在し、デザイン内の多数の異なるオペレーターに対して同じパラメータ(画像寸法など)を変更する必要がある場合が挙げられます。

ライブラリ パラメーター では、1つのパラメータを制御するだけで、デザイン内のさまざまなモジュールパラメータへのアクセスを可能にするオペレータを提供します。さらに、これらのオペレータを使用することで、アクセスパラメータを指定された階層レベルに表示させることもできます。これにより、ランタイム時のパラメータ設定が容易になります。サンプルデザイン Sobel_Filter.va ( 図 189「デザイン例の実装」 Sobel_Filter.va'を参照)では、階層レベルで画像幅と高さ、画像ソースセレクター、閾値、スケールファクターに簡単にアクセスするために、変換および参照パラメータを使用しています パラメーター。このために、空の HierarchicalBox を作成し、名前を パラメーター に設定し、対応する変換および参照パラメータの DisplayHierarchy パラメータを パラメーターに設定します。 パラメーター ライブラリの詳細なドキュメントについては、対応するドキュメントを参照してください( Library Parameters.

デザインのファイナライズ

シミュレーションソースとプローブ

デザインフェーズでは、シミュレーションソースとプローブが非常に役立ちます。シミュレーションソースを使用すると、テスト画像をロードして、処理パイプライン内のすべてのリンクにおける処理済み画像をわずか数瞬で確認できます。例外:信号はシミュレーションできません。さらに、シミュレーションでは、実装の正式な正当性に関する Design Rule Check Level 1 が実行されます。シミュレーション結果は、実行時の結果と同等です。シミュレーションソースとプローブは、VisualApplets のアイコンメニューまたはテキストメニューの [Analysis] から見つけることができます。シミュレーションソースとプローブの使用方法の詳細については、'Simulation' の詳細なドキュメントを参照してください。

では、 図 189「デザイン例の実装」 Sobel_Filter.va' では、デザイン例のシミュレーションソースにロードされたテスト画像を確認できます Sobel_Filter.va。閾値の後、DMA の前で、現在の処理ステップの結果を確認できます。

デザインルールチェック (DRC)

実装を完了した後、Design Rule Check Level 1 および 2 を実行することをお勧めします。Design Rule Check Level 1 および 2 を実行するには、Analysis+Design Rules Check Level 1 and 2 を選択するか、アイコンバーからアイコン Design Rules Check Level 1 and 2 を使用します。

Design Rule Check Level 1 は、実装における構文上のエラーと、デザイン内でのその正確な位置を報告します。デザインをハードウェアアプレットに変換する前に、これらのエラーを修正する必要があります。

Design Rule Check Level 2では、デザインで使用される推定FPGAリソースに関する情報も提供されます。この情報により、画像処理の実装に対して十分なFPGAリソースが利用可能かどうかを確認できます。いずれかのFPGAリソースが100%を超える場合は、リソースを節約するように実装を再設計する必要があります。

では、 図192「サンプルデザインのDesign Rule Check 1および2」 Sobel_Filter.va' Design Rule Check 1および2の結果が表示されます。すべてが正しく設計されており、利用可能なLookup Tableの約36%、FlipFlopの22%、Block RAMの15%、利用可能な組み込みALUの2%が使用されています。デザイン内の各要素が消費するFPGAリソースの詳細な概要を確認できます( 図193「FPGAリソースの推定」)の 解析+FPGAリソース予測

サンプルデザインSobel_Filter.vaのDesign Rule Check 1および2

図192. サンプルデザインのDesign Rule Check 1および2 Sobel_Filter.va


FPGAリソース予測

図193. FPGAリソースの推定


VisualAppletsでのアプレットのビルド

前提条件

ハードウェアアプレットのビルドプロセスは、Xilinxツールが正しくインストールされている場合にのみ実行できます。 https://docs.baslerweb.com/visualapplets/installing-visualapplets#which-xilinx-toolchain-and-version-for-which-frame-grabber-platform には、フレームグラバープラットフォームに適したXilinxのバージョンに関する詳細な概要が記載されています。このサンプルデザインでは、 Sobel_Filter.va microEnable 5 marathon VCLプラットフォームが選択されています。したがって、Xilinx ISEバージョン14.7、または2016.1から2020.1の間のVivadoバージョンが適しています。

ビルド設定の編集

これでサンプルデザインが完了しました。 Sobel_Filter.va デザインをハードウェアアプレットに変換したい場合、この変換プロセスは ビルド と呼ばれ、 設定+ビルド設定を開き、ファイルシステムから対応するXilinxバージョンのバッチファイル settings64.bat (推奨:Xilinx Vivado 2018.2)を選択して、[OK]で確定します。ビルド設定の編集に関する詳細な説明は、 「ビルド設定」.

ハードウェアアプレットのビルドダイアログ

図194. ハードウェアアプレットのビルドダイアログ


VisualAppletsはXilinxツールを使用して、アプリケーションをFPGAビットストリーム、つまり プログラム または アプレットに変換します。このプロセスの所要時間は、設計の複雑さによって異なります。非常に複雑な設計の構築には数時間かかる場合があります。この実装例では、 Sobel_Filter.vaビルド時間は約 15 分です。ビルドが成功すると、アプレットが完全に生成されます。アプレットの名前 (*.hap ファイル)はデザインファイルの名前と同じです(*.va: Sobel_Filter.hap

ハードウェアでのアプレットの実行

前提条件

フレームグラバーでハードウェアアプレットを実行するには、プログラマブル(Vシリーズ)フレームグラバー(ハードウェア)をシステムにインストールする必要があります。さらに、 Framegrabber SDK ソフトウェアをPCにインストールする必要があります。この例では、microEnable 5用のアプレットを使用します。 marathon VCL、最新のFramegrabber SDK バージョンは5.7です。

フラッシング

この例のように、microEnable 5 を使用する場合marathon フレームグラバー、新しいアプレットを使用してフレームグラバーをフラッシュする必要がありますmicroDiagnostics 。

新しいアプレットをmicroEnable IVフレームグラバーまたは最新のCXP 12シリーズのフレームグラバーで使用する場合は、このセクションをスキップしてください。

フレームグラバーをフラッシュするには、以下の手順を実行してください。

  1. ツールを起動しますmicroDiagnostics 下 bin でFramegrabber SDK インストールディレクトリ。

  2. フレームグラバーを選択してください。

  3. ダイアログの左側で「ファームウェア」を選択してください。

  4. ハードウェアアプレットを、表示されているパーティション(0~7)のいずれかに割り当てます。作成したハードウェアアプレットが保存されているディレクトリに移動し、ファイルを選択します。

    ファームウェアパーティションの表示microDiagnostics

    図195. ファームウェアパーティションの表示microDiagnostics


  5. クリック 今すぐフラッシュ

  6. 新しいファームウェアが完全にインストールされるまでお待ちください。フラッシュが完了すると、次のメッセージが表示されます。 microDiagnostics 。

  7. メッセージに記載されている指示に従ってください。

microDisplayでのアプレットのテストと読み込み

アプレットをテストするには Sobel_Filter.hap 最初のパラメータを設定するには、プログラムmicroDisplayを使用します。アプレットをロードするには、以下の手順が必要です。

  1. アプレットを保存します(ここ: Sobel_Filter.hap)の Hardware Applets\<your frame grabber> (ここ: mE5-MA-VCL ) Framegrabber SDK インストールディレクトリ。

  2. microDisplayを起動します bin フォルダー内のFramegrabber SDK インストールディレクトリ。

  3. microDisplayで、 「取得デバイス」から使用するフレームグラバーを選択します。すると、選択したフレームグラバーで使用可能なすべてのアプレットがすぐに表示されます。

  4. 選択してください *.hap 使用したいファイル(ここでは Sobel_Filter.hap)をダブルクリックします。

パラメータ設定と取り込み

アプレットの読み込み後、microDisplayでパラメータツリーと画像取り込みウィンドウを確認できます。以下に、microDisplayに読み込まれた Sobel_Filter.hap アプレットのスクリーンショットを示します。

microDisplayでのパラメータツリーと画像取り込みウィンドウ

図 196: microDisplayでのパラメータツリーと画像取り込みウィンドウ


左側にパラメータツリーが表示されます。これらのパラメータは、VisualAppletsでの設計フェーズにおけるオペレータ名に対応しています。取り込み用に調整したいパラメータを正しく見つけられるよう、オペレータに適切な名前を付けることが重要です。動的パラメータには2種類あります。1つは取り込み開始前にのみ調整可能なパラメータ(DMA dimensionsなど)、もう1つは画像取り込み中であっても調整可能なパラメータ(オペレータIS_GreaterThanのしきい値など)です。

この例では、シミュレータソースからの画像を使用して画像取り込みを実行し、2値化しきい値を150に設定します。VisualAppletsでの設計フェーズでParametersライブラリのパラメータを統合している場合は、パラメータツリーの階層レベルParametersの下で関連するすべての動的パラメータを設定できます。そうでない場合は、設定したい正しいパラメータを見つけるために異なる階層レベルをたどる必要があります。

この例では、階層レベルParametersに移動し、展開します。

  1. Parameter Simulation Imageを右クリックします。これにより、画像取り込みに使用するサンプル画像を選択できます。

  2. Load Simulation Imageをクリックしてこの画像を読み込みます。

  3. パラメータImageSource selectorをSimulatorに、Binarization Thresholdを値150に設定します。

  4. 画像寸法を1024x1024ピクセルに設定します。

これらのパラメータ(またはアプレットに関連するすべてのパラメータ)を設定したら、取り込みを開始できます。ここでは、連続グラブ、シーケンスのグラブ、またはシングルフレームのグラブから選択できます。連続グラブを停止するには、Stopボタンをクリックします。マルチプロセス設計の場合は、各プロセスの取り込みを個別に開始および停止できます。

microDisplayでのアプレット設定と取り込みの詳細な説明については、https://docs.baslerweb.com/frame-grabbers/what-is-micro-display-xを参照してください。

独自SDKでのアプレットの起動

microDisplay Xでアプレットの設定と取り込みを行う代わりに、独自のSDK環境にそれらを統合することもできます。このセクションでは、画像取り込みと設定に関連するSDKコンポーネントの基本機能について紹介します。

C++ SDKのベースとして、VisualAppletsの内部SDKコードジェネレータを使用できます。これはアイコンメニュー内、またはVisualAppletsのBuild+Generate SDK Exampleから見つけることができます。この機能は、SDKコードのベースとして使用できる対応するCMakeファイルとVisualStudioプロジェクトファイルを自動的に生成します。

生成されたSDKプロジェクトファイル

図 197: 生成されたSDKプロジェクトファイル


プロジェクトファイル内の生成されたC++コード vasFgProject.cpp には、次のコードコンポーネントが含まれています。

  1. フレームグラバー:初期化

    取り込みサイクルの数の定義、ボードインデックスの定義、 Fg_Init("Sobel_Filter.hap", boardIndex) 関数の呼び出しによるアプレットの開始。

  2. 取り込み用バッファのMemoryの割り当て。

    関数: Fg_AllocMemEx(fg, ..., ...)

  3. Frame Grabber:Process0のGet*およびSet*パラメータ

    関数: Fg_setParameterWithType(fg, ..., ..., ...) および Fg_getParameterWithType(fg, ..., ..., ...)

    ここには、デザインに含まれるすべてのパラメータがリストされています。Baslerでは、視認性を高めるために、実行時の調整に不要なパラメータをすべて削除することを推奨しています。

  4. ディスプレイを作成する

    関数 CreateDisplay()

  5. 現在存在する各ポートのAppletおよびカメラで取り込みを開始:

    関数: Fg_AcquireEx(fg, 0, nrOfCycles, ...,...);

  6. 画像を取得:

    関数: Fg_getLastPicNumberBlockingEx(fg, ..., ..., ..., ...);

  7. 取り込みを停止

    機能 Fg_stopAcquireEx(fg, .., .., ...)

  8. ディスプレイを閉じる

    関数 CloseDisplay(...);

  9. バッファのMemoryを解放する

    関数 Fg_FreeMemEx(fg, ..);

  10. Frame Grabberの初期化解除

    関数 Fg_FreeGrabber(fg);

SDK関数の詳細な説明と解説は、https://docs.baslerweb.com/frame-grabbers/sdk/basler__fg_8h.htmlでご覧いただけます。

Framegrabber APIの導入については、https://docs.baslerweb.com/frame-grabbers/framegrabber-api.htmlをご参照ください。

生成されたサンプルSDKコードを、フレームグラバーで(前)処理された画像のさらなるソフトウェア処理のためのより大きなSDK環境に統合できます。