アプレットのパラメータ化

入門ガイドのデザインをもう一度確認してみましょう。 まだ入門ガイドのデザインを作成していない場合は、戻って最初に入門ガイド(Getting Started)を行ってください。 これまでのところ、行った変更はパラメータ名のみです。 今度は、次の Property を持つカメラからの画像を処理するようにアプレットを変更します。

  • 画像サイズ:512 x 512
  • 12 bit / ピクセル(グレースケール)
  • デュアルタップベースコンフィグレーションモードの Camera Link インターフェース

私たちの設計には、すでに CameraGrayAreaBase オペレータが備わっています。 このオペレータは mE4VD4-CL オペレータライブラリのものであり、mE4 Camera Link フレームグラバーでのみ使用できます。つまり、mE4VD4-CL ライブラリはハードウェア固有のオペレータを含むライブラリです。 CameraGrayAreaBase オペレータは、ベースコンフィグレーションモードで Camera Link を使用するグレースケールエリアスキャンカメラをサポートします。 設計内のカメラモジュールをダブルクリックして、その Property を開きます。 パラメータの 1 つに「Format」があります。ここで、特定の Camera Link フォーマットを選択できます。DualTap12Bit を選択し、変更を適用してウインドウを閉じます。 これで、私たちの設計で 12 bit カメラ画像を取得できるようになりました。

Operator CameraGrayAreaBase の Property

図 198. Operator CameraGrayAreaBase の Property


「Format」パラメータは動的であることに注意してください。つまり、ハードウェアでの設計の合成後でも値を変更できるため、複数のカメラフォーマットを柔軟に使用できます。 ただし、カメラのリンクをダブルクリックすると、リンクの Bit Width がまだ 8 bit/pixel であることがわかります。さらに、最大画像寸法が十分に大きくありません。 リンクが 8 bit しかないのに、なぜ 12 bit カメラを使用できるのか疑問に思われるかもしれません。 その答えは、カメラ画像の上位 8 bit のみが転送される、つまり利用可能なリンク bit のみが使用されるためです。 オペレータは、カメラオペレータの設定に応じて、画像から正しい bit を自動的に選択します。 詳細については、カメラオペレータのドキュメントを参照してください('CameraGrayAreaBase')。 カメラの全ビット深度を処理するために、Bit Width を 12 bit に変更します。

カメラオペレータの Link Bit Width の変更

図 199. カメラオペレータの Link Bit Width の変更


値を変更したら、[Apply] をクリックします。ご覧のとおり、カメラ、バッファ、DMA 間のリンクの色が黒から緑に変わりました。 これは、変更が受け入れられ、検証されたことを示しています。さらに、リンク property の「bit width」が画像バッファを介してバッファと DMA モジュール間のリンクに伝播されました。したがって、ユーザーはすべてのリンクで bitwidth を変更する必要はありません。 リンク property は、リンクの bitwidth を自分で変更するかユーザー入力を必要とするまで、モジュールを介して伝播されます。 バッファと DMA 間のリンクのリンク property を開くと、ここで bitwidth を変更できないことがわかります。

バッファモジュール出力リンクで Bit Width を変更できない

図 200. バッファモジュール出力リンクで Bit Width を変更できない


これは、前提となるオペレータ ImageBuffer がリンクの bit width を変更できないためです。 したがって、リンク property は、接続されているオペレータが変更を許可する場合、つまり定義上 bit width に影響を与える操作である場合にのみ変更できます。

カメラに必要な画像サイズは 512 x 512 ピクセルです。リンク property で、Max. Img Width および Max. Image Height と呼ばれる property を確認できます。 これらの property は、リンク上の最大画像寸法を表します。これが最大値です。これより小さい寸法であれば許可されます。 ただし、この制限を超える画像サイズは VisualApplets のデザインルールに違反するため、ハードウェアでアプレットを使用するときにエラーが発生する可能性があります。

画像寸法の設定は、画像寸法を小さくすることで FPGA のロジックと Memory リソースを節約できるため、常に必要な最小値に設定する必要があります。 例に戻りましょう:カメラとバッファ間のリンクのリンク property を開き、最大画像幅と高さとして 512 x 512 を選択します。 完了したら、[Apply] をクリックします。

リンク property の変更後の不正な状態

図201. リンクPropertyの変更後の不正な状態


繰り返しますが、この変更が現在のリンクおよびバッファモジュールの後にあるリンクのリンク property に直接影響したことがわかります。 さらに、バッファモジュールが赤色でマークされていることがわかります。これは、いわゆる「不正な状態」を作成したためです。つまり、 1 つ以上のリンク property がモジュール内のパラメータ設定と互換性がありません。 私たちのケースでは、ImageBuffer のパラメータ設定をリンクの設定で使用できません。 すべての property ウインドウを閉じ、デザインルールチェックを実行すると、 Ctrl+F7 次の図に示すようなエラーメッセージが表示されます。

DRC エラーメッセージ:無効なパラメータ

図 202. DRC エラーメッセージ:無効なパラメータ


エラーメッセージの 1 つをクリックすると、エラーのあるモジュールがハイライト表示されます。 これは、複数の階層に大きな設計があり、オペレータが配置されている場所をすぐに確認できない場合に非常に便利です。 次に、Buffer モジュールの property ダイアログを開きます。繰り返しますが、エラーの原因となっている 4 つのパラメータが赤色で表示されていることがわかります。

赤色のパラメータは不正な状態を示しています

図 203. 赤色のパラメータは不正な状態を示しています


また、エラーの原因も明らかになります。オペレータ内の関心領域(ROI)が、リンク上で許可されている最大画像寸法よりも大きく設定されています。これにより、オペレータのパラメータ範囲と VisualApplets のデザインルールに違反するため、エラーが発生します。 XLength および YLength パラメータを値 512 に変更することで、設計をすぐに有効な状態に戻すことができます。

デザインがほぼ完了しました。ビルドを開始し、ハードウェアでデザインを使用することができます。 ただし、もう1つ考慮すべきステップがあります。これまで、12 bitのピクセル値をDMAモジュールに直接接続していました。 これにより、各ピクセルにつき12 bitがPCに転送されます。 このフォーマットは、ピクセルが複数のバイトに分散しているため、ソフトウェアプログラムでの処理が非常に困難です。 そのため、各ピクセルは正確に1つ以上のバイトを消費する必要があります。この例では、ピクセルを16 bitに拡張します。これを行うには、 バッファとDMAモジュールの間に別の オペレータを配置する必要があります。このタスクを解決するためのオペレータがいくつか存在します。 ベースオペレータライブラリのオペレータ ConvertPixelFormatを使用します。バッファとDMAモジュールの間にオペレータを配置します。 オペレータをリンク上に直接配置すると、オペレータが自動的に挿入されます。次に、モジュール名を 「To16Bit」に変更し、 オペレータの背後にあるリンクPropertyを開きます。ご覧のとおり、モジュール出力にはデフォルトのリンクBit Widthが選択されており、 ピクセルあたり8 bitとなっています。したがって、モジュールは入力リンクのBit Widthを上書きしました。入力リンクのBit Widthの変更はすべて無視されます。 モジュールは常に出力パラメータ化された値を出力します。デフォルトのピクセルあたり8 bitではBit Widthが12から8に減少しますが、 代わりにBit Widthを増やす必要があります。そのため、リンクPropertyの値を16 bitに変更し、変更を確定するだけです。

ConvertPixelFormatオペレータにより、下位位置に4つの定数ゼロビットが挿入され、12 bitの入力ピクセルが16 bitに拡張されます。 言い換えると、4 bitの左シフトを実行しました。 ConvertPixelFormatオペレータを使用する代わりに、ShiftLeftオペレータを使用することもできます。 マウスで選択し、ポップアップメニューまたはメインメニューバーから削除を選択するか、単に Del を押して、デザインからConvertPixelFormatオペレータを削除します。 arithオペレータライブラリからShiftLeftオペレータを挿入します。これをデザインに挿入し、リンクPropertyを確認します。 ご覧のとおり、リンクのBit Widthは12 bitのままであり、リンクPropertyで変更することはできません。このオペレータの場合、 リンクのBit Widthはパラメータによって変更されます。具体的にはShiftパラメータです。パラメータ値を4に変更し、変更を適用してからリンクPropertyに戻ります。 ご覧のとおり、リンクのBit Widthが16 bitに変更されました。 まとめ:一部のリンクPropertyはリンク上で変更でき、一部はオペレータPropertyを使用して変更されます。 それぞれの例では、入力Bit Widthに関係なく出力Bit Widthを指定するため(つまり、シフト値が自動的に決定される)、一方のオペレータにはこれら2つの方法が必要です。一方、シフトオペレータはシフト値を指定するために使用されます。 ここでは、出力Bit Widthはパラメータ化された値と入力Bit Widthによって自動的に決定されます。

16Bit出力用に追加されたConvertPixelFormatオペレータ

図204. 16Bit出力用に追加されたConvertPixelFormatオペレータ


16Bit出力用に追加されたShiftLeftオペレータ

図 205. 16Bit 出力用に追加された ShiftLeft オペレーター


この例では、下位ビット位置に4つのビットを挿入しました。16 bitにするために上位ビット位置に4つのビットを追加したい場合は、 代わりにオペレータ CastBitWidthを使用できます。

ビット操作オペレータの説明と例は、オペレータリファレンスに記載されています。 'ConvertPixelFormat'、'ShiftLeft'、'ShiftRight'、および'CastBitWidth'を参照してください。

パラメータ設定とビット処理に関する実践的なガイダンスについては、Parameterizationのチュートリアル トピックおよびBit Arithmeticのチュートリアル トピックを参照してください。

これで、基本取り込みデザインの拡張が完了しました。 次に、デザインをビルドしてハードウェアで使用できます。 パラメータの設定方法と競合の解決方法について学習しました。 次のセクションでは、あらゆる種類のカメラ向けの基本的なAcquisition Appletsの一覧を示します。