カスタムオペレーターライブラリ

VisualAppletsを使用すると、VHDLで設計した画像処理モジュールをVisualAppletsオペレーターに変換することができます。

モジュールをIPコアとしてVisualAppletsに組み込みます。各IPコアが1つのオペレーターを構成します。実装後、これらのオペレーターは組み込みのVisualAppletsオペレーターと同様に動作します。このように実装されたオペレーターは、カスタムオペレーターと呼ばれます。

カスタムオペレーターをVisualAppletsのGUI上で利用できるようにするには、1つまたは複数のカスタムオペレーターを含む1つ以上のカスタムライブラリを定義する必要もあります。各カスタムオペレーターは、特定のカスタムライブラリの一部である必要があります。

ワークフロー

わずか数ステップで、新しいカスタムオペレーターをVisualAppletsに追加できます。一連のワークフロー全体をご自身で完了させることができます:

  1. カスタムオペレーターの主要なプロパティとインターフェイスをVA GUI上で直接指定します(オペレーター名、オペレーターバージョン、必要な画像入力、画像出力、Memory ポートなどの数とプロパティ)。

  2. ステップ1での入力に基づいて、オペレーターインターフェイス(ブラックボックス)用のVHDLコードと、実装をテストするためのVHDLテストベンチをVisualAppletsに生成させます。

  3. 生成されたブラックボックスとインターフェイスが一致するようにHDLコードをラップします。実装のテストには、自動生成されたテストベンチが役立ちます。

  4. 実装のネットリストを作成します。必要に応じて制約ファイルも作成します。

  5. オプションとして、オペレーターのドキュメント(オペレーターのヘルプウィンドウ用)およびシミュレーションモデル(後でカスタムオペレーターを含むVAデザインのシミュレーションを可能にするもの)を作成します。

  6. VAでカスタムオペレーターを再度編集し、生成されたネットリスト、およびオプションでヘルプファイルとシミュレーションモデルを追加します。

これらの手順の後、画像処理モジュールがカスタムオペレーターとしてVisualApplets内で直接利用できるようになり、他のオペレーターと同様に使用できます。カスタムライブラリは *.val または *.vl ファイル(ユーザーライブラリに類似)として保存されます。この形式で展開および配布することができます。

VisualApplets カスタムオペレーターの機能

このワークフローの間、VisualApplets(つまり、VisualAppletsのカスタムオペレーター機能)が2回使用されます:

  1. 関連するIPコアインターフェイス(ブラックボックスとテストベンチ)を定義するためのHDLコードのエクスポートを可能にする、VisualAppletsでのオペレータープロトタイプの生成のため。

  2. 合成、および(オプションで)シミュレーションとヘルプコンテンツに必要なファイルを追加して、オペレーターを完成させるため。

オペレータープロトタイプの生成:VAのカスタムオペレーター機能を使用すると、Visual Appletsでオペレーターをインスタンス化するためにすぐに使用できるオペレータープロトタイプを作成できます。このオペレータープロトタイプでは、生成されたオペレーターインターフェイスの通信ポートをエミュレートするための、ブラックボックスインターフェイスおよびRTLレベルのシミュレーションエンティティをエクスポートできます。その後、コーディング(つまり、ブラックボックスのインターフェイスに準拠したHDLコードの実装)と、カスタムオペレーターデザインのシミュレーションを開始できます。結果として得られるFPGAデザインを、EDIFまたはNGCネットリストに合成します。オプションとして、制約ファイルの追加、VisualAppletsの高レベルシミュレーション用のダイナミックリンクライブラリの作成、およびVisualApplets GUI用のHTMLドキュメントの記述を行います。

オペレーター定義の完了:VAのカスタムオペレーター機能を使用すると、ネットリスト、シミュレーションライブラリ、およびドキュメントファイルを指定できます。これらのファイルが追加されると、オペレーターはすぐに使用できる状態になります。

Operator Type

VisualAppletsでは、基盤となるフロー制御メカニズムに応じて、さまざまなタイプのオペレーターとポートが認識されます。オペレーターは、タイプOまたはタイプMのいずれかです。

[ヒント] カスタムオペレーターのタイプ:M

カスタムオペレーターは常にタイプMです。

同期および非同期オペレーターポート

オペレーターポートは同期または非同期にすることができます。VisualAppletsにおける同期とは、基本的には複数のポートのデータが同期して転送されることを意味し、一方、互いに非同期なポートは非整列の通信パターンをサポートします。

ポートは、共通のMソースを持つ場合、またはSYNCモジュールからソース供給されている場合にのみ同期します。そのソースとポートの間には、任意のOオペレーターの配置が存在してもかまいません。

オペレーターの入力ポート同士の関係に応じて、次のオプションを区別します:

  1. 同期入力:すべての入力ポートが互いに同期しています。出力ポートは1つあります。

  2. 非同期入力:一部の入力ポートが互いに非同期であり、すべての出力が互いに同期しています。

非同期出力を持つオペレーターは許可されません。同期入力を持つオペレーターは、出力が1つのみである必要があります。複数の出力が必要な場合は、入力を非同期として宣言する必要があります。

[ヒント] 複数の出力の定義

複数の出力を持つオペレーターを作成するには、その入力を非同期として宣言する必要があります。複数の出力は常に同期となります。

両方のクラスの例(VisualAppletsの標準オペレーター):

RemoveImage

同期入力と1つの出力を持つMオペレーター。

SYNC

非同期入力と複数の同期出力を持つMオペレーター。

インターフェースアーキテクチャ

VisualAppletsカスタムオペレーターインターフェースは、新しいオペレーターをスムーズに統合し、VisualApplets内で標準オペレーターと同様に動作するように設計されています。カスタムオペレーターには、任意の数の入力および出力ポートを定義できます。

  • Image In / Image Out: Image InおよびImage Outポートは複数の画像フォーマットをサポートしている場合があります。これらは使いやすいFIFOインターフェースによって駆動されます。FIFOはカスタムオペレーターのVA部分に常駐するため、FIFO自体ではなくフロー制御のみを実装する必要があります。

  • Memory ports: 任意の数のメモリポートを定義することもできます。これらもカスタムオペレーターのVA部分に常駐するFIFOを使用します。

  • GPIO ports: 画像ポートに加えて、例えば非同期信号をオペレーターに伝達するための汎用I/Oポートを定義できます。

  • Registers: オペレーターの最終ユーザーがオペレーターの設定を行ったり、ステータス情報にアクセスしたりできるようにするために、任意の数の書き込みおよび読み取りレジスタを定義できます。

  • Clock: クロックパルスを受信するためのポートは、すべてのカスタムオペレーターに対して自動的に設定されます。

  • Reset/Enable port: リセットまたはイネーブルコマンドを受信するためのポートは、すべてのカスタムオペレーターに対して自動的に設定されます。

以下のセクションでは、上の図に示されているさまざまなタイプのインターフェースについて詳しく説明します。

クロックインターフェース

VisualAppletsは、2つのクロック入力(デザインクロックと、デザインクロックと同期しつつ2倍の周波数を持つ2つ目のクロック)を接続します。メモリインターフェースを除くすべてのインターフェースは、デザインクロックと同期している必要があります。メモリインターフェースは、読み取りおよび/または書き込みインターフェース用にデザインクロックまたは倍周波数クロックを使用するように設定できます。

リセットおよびイネーブル

リセットおよびイネーブル入力は、オペレーターがインスタンス化されるVAプロセスの対応する「process enable」および「process reset」信号によって駆動されます。これらの信号に対する反応として、次の動作をオペレーターに必ず実装してください。

  • Resetのアサートにより、オペレーターが初期状態(init state)になります。

  • Enableのアサートにより、処理が開始されます。

  • Enableの非活性化により、処理が停止します。

  • (Enable=0の場合、オペレーターの出力FIFOは読み取られません。画像処理パイプラインの状態によっては、一部のデータが入力ポートに書き込まれ続ける場合がありますが、フロー制御によりFIFOの内容が破損することは安全に防止されます。)

  • ResetはEnable=0の場合のみアサートされます

これらの信号に対する次の動作が、カスタムオペレーターのVA部分に実装されます。

  • Resetを実行すると、すべてのポートインターフェースのFIFOが空になります。

  • ResetおよびEnableは、オペレーターのパラメータには影響しません。

  • ResetおよびEnableは、オペレーターのGPIOインターフェースには影響しません。

レジスターインターフェース

オペレーターのパラメータとステータスをやり取りするために、カスタムオペレーターには任意の数のVisualAppletsパラメータを持たせることができます。各パラメータは、カスタムオペレーターの個別のレジスタポートに変換されます。VisualAppletsがオペレーターレジスタとの間のアクセスディスパッチを処理します。

画像データ用インターフェース

画像プロトコル

カスタムオペレーターの画像入力ポートおよび画像出力ポートでサポートする画像プロトコルを定義できます。これにより、将来のオペレーターユーザーは、提供された画像プロトコルのリストから選択できるようになります。

VisualAppletsでは、オペレーターのImgInポートおよびImgOutポートで以下の画像フォーマットをサポートしています:

  • grayXxP:1ピクセルあたりのビット数がXでParallelismがPのグレースケール画像

  • rgbYxP: カラーコンポーネント(赤、緑、青)あたりY/3ビット、ParallelismがPのカラー画像

  • hsiYxP: カラーコンポーネント(HSIカラーモデル)あたりY/3ビット、ParallelismがPのカラー画像

  • hslYxP: カラーコンポーネント(HSLカラーモデル)あたりY/3ビット、ParallelismがPのカラー画像

  • hsvYxP: カラーコンポーネント(HSVカラーモデル)あたりY/3ビット、ParallelismがPのカラー画像

  • yuvYxP: カラーコンポーネント(YUVカラーモデル)あたりY/3ビット、ParallelismがPのカラー画像

  • ycrcbYxP: カラーコンポーネント(YCrCbカラーモデル)あたりY/3ビット、ParallelismがPのカラー画像

  • labYxP: カラーコンポーネント(LABカラーモデル)あたりY/3ビット、ParallelismがPのカラー画像

  • xyzYxP: カラーコンポーネント(XYZカラーモデル)あたりY/3ビット、ParallelismがPのカラー画像

さらに、画像ディメンションや、ピクセルコンポーネントが符号付きか符号なしかの情報も、オプションのサフィックスでコード化できます。

The pixel data width X is limited to 64 bit. The width Y must be a multiple of 3 and is limited to 63 bit. The parallelism P defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}.

画像データを指定されたインターフェイス幅 N のワードにパッキングするには、特定的ルールに従う必要があります:

  • すべての P ピクセルのデータは、長さ N の単一のワードに収まる必要があります。データはLSBアラインで格納されます。つまり、ピクセル幅が Z(グレーの場合は Z=X、カラーの場合は Z=Y)の場合、データは次のように分散されます:Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]。

  • RGB画像の場合、3つのカラーコンポーネントはLSBアラインでサブワード [0..Y-1] に次の順序でパッキングされます:赤はビット [0..Y/3-1]、緑はビット [Y/3..2*Y/3-1]、青はビット [2*Y/3..3*Y/3-1] を使用します。

  • YUVカラー画像の場合もRGBと同じルールが適用され、Yが赤、Uが緑、Vが青の役割を果たします。

  • HSIカラー画像の場合もRGBと同じルールが適用され、Hが赤、Sが緑、Iが青の役割を果たします。

  • LABカラー画像の場合もRGBと同じルールが適用され、Lが赤、Aが緑、Bが青の役割を果たします。

  • XYZカラー画像の場合もRGBと同じルールが適用され、Xが赤、Yが緑、Zが青の役割を果たします。

VisualAppletsでは、すべてのリンクが最大画像幅と最大画像高さのPropertyを持っています。VisualAppletsを使用すると、カスタムオペレーターがサポートする画像プロトコルごとに、最大幅と高さのオプションの制約を個別に定義できます。

画像インターフェイスポートに対して、許可される画像プロトコルのリストを定義します。このリストは、VisualAppletsの可能な画像フォーマットのサブセットを構成します(上記参照)。フォーマットは以下のPropertyによって記述できます:

  • データ型 uint または int

  • ピクセルデータ Bit Width N = [1..64]

  • グレーまたはカラーフォーマット(集約された幅 N を持つ1つまたは3つのデータコンポーネント)

  • Color Format のフレーバー(RGB、HSI、HSL、HSV、YUV、YCrCb、LAB、XYZ)

  • 2D、1D、または0D

  • Parallelism P = {1,2,4,8,16,32,64}

カーネルサイズが 1x1 であることが暗黙的に前提とされます。リストされているフォーマットにはゼロから始まる番号が付けられ、それによって ID が定義されます。

VisualApplets で最終オペレータを使用する場合、オペレータのユーザーは、該当する画像通信ポートに対してここでリストしたフォーマットのいずれかを選択できます。VisualApplets ユーザーが行った選択に応じて、対応する ID が関連するカスタムオペレータポートに出力されます。

これにより、カスタムオペレータは選択されたフォーマットに合わせて動作を適応させることができます。

画像入力ポート

画像入力ポートを使用すると、VisualApplets プロセスからカスタムオペレータへ画像データを伝送できます。これらのポートの名前は ImgIn です。カスタムオペレータが入力チャネルの設定をサポートするように設計されている場合('Image Protocols' のセクションを参照)、VisualApplets 内の対応するフォーマットパラメータによって選択された単一のポートを介して、複数の異なるプロトコルを駆動できます。インターフェイスは基本的に、FIFO と、実際に使用されるデータフォーマットの ID を提供するパラメータレジスタで構成されます。カスタムオペレータは、選択された画像フォーマットのプロトコルに従って FIFO からの読み取りを行い、画像データを解釈するように処理する必要があります。オペレータは、FIFO の充填状態に関する情報を提供するステータスピンに従って、正しいフロー制御を保証する必要があります。つまり、FIFO が空のときはデータを読み取ってはなりません。

画像インターフェイスポートについては、許可される画像フォーマットのリストを定義する必要があります。このリストは、可能な VisualApplets 画像フォーマット('Image Protocols' のセクションを参照)のサブセットを構成しており、フォーマットは次のプロパティによって記述できます:

  • データ型 uint または int

  • ピクセルデータ Bit Width N = [1..64]

  • グレーまたはカラーフォーマット(集約された幅 N を持つ1つまたは3つのデータコンポーネント)

  • Color Format のフレーバー(RGB、HSI、HSL、HSV、YUV、YCrCb、LAB、XYZ)

  • 2D、1D、または0D

  • Parallelism P = {1,2,4,8,16,32,64}

カーネルサイズが 1x1 であることが暗黙的に前提とされます。リストされているフォーマットにはゼロから始まる番号が付けられ、それによって ID が定義されます。

VisualApplets で最終オペレータを使用する場合、ユーザーは、該当する画像通信ポートに対してここでリストしたフォーマットのいずれかを選択できます。VisualApplets ユーザーが行った選択に応じて、対応する ID が関連するカスタムオペレータポートに出力されます。これにより、カスタムオペレータは選択されたフォーマットに合わせて動作を適応させることができます。

画像出力ポート

画像出力ポートを使用すると、カスタムオペレータから VisualApplets プロセスへ画像データを伝送できます。これらのポートの名前は ImgOut です。カスタムオペレータが出力チャネルの適切な設定をサポートするように設計されている場合('Image Protocols' のセクションを参照)、VisualApplets 内の対応するフォーマットパラメータによって選択された単一のポートを介して、複数の異なるプロトコルを駆動できます。インターフェイスは基本的に、FIFO と、実際に使用されるデータフォーマットの ID を提供するパラメータレジスタで構成されます。カスタムオペレータは、選択された画像フォーマットのプロトコルに従って画像データで FIFO に書き込みを行うように処理する必要があります。オペレータは、FIFO の充填状態に関する情報を提供するステータスピンに従って、正しいフロー制御を保証する必要があります。つまり、FIFO が満杯のときはデータを書き込んではなりません。

画像インターフェイスポートについては、許可される画像フォーマットのリストを定義する必要があります。このリストは、可能な VisualApplets 画像フォーマット('Image Protocols' のセクションを参照)のサブセットを構成しており、フォーマットは次のプロパティによって記述できます:

  • データ型 uint または int

  • ピクセルデータ Bit Width N = [1..64]

  • グレーまたはカラーフォーマット(集約された幅 N を持つ1つまたは3つのデータコンポーネント)

  • Color Format のフレーバー(RGB、HSI、HSL、HSV、YUV、YCrCb、LAB、XYZ)

  • 2D、1D、または0D

  • Parallelism P = {1,2,4,8,16,32,64}

カーネルサイズが 1x1 であることが暗黙的に前提とされます。リストされているフォーマットにはゼロから始まる番号が付けられ、それによって ID が定義されます。

VisualApplets で最終オペレータを使用する場合、ユーザーは、該当する画像通信ポートに対してここでリストしたフォーマットのいずれかを選択できます。VisualApplets ユーザーが行った選択に応じて、対応する ID が関連するカスタムオペレータポートに出力されます。これにより、カスタムオペレータは選択されたフォーマットに合わせて動作を適応させることができます。

汎用 I/O

汎用 I/O インターフェイスにより、カスタムオペレータの専用信号ピンを接続できます。すべての GPIO ポートは、入力または出力のいずれかであるカスタムオペレータのピンにマッピングされます。

双方向ピンはサポートされていません。VisualApplets では、対応するオペレータポートのタイプは SIGNAL です。

[ヒント] 双方向ピンはサポートされていません

GPIO ピンは入力または出力のいずれかである必要があります。双方向ピンはサポートされていません。

Memory Interface

カスタムオペレータは、1つ以上の Memory バンクにアクセスするように設定できます。該当する Memory ポートには、書き込みコマンドおよび読み取りコマンド用の FIFO のようなインターフェイスがあります。FIFO はカスタムオペレータの VA 部分に常駐するため、FIFO 自体ではなくフロー制御のみを実装する必要があります。カスタムオペレータに接続されたメモリコントローラへ FIFO のコンテンツを転送するタイミングは、VisualApplets によって完全に制御されます。

GUIによる個別カスタムオペレーターの定義

まず、新しいカスタムオペレータを説明するいくつかの詳細を入力する必要があります。

VisualApplets は、これらの詳細を使用して、カスタムオペレータ用の VHDL ブラックボックスと、シミュレーション用の対応するテストベンチを生成します。

個別カスタムオペレータの設定は、VisualApplets GUI を介して入力します。VisualApplets では、ネットリスト、シミュレーションモデル、ドキュメントに関してオペレータの仕様が不完全である場合でも、指定されたオペレータをデザインですぐに使用できるようになります。

[ヒント] カスタムライブラリファイル

含まれているすべてのオペレータを含むカスタムライブラリは、1つの <LibaryName>.val または <LibaryName>.vl ファイル。 <LibaryName> はカスタムライブラリの名前です。

このファイルは配布可能であり、VisualApplets で直接適用できます。VisualApplets の設定で指定されているカスタムライブラリディレクトリにコピーするだけです。

[ヒント] XML フォーマットでのオペレータ設定

VisualApplets は、カスタムオペレータの仕様を XML フォーマットで保存します。バージョン管理システムで処理する場合などに、カスタムライブラリから XML コンテンツをファイルにエクスポートできます。一方、カスタムオペレータを追加するために XML をインポートすることもできます('Importing and Exporting Individual Custom Operators' のセクションを参照)。この XML ファイルがどのように見えるかを知る必要はありません。ただし、確認したい場合は、'XML Format for Custom Operator Specification' のセクションを参照してください。

新しいカスタムライブラリの作成

新しいカスタムオペレータの定義を開始する前に、新しいオペレータが属するカスタムライブラリを作成する必要があります。

新しいカスタムオペレータが属するカスタムライブラリがすでに用意されている場合は、このセクションをスキップし、セクション「新しいカスタムオペレータの作成」に進んでください。

新しいカスタムライブラリを作成するには:

  1. Libraryメニューで、Create New Custom Libraryメニュー項目を選択します。

  2. 新しいカスタムライブラリの名前を入力します。

  3. デフォルトでは、新しいカスタムオペレータリブラリは以下の形式で保存されます。 *.val このライブラリをVisualAppletsバージョン3.3.2以前で開く場合は、以下を選択します。 Legacy library format (.vl).

  4. OKをクリックします。

[ヒント] 有効なC言語識別子の規約への準拠

ライブラリ名を定義する際は、有効なC言語識別子の規約に必ず従ってください。

これで新しいカスタムライブラリが作成されました。オペレータパネルのCustom Libraryタブで確認できます:

カスタムライブラリ名にマウスカーソルを合わせると、ライブラリが以下の形式で保存されているかどうかを示すツールチップが表示されます: *.vl レガシーファイル形式:

新しいカスタムライブラリを作成する際、カスタムライブラリに関連するすべてのファイルが保存されるディレクトリを指定する必要がある場合があります。これを行うには、Settings → System Settings → Pathsに移動します。

新しいカスタムオペレーターの作成

新しいカスタムオペレータを定義するには:

  1. Libraryメニューで、Edit Custom Libraryメニュー項目を選択します。

  2. 開いたサブメニューで、New Custom Library Elementを選択します。

  3. 開いたウィンドウで、ライブラリ名をダブルクリックしてカスタムライブラリを選択します。

  4. カスタムオペレータの名前を入力します:

    [ヒント] VHDL命名規則への準拠

    VA GUIでオペレータ名を定義する際は、VHDL命名規則に必ず従ってください。

    VHDLで有効な名前は次のように定義されています:

    「ポート、信号、変数、エンティティ名、アーキテクチャ本体、または類似のオブジェクトの有効な名前は、文字から始まり、その後に任意の数の文字または数字が続くもので構成され、スペースは含まれません。有効な名前は名前付き識別子とも呼ばれます。VHDLは大文字と小文字を区別しません。ただし、名前の中にアンダースコアを使用することはできますが、名前の最初や最後に使用することはできません。2つの連続するアンダースコアは許可されません。」

  5. 保存する前に、新しいオペレータのPropertyを定義する必要があります:

    新しいカスタムオペレーターのPropertyの定義についての詳細は、'Defining Basic Information about Custom Operator'を参照してください。

  6. Createボタンをクリックします。

    Edit Custom Operatorダイアログボックスが開きます。ここでカスタムオペレーターを定義できます。

  7. Saveボタンをクリックします。

これで、新しいカスタムオペレーターが所属するカスタムライブラリの下に表示されます。

新しいカスタムオペレーターを作成してVisualAppletsに保存したら、作業を中断していつでも再開できます。再開するには、Custom Libraryタブに移動し、ライブラリを開き、オペレーター名を右クリックして、サブメニューからEditを選択します。

[ヒント] 代わりにオペレーターテンプレートを使用する

あるいは、VisualAppletsのインストールに含まれているカスタムオペレーターテンプレートを使用して、新しいカスタムオペレーターを定義することもできます。テンプレートの使用方法については、'Custom Operator Template'のセクションを参照してください。

カスタムオペレーターに関する基本情報の定義

最初のステップとして、カスタムオペレーターのインターフェイスを定義します。

  1. ベンダー名を入力します。任意の文字列を入力できます。この情報は、ユーザーがオペレーターを識別するためのものです。

  2. Provide a version number for your operator, e.g., version 1.0. You can enter any number but you should comply with the version scheme <major>.<minor>. This information is intended for operator version identification by the user.

  3. Inputsタブに進みます。

画像入力ポートの定義

Inputsタブで、画像入力ポートのPropertyについて記述します。

  1. まずはじめに、カスタムオペレーターのImgInポートの入力モードを定義します。

[ヒント] 同期および非同期オペレーターポート

オペレーターポートは、同期または非同期にすることができます。VisualAppletsにおける同期とは、基本的には複数のポートのデータが同期して転送されることを意味し、一方、互いに非同期なポートは非整列の通信パターンをサポートします。

ポートは、共通のMソースを持つ場合、またはSYNCモジュールからソース供給されている場合のみ同期します。そのソースとポートの間には、任意の数のOオペレーターが存在する場合があります。

オペレーターの入力ポート同士の関係に応じて、以下のオプションに区別されます。

同期入力:

すべての入力ポートが互いに同期しています。出力ポートは1つあります。

非同期入力:

一部の入力ポートが互いに非同期であり、すべての出力が互いに同期しています。

非同期出力を持つオペレーターは許可されていません。同期入力を持つオペレーターは、単一の出力のみを持つことができます。複数の出力が必要な場合は、入力が非同期であると宣言する必要があります。

複数の出力を持つオペレーターを作成する場合は、その入力が非同期であると宣言する必要があります。複数の出力は常に同期します。

両方のクラスの例(VisualAppletsの組み込みオペレーター):

RemoveImage

同期入力と1つの出力を持つMオペレーター

SYNC

非同期入力と複数の同期出力を持つMオペレーター

1つまたは複数の画像入力ポート(ImgIn)を定義できます。各 ImgIn ポートは、指定した回数だけ使用できます。

  1. 次のボタンをクリックします Plus ボタン をクリックして、最初の画像入力(ImgIn)ポートを作成します。

  2. ImgIn ポートに名前を付け、Multiplicity フィールドで入力ポートの数を定義します。>1に設定すると、ベース名とインデックスで構成される名前を持つポートの配列が定義されます。

    すぐに、プログラムウィンドウ内のオペレーターの表現に、入力された ImgIn ポートの配列が表示されます。

  3. Properties パネルで、この ImgIn ポートでサポートされるプロトコルのプロパティを指定します。

  4. Port Width で、ImgIn ポートの幅を指定します。

  5. Fifo Depth で、少なくとも VA コアによって提供される必要がある入力データ用バッファ FIFO の深さを指定します。値は、15から1023の間で、2のべき乗から1を引いた値である必要があります。

    画像インターフェイスポートの場合、許可されるプロトコルのリストを定義します。プロトコルは、次のプロパティによって記述できます。

    • グレースケールまたはカラーフォーマット(集約された幅 N を持つ1つまたは3つのデータコンポーネント)

    • Color Format のフレーバー(RGB、HSI、HSL、HSV、YUV、YCrCb、LAB、XYZ)

    • ピクセルデータ Bit Width N = [1..64]

    • Parallelism P = {1,2,4,8,16,32,64}

    • 2D(配列)、1D(ライン)、または 0D(Raw)

    • データ型 uint または int

    • 最大画像寸法

    カーネルサイズは暗黙的に 1x1 であると仮定されます。

    リストされたプロトコルにはゼロから始まる番号が付けられ、それにより ID が定義されます(下の画像の Properties パネル内のテーブルの左側の列に表示されます)。

    複数のプロトコルを指定する場合は、カスタムオペレーターが入力チャネルの構成をサポートするように設計します。この場合、単一のポートを介して複数の異なるプロトコルを駆動できます。

    カスタムオペレーターのユーザーは、特定の ImgIn ポートで使用するプロトコルを選択できます。VA ユーザーが行った選択に従って、対応する ID が関連するカスタムオペレーターポートに出力されます。これにより、カスタムオペレーターは選択したプロトコルに動作を適応させることができます。

  6. Format で、プロトコルの Color Format を指定します。

    次の Color Format が許可されています。

    • grayXxP: ピクセルあたり X ビットおよび Parallelism P のグレースケール画像

    • rgbYxP: カラーコンポーネント(赤、緑、青)あたり Y/3 ビットおよび Parallelism P のカラー画像

    • hsiYxP: カラーコンポーネント(HSI カラーモデル)あたり Y/3 ビットおよび Parallelism P のカラー画像

    • hslYxP: カラーコンポーネント(HSL カラーモデル)あたり Y/3 ビットおよび Parallelism P のカラー画像

    • hsvYxP: カラーコンポーネント(HSV カラーモデル)あたり Y/3 ビットおよび Parallelism P のカラー画像

    • yuvYxP: カラーコンポーネント(YUV カラーモデル)あたり Y/3 ビットおよび Parallelism P のカラー画像

    • ycrcbYxP: カラー成分あたり Y/3 ビット (YCrCb カラーモデル) および Parallelism P のカラー画像

    • labYxP: カラー成分あたり Y/3 ビット (LAB カラーモデル) および Parallelism P のカラー画像

    • xyzYxP: カラー成分あたり Y/3 ビット (XYZ カラーモデル) および Parallelism P のカラー画像

  7. Pix.Width 列のフィールドをダブルクリックし、特定フォーマットのピクセルデータ幅を指定します。

    Pix.Width の値の範囲は、Format での選択によって異なります。

    Gray: ピクセルデータ幅 (以下 X と呼びます) は 64 ビットに制限されています。

    All color formats: ピクセルデータ幅 (以下 Y と呼びます) は 3 の倍数である必要があり、63 ビットに制限されています。

  8. Parall. 列のフィールドをダブルクリックし、特定フォーマットの Parallelism を指定します。

    The parallelism defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}. Packing of image data into words of a given interface width N (specified under Port Width) must follow certain rules:

    • すべての P ピクセルのデータは、長さ N の 1 つのワードに収まる必要があります。データは LSB アラインで格納されます。つまり、ピクセル幅が Z (グレーの場合は Z=X、カラーの場合は Z=Y) の場合、データは次のように分散されます: Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]。

    • RGB 画像の場合、3 つのカラーコンポーネントは LSB アラインでサブワード [0..Y-1] に次の順序でパックされます。赤はビット [0..Y/3-1]、緑はビット [Y/3..2*Y/3-1]、青はビット [2*Y/3..3*Y/3-1] を使用します。

    • HSI カラー画像の場合も RGB と同じルールが適用され、H が赤、S が緑、I が青の役割を果たします。

    • HSL カラー画像の場合も RGB と同じルールが適用され、H が赤、S が緑、L が青の役割を果たします。

    • HSV カラー画像の場合も RGB と同じルールが適用され、H が赤、S が緑、V が青の役割を果たします。

    • YUV カラー画像の場合も RGB と同じルールが適用され、Y が赤、U が緑、V が青の役割を果たします。

    • YCrCb カラー画像の場合も RGB と同じルールが適用され、Y が赤、Cr が緑、Cb が青の役割を果たします。

    • LAB カラー画像の場合も RGB と同じルールが適用され、L が赤、A が緑、B が青の役割を果たします。

    • XYZ カラー画像の場合も RGB と同じルールが適用され、X が赤、Y が緑、Z が青の役割を果たします。

  9. Dimension で、プロトコルが 2D (エリア)、1D (ライン)、0D (ロー) 画像のどれをサポートするかを指定します。

  10. Max.Width/Max.Height: これらのオプションフィールドを使用して、画像幅と画像高さの制約を定義できます。

  11. ステップ 6 ~ 10 を繰り返して、ImgIn ポートがサポートする数だけプロトコルを定義します。

  12. ステップ 1 ~ 11 を繰り返して、カスタムオペレーターに提供する数だけ ImgIn ポートを定義します。

画像出力ポートの定義

Outputs タブで、画像出力ポートのプロパティを記述します。

1 つ以上の画像出力ポート (ImgOut) を定義できます。各 ImgOut ポートは、指定した回数だけ使用できます。

  1. 次のボタンをクリックします Plus ボタン 最初の画像出力を作成するには (ImgOut)ポートを作成します。

  2. ImgOutポートに名前を付けます。

  3. Multiplicity列のフィールドをダブルクリックして、ポートの配列を作成します。Multiplicityが1より大きい場合、ベース名とインデックスで構成される名前を持つポートの配列が定義されます。

    プログラムウィンドウのオペレーター表現に、入力されたImgOutポートの配列がすぐに表示されます。

  4. Propertiesパネルで、このImgOutポートがサポートするプロトコルのプロパティを指定します。

    Port Widthで、ImgOutポートの幅を指定します。

  5. Fifo Depthで、出力データ用のバッファFIFOの深さを指定します。これは少なくともVAコアによって提供される必要があります。値は15から1023の間の2のべき乗マイナス1である必要があります。

    画像インターフェイスポートの場合、許可されるプロトコルのリストを定義します。プロトコルは、次のプロパティによって記述できます。

    • グレーまたはカラーフォーマット(集約された幅 N を持つ1つまたは3つのデータコンポーネント)

    • Color Format のフレーバー(RGB、HSI、HSL、HSV、YUV、YCrCb、LAB、XYZ)

    • ピクセルデータ Bit Width N = [1..64]

    • Parallelism P = {1,2,4,8,16,32,64}

    • 2D(配列)、1D(ライン)、または 0D(Raw)

    • データ型 uint または int

    • 最大画像寸法

    カーネルサイズは暗黙的に 1x1 であると仮定されます。

    リストされたプロトコルにはゼロから始まる番号が付けられ、それにより ID が定義されます(下の画像の Properties パネル内のテーブルの左側の列に表示されます)。

    複数のプロトコルを指定する場合は、カスタムオペレーターが入力チャネルの構成をサポートするように設計します。この場合、単一のポートを介して複数の異なるプロトコルを駆動できます。

    カスタムオペレーターのユーザーは、特定のImgOutポートで使用するプロトコルを選択できます。VAユーザーが行った選択に応じて、対応するIDが出力され、関連するカスタムオペレーターポートに出力されます。これにより、カスタムオペレーターは選択したプロトコルに合わせて動作を適応させることができます。

  6. Format で、プロトコルの Color Format を指定します。

    次の Color Format が許可されています。

    • grayXxP: ピクセルあたり X ビットおよび Parallelism P のグレースケール画像

    • rgbYxP: カラーコンポーネント(赤、緑、青)あたり Y/3 ビットおよび Parallelism P のカラー画像

    • hsiYxP: カラーコンポーネント(HSI カラーモデル)あたり Y/3 ビットおよび Parallelism P のカラー画像

    • hslYxP: カラーコンポーネント(HSL カラーモデル)あたり Y/3 ビットおよび Parallelism P のカラー画像

    • hsvYxP: カラーコンポーネント(HSV カラーモデル)あたり Y/3 ビットおよび Parallelism P のカラー画像

    • yuvYxP: カラーコンポーネント(YUV カラーモデル)あたり Y/3 ビットおよび Parallelism P のカラー画像

    • ycrcbYxP: カラー成分あたり Y/3 ビット (YCrCb カラーモデル) および Parallelism P のカラー画像

    • labYxP: カラー成分あたり Y/3 ビット (LAB カラーモデル) および Parallelism P のカラー画像

    • xyzYxP: カラー成分あたり Y/3 ビット (XYZ カラーモデル) および Parallelism P のカラー画像

  7. Pix.Width 列のフィールドをダブルクリックし、特定フォーマットのピクセルデータ幅を指定します。

    Pix.Widthの値の範囲は、Formatでの選択によって異なります。

    Gray: ピクセルデータ幅 (以下 X と呼びます) は 64 ビットに制限されています。

    All color formats: ピクセルデータ幅 (以下 Y と呼びます) は 3 の倍数である必要があり、63 ビットに制限されています。

  8. Parall. 列のフィールドをダブルクリックし、特定フォーマットの Parallelism を指定します。

    The parallelism defines the number of pixels which are contained in a single data word at the interface port. It must be chosen from following set of allowed values: P = {1, 2, 4, 8, 16, 32, 64}. Packing of image data into words of a given interface width N (specified under Port Width) must follow certain rules:

    • すべての P ピクセルのデータは、長さ N の 1 つのワードに収まる必要があります。データは LSB アラインで格納されます。つまり、ピクセル幅が Z (グレーの場合は Z=X、カラーの場合は Z=Y) の場合、データは次のように分散されます: Pixel[0]->Bits[0..Z-1] .. Pixel[P-1]->Bits[(P-1)*Z..P*Z-1]。

    • RGB 画像の場合、3 つのカラーコンポーネントは LSB アラインでサブワード [0..Y-1] に次の順序でパックされます。赤はビット [0..Y/3-1]、緑はビット [Y/3..2*Y/3-1]、青はビット [2*Y/3..3*Y/3-1] を使用します。

    • HSI カラー画像の場合も RGB と同じルールが適用され、H が赤、S が緑、I が青の役割を果たします。

    • HSL カラー画像の場合も RGB と同じルールが適用され、H が赤、S が緑、L が青の役割を果たします。

    • HSV カラー画像の場合も RGB と同じルールが適用され、H が赤、S が緑、V が青の役割を果たします。

    • YUV カラー画像の場合も RGB と同じルールが適用され、Y が赤、U が緑、V が青の役割を果たします。

    • YCrCb カラー画像の場合も RGB と同じルールが適用され、Y が赤、Cr が緑、Cb が青の役割を果たします。

    • LAB カラー画像の場合も RGB と同じルールが適用され、L が赤、A が緑、B が青の役割を果たします。

    • XYZ カラー画像の場合も RGB と同じルールが適用され、X が赤、Y が緑、Z が青の役割を果たします。

  9. Dimension で、プロトコルが 2D (エリア)、1D (ライン)、0D (ロー) 画像のどれをサポートするかを指定します。

  10. Max.Width/Max.Height: これらのオプションフィールドを使用して、画像幅と画像高さの制約を定義できます。

  11. 手順6から10を繰り返して、ImgOutポートがサポートするようにするプロトコルを必要な数だけ定義します。

  12. 手順1から11を繰り返して、カスタムオペレーターがサポートするImgOutポートを必要な数だけ定義します。

GPIOポートの定義

汎用 I/O インターフェイスにより、カスタムオペレータの専用信号ピンを接続できます。すべての GPIO ポートは、入力または出力のいずれかであるカスタムオペレータのピンにマッピングされます。

双方向ピンはサポートされていません。VisualAppletsでは、対応するオペレーターポートのタイプはSIGNALです。

  1. GPIOタブに移動します。

  2. を使用して、必要な数のGPIおよびGPOを追加します。 Plus ボタン .

  3. フィールドをダブルクリックして、特定のGPIまたはGPOに名前を付けます。

定義されたGPIおよびGPOは、プログラムウィンドウの左上パネルにあるカスタムオペレーターの表現にすぐに表示されます。

[ヒント] 双方向ピンはサポートされていません

ピンは入力または出力のいずれかです。双方向ピンはサポートされていません。

Memoryポートの定義

カスタムオペレーターは、1つ以上のメモリバンク(DRAM、SRAMなど)にアクセスするように設定できます。

すべてのメモリポートには、書き込みおよび読み取りコマンド用のFIFO様インターフェイスがあります。FIFOはカスタムオペレーターのVA部分に常駐するため、フロー制御のみを実装し、FIFOを実装する必要はありません。FIFOコンテンツをカスタムオペレーターに接続されたメモリコントローラーに転送するタイミングは、完全にVisualAppletsによって制御されます。

Memoryタブで、オペレーターが外部メモリにアクセスできるように定義できます。最大4つのポートを指定できます。オペレーターに必要なメモリインターフェイスプロパティを指定できます。

[ヒント] ターゲットプラットフォームのメモリレイアウトに準拠する

潜在的なターゲットプラットフォーム(カスタムオペレーターを含むアプレットが実行されるプラットフォーム)のメモリレイアウトに留意してください。

パラメーター名

タイプ

説明

Data Width

Integer

データ幅

Address Width

Integer

アドレス幅

Number of Write Flags (Width)

Integer

書き込みアクセスをマークするためのフラグの幅。このパラメータは >= 1 である必要があります。

Number of Read Flags (Width)

Integer

読み取りアクセスをマークするためのフラグの幅。このパラメータは >= 8 である必要があります。

SyncMode

String

このパラメータは、メモリインターフェイスクロックとデザインクロックの関係を示します。以下の値が可能です。

SyncToDesignClk – memory インターフェイスポートは次の要素と同期しています: iDesignClk.

SyncToDesignClk2x – memory インターフェイスポートは次の要素と同期しています: iDesignClk2x.

カスタムオペレーターのレジスタの定義

Registers タブで、カスタムオペレータが提供する書き込みおよび読み込みレジスタを定義できます。これらの各レジスタには、専用のオペレータパラメータを介して VisualApplets からアクセスします(パラメータ名はレジスタ名と同じになります)。

  1. Registers タブに移動します。

  2. Write Registers の下で、カスタムオペレータに持たせる書き込みレジスタを定義します。

  3. 書き込みレジスタごとに特定の幅を定義します。

  4. Read Registers の下で、カスタムオペレータに持たせる読み込みレジスタを定義します。

  5. 読み込みレジスタごとに特定の幅を定義します。

    関連するオペレータパラメータが、ダイアログウィンドウの左下パネルにすぐに表示されます:

  6. Save をクリックします。

VHDLブラックボックスとテストベンチの生成

「GUI を介した個別のカスタムオペレータの定義」セクションで説明されているすべての詳細を入力したら、実際の VHDL コーディングの準備が整います。まず、VisualApplets で VHDL ブラックボックスとテストベンチを生成する必要があります。

VHDL ブラックボックスとテストベンチの生成をトリガーするには:

  1. VisualApplets プログラムウィンドウの Library パネルで、Custom Library タブに移動します。

  2. カスタムライブラリを開き、実装するカスタムオペレータを選択します。

  3. オペレータ名を右クリックし、サブメニューから Export → VHDL を選択します。

  4. 作成した VHDL ファイルを保存するフォルダーを指定します。

これで生成が開始されます。生成が成功すると、確認ダイアログが開きます。OK をクリックして確認します。

生成されたすべてのファイルは、指定したフォルダーにあります。

オペレーターインターフェースポート

生成されたブラックボックスには、GUI を介して指定したすべてのポートが含まれています(「GUI を介した個別のカスタムオペレータの定義」を参照してください)。

この章では、生成された VHDL ブラックボックス内でこれらのポートがどのように表示されるかについての詳細な説明をご覧いただけます。

クロックシステム、リセット、およびイネーブル

VisualApplets は 2 つのクロックドメインをサポートしています。ベースデザインクロックと、そのクロックと同位相であり 2 倍の周波数を持つ派生クロックが 1 つあります。したがって、カスタムオペレータには 2 つのクロック入力があります。さらに、 Reset および Enable 上記のような入力があります。

ポート

方向

Width

説明

iDesignClk

では、

1

ベースデザインクロック

iDesignClk2x

では、

1

次の要素に同期したクロック iDesignClk ただし周波数は 2 倍

iReset

では、

1

オペレーターのリセット

iEnable

では、

1

処理の有効化

Parameter Interface

「 GUIによる個別のカスタムオペレーターの定義 」のセクションで説明されているライトレジスターポートの定義により、以下のようなインターフェイスが生成されます。ここで、 PORTID はレジスター名であり、 PORTIDWidth は定義されたレジスター幅です。

ポート

方向

Width

説明

ivReg_PORTID_D

では、

PORTIDWidth

レジスターデータ

iReg_PORTID_Wr

では、

1

ライトアクセスの信号

「カスタムオペレーターのレジスターの定義」で説明されているリードレジスターポートの定義により、同様に以下のインターフェイスが生成されます。

ポート

方向

Width

説明

ovReg_PORTID_D

出力

PORTIDWidth

レジスターデータ

iReg_PORTID_Rd

では、

1

リードアクセスの信号

画像通信インターフェース

VisualAppletsコアとカスタムオペレーターの間でデータを通信するために、「画像入力ポートの定義」で説明されている画像通信ポートを設定できます。通信は、シンプルなFIFOインターフェイスと追加のフォーマット識別子ポートを介して行われます。

ImgIn型のインターフェイス

VisualAppletsコアからカスタムオペレーターにデータを転送するためのImgInチャネルは、以下のようなインターフェイスになります。ここで、PORTIDは対応するポートタイプの名前であり、Xは同種の複数のポートを区別するためのポート番号です。

ポート

方向

Width

説明

ivPORTIDXData

では、

PORTIDWidth

カスタムオペレーターに入るデータ

oPORTIDXRead

出力

1

入力データの受け入れ

iPORTIDXEndOfLine

では、

1

行の終わりを通知する信号。このフラグが有効化されている場合、データには画素値が含まれません。

iPORTIDXEndOfFrame

では、

1

フレームの終わりを通知する信号。このフラグが有効化されている場合、データには画素値が含まれません。このフラグは、行の終わりも通知されている場合にのみアサートされます。

iPORTIDXFIFOEmpty

では、

1

バッファーFIFOが空です

ivPORTIDXFIFOCnt

では、

Ceil Log2(PORTIDFIFODepth)

バッファーFIFO内のワード数。この信号を使用して、次のようなFIFOフラグを生成できます。 Almost Empty.

ivPORTIDX_FID_D

では、

Ceil Log2(N)

現在の画像データフォーマットを通知する事前定義されたパラメータ。Nは、このポートに指定された画像フォーマットの数です。

下の図は、ImgInポートでのデータフローを示しています。ポート名の構成要素PORTIDXはImgInに置き換えられています。波形は、サイズ3x2の二次元フレームの入力を示しています。

ImgInポートが複数のO-synchronous入力ポートの一部である場合、それらすべてが同時にFIFOデータを消費する必要があります。その場合、すべてのポートのFIFO Fillレベルが正確に一致するため、オペレーターは複数のO-synchronous入力のうちの1つのFillレベルに従ってフロー制御を実装するだけで済みます。

ImgOutタイプのインターフェース

カスタムオペレーターからVisualAppletsコアへデータを転送するためのImgOutチャネルは、次のようなインターフェースにつながります。ここで、PORTIDは対応するポートタイプ名の名前であり、Xは同種の複数のポートを区別するためのポート番号です。

ポート

方向

Width

説明

ovPORTIDXData

出力

PORTIDWidth

出力データ

oPORTIDXValid

出力

1

出力データ有効

oPORTIDXEndOfLine

出力

1

行末通知として現在の書き込みアクセスを通知します。この場合、書き込みデータはピクセルデータとして解釈されません。

oPORTIDXEndOfFrame

出力

1

フレームエンド通知として現在の書き込みアクセスを通知します。この場合、書き込みデータはピクセルデータとして解釈されません。このフラグは、同時に行末ストローブと関連付ける必要があります。

iPORTIDXFIFOFull

では、

1

バッファFIFOが満杯であり、これ以上のデータは受け付けられません

ivPORTIDXFIFOCnt

では、

Ceil Log2(PORTIDFIFODepth)

バッファーFIFO内のワード数。この信号を使用して、次のようなFIFOフラグを生成できます。 Almost Full.

ivPORTIDX_FID_D

では、

Ceil Log2(N)

現在の画像データフォーマットを通知する事前定義されたパラメータ。Nは、このポートに指定された画像フォーマットの数です。

下の図は、ImgOutポートでのデータフローを示しています。波形は、3x2サイズの2次元フレームの出力を示しています。ImgOutポートが複数のO同期出力ポートの一部である場合、それらすべてが同時にデータを出力する必要があります。

Memoryインターフェース

カスタムオペレーターは、最大4つのメモリポートを持つように設定できます。生成されたインターフェースのI/Oポートには、サフィックスXが付きます。ここで、Xはメモリポートのインデックスです。

名前

方向

Width

説明

ovMemWrDataX

出力

MemDataWidthX

VisualAppletsコアを介してメモリに出力される書き込みデータ

ovMemWrFlagX

出力

MemWrFlagWidthX

書き込みフラグ出力

ovMemWrAddrX

出力

MemAddrWidthX

書き込みアドレス

oMemWrAddrValidX

出力

1

書き込みコマンドを発行

oMemWrPriorityX

出力

1

この書き込みポートの優先度を要求

iMemWrAlmostFullX

では、

1

単一の追加書き込みコマンドのみが受け付けられる場合があります

iMemWrFullX

では、

1

関連するFIFOが満杯であるため、書き込みコマンドは受け付けられません

iMemWrEmptyX

では、

1

書き込みコマンド用のFIFOが空です

ivMemWrCntX

では、

4

バッファリングされた書き込みコマンドの数

ivMemWrFlagX

では、

MemWrFlagWidthX

VisualAppletsコアからの書き込みフラグ出力

iMemWrFlagValidX

では、

1

書き込みフラグ入力有効 – 次のことを通知します: iMemWrFlagX が有効であり、これは、対応するマークが付けられていた書き込みアクセスが oMemWrFlagX 実行されたことを意味します。

ovMemRdFlagX

出力

MemRdFlagWidthX

読み取りフラグ

ovMemRdAddrX

出力

MemAddrWidthX

読み取りアドレス

oMemRdAddrValidX

出力

1

読み取りコマンドを発行

oMemRdPriorityX

出力

1

この読み取りポートの優先度を要求

iMemRdAlmostFullX

では、

1

後続の読み出しコマンドは1つのみ受け付けられます

iMemRdFullX

では、

1

対応するFIFOが満杯のため、読み出しコマンドは受け付けられません

iMemRdEmptyX

では、

1

読み出しコマンド用のFIFOが空です

ivMemRdCntX

では、

4

バッファリングされた読み出しコマンドの数

ivMemRdFlagX

では、

MemRdFlagWidthX

読み出しフラグ入力 – 有効な条件: iMemRdDataValidX がアサートされている

ivMemRdDataX

では、

MemDataWidthX

読み出しデータ入力

iMemRdDataValidX

では、

1

読み出しデータ有効

上の図は、Memory interfaceプロトコルの波形を示しています。

汎用 I/O ピン

カスタムオペレーターのインターフェース記述('Defining an Individual Custom Operator via GUI'セクション)で定義されたGPIO入力または出力信号には、生成されるオペレーターインターフェースに対応する入力ポートまたは出力ポートがあります。汎用ピンが宣言されると、次のポートが作成されます。

  • iSig_名前 次の名前のGPIO入力信号の場合: 名前.

  • oSig_名前 次の名前のGPIO出力信号の場合: 名前.

VHDLシミュレーションと検証

カスタムオペレーターモジュールを含むVisualAppletsデザインをエミュレートするため、VisualAppletsはカスタムオペレーターに接続するインターフェース用のシミュレーションテストベンチを作成します。

各インターフェースポートは個別にエミュレートされ、File I/Oによって駆動されます。シミュレーションエンティティは、以下の要素で構成されます。

  • レジスタアクセスのエミュレーション。刺激(刺激ファイル)に従って、一連のレジスタの書き込みと読み出しを行うことができます。

  • ImgIn型のポートに接続されたフレームソースのエミュレーター。ファイルによる刺激を受けて、これらの種類のモジュールはフレームデータをImgInに出力します。

  • ImgOut型のポートに接続されたフレームシンクのエミュレーター。この種のモジュールは、ImgOutに接続されているオペレーターをエミュレートします。このモジュールは、受信したデータをファイルに書き込みます。

  • Memoryポートのエミュレーター。

  • GPIOエミュレーター。入力用の各GPIO信号は、ファイルによって設定された信号ジェネレーターによって駆動されます。各GPIO信号の出力は監視され、信号の変化がレポートファイルに書き込まれます。

シミュレーションフレームワーク

RTLレベルのシミュレーションのために、VisualAppletsは次の名前のパッケージを含むVHDLファイルを作成します CustomOperator_<OPERATORNAME> ここで、 <OPERATORNAME> は、指定されたオペレーター名です。

このパッケージには、次のコンポーネントが含まれています <OPERATORNAME> および <OPERATORNAME>_TB 後者は、VisualAppletsデザインとカスタムオペレーターの間のインターフェースのテストベンチです。以下は、次の名前の簡単なカスタムオペレーターの生成されたコードを示しています RegExample (読み取りおよび書き込みレジスタポートのみで構成され、Ctrl および Status)、それぞれ4ビット幅です:

 
component 
RegExample port(
  iDesignClk: in std_logic := '0';
  iDesignClk2x: in std_logic := '0';
  iReset: in std_logic := '0';
  iEnable: in std_logic := '0';
  ivReg_Ctrl_D: in std_logic_vector(3 downto 0);
  iReg_Ctrl_Wr: in std_logic;
  ovReg_Status_D: out std_logic_vector(3 downto 0);
  iReg_Status_Rd: in std_logic
);
end component;

component 
RegExample_TB generic(
  DesignClkPeriod: time := 16 ns;
  Register_StimuliFileName: string := ""
);
end component;
 

テストベンチは、カスタムオペレータのインスタンスを作成し、プロトコルエミュレーションモジュールを各インタフェースポートに接続します。以下のセクションでは、さまざまな種類のエミュレータ、刺激ファイル(stimuli file)を介してそれらを制御する方法、および出力ファイルが生成される仕組みについて説明します。

レジスタインターフェースのエミュレーション

生成されたテストベンチは、レジスタアクセスインタフェースのエミュレータを実装します。エミュレータは、単一のプロセスを持つデザインに対処するように設定されます。書き込みおよび読み出しレジスタのアドレスは 0x4 から始まり、レジスタのアドレスは、指定されたカスタムオペレータコンポーネント内のレジスタインタフェースポートの順序(上記のサンプルコンポーネントなどのように)に従って、1 ずつインクリメントされます。 RegExample)。読み出しおよび書き込みのレジスタアドレスは個別にカウントされます。エミュレータは、エンティティパラメータによって設定されるテキストファイルによって駆動されます。 Register_StimuliFileName 上記 VHDL コードで提供されているように。

刺激ファイルには以下のコマンドが含まれる場合があります。

コマンド

説明

REM

行の残りの部分はコメントです

GRS

グローバルリセットのエミュレート

PRS

プロセスリセットのエミュレート。このコマンドの構文は以下のとおりです。 PRS <procNr> ここで、パラメータ <procNr> は常に 0 でなければなりません。

PEN

プロセスの有効化。構文は以下のとおりです。 PEN <procNr> <value> を <procNr> は常に 0 であり、 <value> は有効化状態を通知します。

WCK

クロックサイクル数の待機。構文は以下のとおりです。 WCK <clock_ticks> を <clock_ticks> クロックティック数を16進数形式で指定します

WRR

レジスタへの書き込み: WRR <wrRegAddr> <value> パラメータ: <wrRegAddr>: レジスタのアドレス(16進数) <value>:16進数のレジスタ値

RDR

レジスタからの読み出し: RDR <rdRegAddr> を <wrRegAddr> はレジスタアドレス(16進数)です。

任意のコマンドの最後のパラメータの後には、#を前置してコメントを追加できます。

次のコードは、上記のテストベンチに従ってレジスタにアクセスする刺激ファイルの例です RegExample_TB:

REM ************************************************************ 
REM Command formats:
REM GRS	-> Global reset
REM GEN <value>	-> Set global enable to <value>
REM PRS <procID>	-> Reset process <procID> (0 .. F) REM PEN <procID> <value>	
  -> Set enable of process <procID> to
<value>
REM WCK <clk_ticks>	-> Wait for <clk_ticks> clock cycles REM WRR <wrRegAddr> <value> 
  -> Write <value> to register <wrRegAddr> REM RDR <rdRegAddr>	-> Read from register <rdRegAddr>
REM ************************************************************

WCK	0004		#	wait for 4 clock cycles
GRS			#	global reset
GEN	1		#	set global enable
WCK	0001		#	wait for 1 clock tick
PRS	0		#	reset process 0
PEN	0 1		#	set enable of process 0
WCK	0002		#	wait for 2 clock ticks
WRR	0004	0000000A	#	write 0xA to address 0x4
WCK	0002		#	wait for 2 clock ticks
RDR	0004		#	read from address 0x4
WCK	FFFF			       
      

ImgIn インタフェースのエミュレーション

タイプのアワードイメージ通信インタフェースのエミュレーションは、 ImgIn カスタムオペレータに入るデータのシーケンスに関する情報を提供する刺激ファイルによって駆動されます。存在するすべての ImgIn ポートのテストベンチには、ジェネリックな <PORTIDX>_StimuliFileName where <PORTIDX> は、対応する画像入力ポートタイプの名前の後にポート番号が続いたものです。指定されたファイル内の各行は、次の構文に従う必要があります:

 <Command> <Data> <EndOfLine> <EndOfFrame> <DataValid>            
      

ここで、 <Command> は3文字のコマンドであり、 <Data> 16進数のデータワードを提供し、残りの3つのパラメータはイメージプロトコルフラグに対応します。

次の表に、利用可能なコマンドを示します:

コマンド

説明

DAT

データコマンド。このコマンドは、ポートで入力となるデータを提供します ivPORTIDXData および関連するイメージプロトコルフラグポート。

WCK

ウェイトコマンド。パラメータ <Data> は、コマンドインタプリタが一時停止するクロックティック数を提供します。

FID

FID入力を設定します。パラメータ <Data> は、ポートが設定される値を提供します。 ivPORTIDX_FID_D

任意のコマンドラインに、#で始まるコメントを追加できます。

次のコードは、3x2画像の入力を発生させる刺激ファイルの例です:

      
FID	00000001	0	0	0 #Format: Cmd Data(hex) EndOfLine EndOfFrame DataValid
DAT	00000000	0	0	0
DAT	0000001a	0	0	1
DAT	0000001b	0	0	1
DAT	0000001c	0	0	1
DAT	00000000	1	0	1
WCK	00000004	0	0	0
DAT	0000002a	0	0	1
DAT	0000002b	0	0	1

DAT	0000002c	0	0	1
DAT	00000000	1	1	1
WCK	0000FFFF	0	0	0  
      

ImgOutインターフェースのエミュレーション

タイプのアワードイメージ通信インタフェースのエミュレーションは、 ImgOut は、FID状態のシーケンスに関する情報を提供する刺激ファイルによって駆動されます。存在する任意の ImgOut ポートの場合、VA_Design_Emulatorエンティティはジェネリックを保持します <PORTIDX>_StimuliFileName ここで、 <PORTIDX> は、対応する画像出力ポートタイプの名前の後にポート番号が続いたものです。構文は、次の刺激の場合と全く同じです: ImgIn インターフェース、ただし DAT コマンドは利用できません。単純な刺激ファイルは次のようになります:

WCK 00000010 0 0 0    #Format: Command Data(hex)
FID 00000001 0 0 0
WCK 0000FFFF 0 0 0 
    

パラメータ <EndOfLine>,<EndOfFrame> および <DataValid> は実際には意味がありません。

イメージ ImgOut 生成されたテストベンチに存在するインターフェースエミュレータは、受信したデータをファイルに書き込みます。そのために、テストベンチエンティティはジェネリックを持っています <PORTIDX>_DumpFileName。シミュレーション中、指定された名前のファイルが作成され、データは以下を使用して書き込まれます DAT および WCK コマンドは、次の刺激ファイルフォーマットと完全に一致するフォーマットで行われます ImgIn インターフェースエミュレータ。

メモリ通信のエミュレーション

カスタムオペレータがメモリへのインターフェースを実装する場合、テストベンチはメモリのエミュレーションモジュールを対応するインターフェースポートに接続します。カスタムオペレータは、メモリインターフェースの特定のタイミング(読み取りデータが返されるまでの時間など)に依存してはなりません。これはVisualAppletsによって完全に制御され、プラットフォーム間や異なるデザイン間でも変動する可能性があるためです。

GPIOエミュレーション

専用入力信号のエミュレーションは、刺激ファイルによって駆動され、各信号に対して独立して行われます。そこでは、信号状態のシーケンスに関する情報が提供されます。刺激ファイルは、以下に説明する複数のコマンドで構成される場合があります。存在する出力信号ポートごとに、テストベンチエンティティはジェネリックを持っています iSig_<NAME>_StimuliFileName ここで、 <NAME> は該当するポート名です。

次の表に、利用可能なコマンドを示します:

コマンド

説明

SET

信号を設定します。このコマンドは、ポートの出力が設定される信号状態を提供します iSig_名前 に設定されます。次のコマンドは1クロックティック後に実行されます。その構文は次のとおりです: SET <value> ここで、 <value> 0または1を指定できます。

WCK

Waitコマンドの構文は以下のとおりです。 WCK <ticks> ここで、パラメーター <ticks> は、信号が一定に保たれるクロックティック数を指定します。

RST

最初から再起動します。コマンドインタプリタは、スティミュラスファイルの最初の行から再度開始します。このコマンドにはパラメータはありません。このコマンドは、ファイル内の最初のコマンドを同じクロックティックで実行するため、ギャップのないループの構築が可能になります。

STP

現在の状態で停止します。コマンドインタプリタは停止し、シミュレーションが終了するまで現在の信号状態が一定に保持されます。このコマンドにはパラメータはありません。

任意のコマンドラインに、#で始まるコメントを追加できます。

次のコードは、カスタムオペレーターの入力信号のトグルを5クロックサイクルの間はLow、7クロックサイクルの間はHighにする(次と同期して)刺激ファイルの例です。 iDesignClk:

SET 0	   # deassert output
WCK 0004	# wait for 4 clock cycles
SET 1	   # assert output
WCK 0006	# wait for 6 clock cycles
RST	     # restart from begin
      

専用の出力信号は、ダンプファイルを書き込むことによって監視されます。 oSig_<NAME>_DumpFileName ここで、

<NAME> は該当するポート名です。ファイルは、 SET および WCK 専用入力信号の刺激ファイルのコマンドと正確に対応するコマンドで構成されます。

カスタムオペレーターのソフトウェアインターフェースの定義

カスタムオペレーターをVisualAppletsに完全に統合するには、ハイレベルシミュレーションコンポーネントを提供する必要があります。ハイレベルシミュレーションコンポーネントは、エクスポートされたC関数の事前定義されたセットを持つダイナミックリンクライブラリにコンパイルする必要があります。このファイルは、オペレーター仕様のGeneral → Simulation Libraryタブに追加します。

VisualApplets内でのハイレベルシミュレーションでは、次の関数をエクスポートする必要があります。

int SimulateOPNAME (va_custom_op_sim_handle simHandle)
        

ここで、OPNAMEはカスタムオペレーターの名前です。

ハイレベルシミュレーションは、次の要件に従って実行する必要があります。

  • フレームベースシミュレーション - 各画像入力ポートで、1つ以上のフレームが利用可能かどうかを照会できます。シミュレーションの開始に必要なすべてのポートがフレームを提供できる場合、対応する出力フレームを計算し、適切な関数の呼び出しを介して出力する必要があります。1次元画像データの場合、データストリームは自動的にフレームに分割され、2Dデータと同様にシミュレーションされます。

  • ビット精度シミュレーション – 結果のフレームの計算はビット精度である必要があります。つまり、出力データはハードウェア実装によって生成されたデータと完全に一致している必要があります。

  • フローの一貫性の維持 – オペレーターの入力ポート同士が同期している場合、入力画像もそれに応じて取得される必要があります。複数の出力が定義されている場合、画像は同時に出力される必要があります。シミュレーション関数の場合、これは、1つの出力リンクにフレームが出力されるとき、シミュレーション関数が戻る前に、他のすべての出力リンクにもフレームが出力されなければならないことを意味します。

オペレーターの動作は通常、オペレーターパラメーターのセットに依存するため、これらのパラメーターは次のインターフェースを介して照会できます。

No.

機能

説明

1

vaSi_CustomOp_GetParamValue()

オペレーターパラメーターの値を取得します。

カスタムオペレーターの画像データの取得、生成、および保存を行うために、VisualAppletsによっていくつかの関数が提供されています。

No.

機能

説明

1

vaSi_CustomOp_GetInputImage()

ImgInポートで利用可能な画像を取得します。

2

vaSi_CustomOp_PutOutputImage()

画像をImgOutポートに出力します。

3

vaSi_CustomOp_InputHasImage()

ImgInポートが画像を提供できるかどうかを照会します。

4

vaSi_CustomOp_OutputReady()

ImgOutポートが画像を受け取ることができるかどうかを照会します。

5

vaSi_CustomOp_CreateImage()

新しい画像を作成します。

6

vaSi_CustomOp_DeleteImage()

画像を削除します。

7

vaSi_CustomOp_StoreImage()

後で画像を参照できるように名前を指定して、オペレーターインスタンスのローカルストレージに画像を保存します。

8

vaSi_CustomOp_GetStoredImagesCount()

オペレーターインスタンス内に保存されている画像の数を照会します。

9

vaSi_CustomOp_GetStoredImage()

インデックスを指定して保存されている画像を取得します。

10

vaSi_CustomOp_GetNameOfStoredImage()

インデックスを指定して保存されている画像の名前を取得します。

11

vaSi_CustomOp_GetStoredImageByName()

名前を指定して保存されている画像を取得します。

12

vaSi_CustomOp_CreateImageFormat()

指定されたポートに関連付けられたフォーマットによって初期化される、新しい Image Format ハンドルを作成します。

13

vaSi_CustomOp_CopyImageFormat()

指定されたフォーマットのコピーである新しい Image Format を作成します。

14

vaSi_CustomOp_DeleteImageFormat()

以前に作成した Image Format ハンドルを削除します。

Image Handle を介して画像を操作するには、次の機能を利用できます:

No.

機能

説明

1

vaSi_Image_GetFormat()

Image Format を取得します。

2

vaSi_Image_SetProperty()

フレームの Property(高さなど)を設定します。

3

vaSi_Image_GetProperty()

フレームの Property を取得します。

4

vaSi_Image_SetPixelValue()

ピクセルコンポーネントの値を設定します。

5

vaSi_Image_GetPixelValue()

ピクセルコンポーネントの値を取得します。

6

vaSi_Image_SetLineLength ()

ラインの個別の長さを設定します。

7

vaSi_Image_GetLineLength ()

個別ラインの長さを取得します。

Image Format は次の機能を使用して操作できます:

No.

機能

説明

1

vaSi_ImageFormat_SetProperty()

Image Format Property(最大幅など)を設定します。

2

vaSi_ImageFormat_GetProperty()

Image Format Property を取得します。

シミュレーション機能では、次の機能を使用して VisualApplets シミュレーションシステムにステータスメッセージ(エラーメッセージなど)を挿入できます:

No.

機能

説明

1

vaSi_CreateStatusMessage()

ステータスメッセージを作成します。

2

vaSi_SetStatusMessageProperty()

ステータスメッセージの Property(重要度など)を設定します。

3

vaSi_SendStatusMessage()

シミュレーションエンジンにステータスメッセージを送信します。

データの通信

情報の照会とパラメータの設定を行うには、ソフトウェアインターフェイスを介してデータをやり取りする必要があります。インターフェイス関数をシンプルに保ちながら型安全なインターフェイスを提供するために、データの抽象化メカニズムが実装されています。異なる型のデータを通信する必要がある場合は常に、 va_data と呼ばれるデータ構造が使用され、これにはデータへの参照と基盤となるデータ型に関する情報が含まれています。このデータ構造はユーザーによって作成されますが、以下にリストされている専用の関数によって設定されます。次の表は、この方法で処理されるデータ型を示しています:

データ型

説明

VA_ENUM

32ビット整数として指定された enum エントリ

VA_INT32

32ビット符号付き整数

VA_UINT32

32ビット符号なし整数

VA_INT64

64ビット符号付き整数

VA_UINT64

64ビット符号なし整数

VA_DOUBLE

倍精度浮動小数点数

VA_INT32_ARRAY

32ビット符号付き整数配列

VA_UINT32_ARRAY

32ビット符号なし整数配列

VA_INT64_ARRAY

64ビット符号付き整数配列

VA_UINT64_ARRAY

64ビット符号なし整数配列

VA_DOUBLE_ARRAY

倍精度浮動小数点数配列

VA_STRING

次のように指定された文字列: const char*

以前に作成された va_data データ通信を設定するための構造体 (vaData) は、次の関数を使用して実行されます:

  
va_data* va_data_enum(va_data* vaData, int32_t *data) 
va_data* va_data_int32(va_data* vaData, int32_t *data) 
va_data* va_data_uint32(va_data* vaData, uint32_t *data) 
va_data* va_data_int64(va_data* vaData, int64_t *data) 
va_data* va_data_uint64(va_data* vaData, uint64_t *data) 
va_data* va_data_double(va_data* vaData, double *data) 
va_data* va_data_int32_array(va_data* vaData, int32_t *data, size_t elementCount)
va_data* va_data_uint32_array (va_data* vaData, uint32_t *data, size_t elementCount)
va_data* va_data_int64_array (va_data* vaData, int64_t *data, size_t elementCount)
va_data* va_data_uint64_array (va_data* vaData, uint64_t *data, size_t elementCount)
va_data* va_data_double_array (va_data* vaData, double *data, size_t elementCount)
va_data* va_data_string(va_data* vaData, char data*, size_t strSize)
va_data* va_data_const_string(va_data* vaData, const char **data)
      

文字列の通信には、次の2つの方法があります。

  1. 次を介してchar配列を提供する: va_data_string()。その後、クエリされた文字列データはその配列にコピーされます。

  2. 次へのポインタを提供する: const char*。次に、タイプ情報のクエリ時に内部文字列表現へのポインタが返されます。 VA_STRING 。このアプローチを使用する場合は、返された文字列のライフタイムを確認してください。

サンプルコード:次のコードは、画像幅をクエリする例を示しています。

 
uint32_t imgWidth; 
va_data 
va_imgWidth;
va_data_double(&va_imgWidth,&imgWidth);

vaSi_Image_GetProperty(imageHandle, "Width", &va_imgWidth);  
      

その後、変数 imgWidth には要求された情報が含まれます。

インターフェース関数の詳細説明

以下では、指定されたシミュレーションインターフェイス関数のパラメータと戻り値の詳細について説明します。

機能

vaSi_CustomOp_GetParamValue

構文

int vaSi_CustomOp_GetParamValue (va_custom_op_sim_handle simHandle, const char* paramName, va_data *value)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

パラメータの名前。

パラメータ 3

クエリされた値の戻り値パラメータ。

説明

指定された名前を持つパラメータの値を返します。

戻り値

0 : 値はクエリされたデータです

<0: Cannot query parameter

機能

vaSi_CustomOp_GetInputImage

構文

int vaSi_CustomOp_GetInputImage (va_custom_op_sim_handle simHandle, const char* portName, va_image_handle *image)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

オペレーターポートの名前。

パラメータ 3

画像ハンドルの戻り値パラメータ。

説明

指定されたポートでオペレーターに入力される画像を取得し、その画像を参照するハンドルを返します。シミュレーション機能から戻る前に、この画像を次を呼び出して保存するか、 vaSi_CustomOp_StoreImage() または次を呼び出して削除する必要があります: vaSi_CustomOp_DeleteImage().

戻り値

0: OK

<0 : Cannot get image

機能

vaSi_CustomOp_PutOutputImage

構文

int vaSi_CustomOp_PutOutputImage (va_custom_op_sim_handle simHandle, const char* portName, va_image_handle imageHandle)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

オペレーターポートの名前。

パラメータ 3

画像ハンドル。

説明

指定されたポートに出力画像を出力します。

戻り値

0 : 操作が正常に完了しました

<0: Cannot output image

機能

vaSi_CustomOp_InputHasImage

構文

bool vaSi_CustomOp_InputHasImage (va_custom_op_sim_handle simHandle, const char* portName)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

オペレーター入力ポートの名前。

説明

指定された名前のポートに入力画像が存在するかどうかを返します。

戻り値

true : 画像が存在します

false : 画像はありません

機能

vaSi_CustomOp_OutputReady

構文

bool vaSi_CustomOp_OutputReady (va_custom_op_sim_handle simHandle, const char* portName)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

オペレーター出力ポートの名前。

説明

指定された名前の出力ポートが画像を受け入れることができるかどうかを返します。

戻り値

true : 次の画像の出力準備が完了しています

false : 画像を受け取る準備ができていません

機能

vaSi_CustomOp_CreateImage

構文

int vaSi_CustomOp_CreateImage (va_custom_op_sim_handle simHandle, va_image_format_handle format, va_image_handle * newImage)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

新しい画像の画像フォーマット。

パラメータ 3

画像ハンドルの戻り値パラメータ。

説明

パラメータ2で指定されたフォーマットに基づいて空白の画像を作成します。シミュレーション機能から戻る前に、この画像を次を呼び出して保存する必要があります: vaSi_CustomOp_StoreImage() または次を呼び出して削除する必要があります: vaSi_CustomOp_DeleteImage().

戻り値

0 : OK

<0 : Could not create image

機能

vaSi_CustomOp_DeleteImage

構文

int vaSi_CustomOp_DeleteImage (va_custom_op_sim_handle simHandle, va_image_handle imageHandle)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

削除する画像のハンドル。

説明

指定された画像ハンドルが参照する画像を削除します。

戻り値

0 : 操作が正常に完了しました

<0: Error during deleting image

機能

vaSi_CustomOp_StoreImage

構文

int vaSi_CustomOp_StoreImage (va_custom_op_sim_handle simHandle, va_image_handle imageHandle, const char* storeName)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

画像ハンドル。

パラメータ 3

画像を保存する名前。画像は後でこの名前でクエリできます。

説明

オペレーターシミュレーションインスタンスのローカルストレージに画像を保存します。

戻り値

0 : 操作が正常に完了しました

VA_SIM_CANNOT_STORE_IMAGE: 画像のストレージを作成できません

VA_SIM_STORE_NAME_ALREADY_USED: 名前 “storeName” は現在保存されている画像ですでに使用されています

機能

vaSi_CustomOp_GetStoredImagesCount

構文

int vaSi_CustomOp_GetStoredImagesCount (va_custom_op_sim_handle simHandle, unsigned int *count)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

画像数の戻り値パラメータ。

説明

オペレータシミュレーションインスタンス内に保存されている画像の数を返します。

戻り値

0: OK

<0: Can’t query information.

機能

vaSi_CustomOp_GetStoredImage

構文

int vaSi_CustomOp_GetStoredImage (va_custom_op_sim_handle simHandle, unsigned int index, va_image_handle *retImage)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

保存された画像の配列内のインデックス。

パラメータ 3

画像ハンドルの戻り値パラメータ。

説明

以前に保存された画像を取得します。画像はイメージストレージから削除されます。シミュレーション関数から戻る前に、この画像を再度保存するか、次を呼び出して vaSi_CustomOp_StoreImage() または次を呼び出して vaSi_CustomOp_DeleteImage().

戻り値

0 : OK

<0 : Could not get image

機能

vaSi_CustomOp_GetNameOfStoredImage

構文

const char* vaSi_CustomOp_GetNameOfStoredImage (va_custom_op_sim_handle simHandle, unsigned int index)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

保存された画像の配列内のインデックス。

説明

画像名の文字列を返します。

戻り値

否定 NULL : 値は画像名の文字列です

NULL : 名前のクエリを実行できませんでした

機能

vaSi_CustomOp_GetStoredImageByName

構文

int vaSi_CustomOp_GetStoredImageByName (va_custom_op_sim_handle simHandle, const char* storeName, va_image_handle *retImage)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

画像が保存されたときの名前。

パラメータ 3

画像ハンドルの戻り値パラメータ。

説明

指定されたストレージ名で以前に保存された画像を取得します。画像はイメージストレージから削除されます。シミュレーション関数から戻る前に、この画像を再度保存するか、次を呼び出して vaSi_CustomOp_StoreImage() または次を呼び出して削除する必要があります: vaSi_CustomOp_DeleteImage().

戻り値

0 : OK

<0 : Could not get image

機能

vaSi_CustomOp_CreateImageFormat

構文

int vaSi_CustomOp_CreateImageFormat (va_custom_op_sim_handle simHandle, const char* portName, va_image_format_handle* createdFormat)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

オペレーターポートの名前。

パラメータ 3

フォーマットハンドルの戻り値ポインタ。

説明

新しい画像フォーマットオブジェクトを作成し、対応するハンドルを返します。フォーマットは、指定された名前を持つポートのフォーマットによって初期化されます。シミュレーション関数から戻る前に、次を呼び出してフォーマットを削除する必要があります vaSi_CustomOp_DeleteImageFormat().

戻り値

0 : OK

<0 : Could not create format

機能

vaSi_CustomOp_CopyImageFormat

構文

int vaSi_CustomOp_CopyImageFormat (va_custom_op_sim_handle simHandle, va_image_format_handle formatHandle, va_image_format_handle *createdFormat)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

コピーされるフォーマットのハンドル。

パラメータ 3

フォーマットハンドルの戻り値パラメータ。

説明

新しい画像フォーマットオブジェクトを作成し、対応するハンドルを返します。フォーマットは提供されたフォーマットによって初期化されます。シミュレーション関数から戻る前に、次を呼び出してフォーマットを削除する必要があります vaSi_CustomOp_DeleteImageFormat().

戻り値

否定 NULL : 値はフォーマットハンドルです

NULL : フォーマットを作成できませんでした

機能

vaSi_CustomOp_DeleteImageFormat

構文

int vaSi_CustomOp_DeleteImageFormat (va_custom_op_sim_handle simHandle, va_image_format_handle formatHandle)

パラメータ 1

オペレータシミュレーション関数に提供されるシミュレーションハンドル。

パラメータ 2

削除されるフォーマットのハンドル。

説明

指定されたフォーマットハンドルによって参照される画像フォーマットオブジェクトを削除します。

戻り値

0: OK

<0 : Could not delete format

機能

vaSi_Image_GetFormat

構文

int vaSi_Image_GetFormat (va_image_handle imageHandle, va_image_format_handle formatHandle)

パラメータ 1

画像ハンドル。

パラメータ 2

画像のフォーマットに設定される、以前に作成されたフォーマットのハンドル。

説明

画像ハンドルによって参照される画像のフォーマットを照会します。

戻り値

0 : 操作が正常に完了しました

<0: Cannot query format

機能

vaSi_Image_SetProperty

構文

int vaSi_Image_SetProperty (va_image_handle imageHandle, const char* propType, const va_data* propData)

パラメータ 1

画像ハンドル。

パラメータ 2

設定するPropertyを指定する文字列。

パラメータ 3

新しいPropertyの設定に使用されるデータ構造へのポインタ。

説明

イメージハンドルによって参照される画像のPropertyを設定します。この関数を介して次のPropertyを設定できます:

ImgWidth: 画像幅を設定します(propData の型は VA_UINT32 です)

ImgHeight: 画像高さを設定します(propData の型は VA_UINT32)

戻り値

0 : Propertyが正常に設定されました

VA_SIM_INVALID_PARAMETER: Propertyを特定できません

VA_SIM_INVALID_TYPE: Propertyデータのフォーマットが正しくありません

VA_SIM_INVALID_VALUE: Propertyデータが無効な値です

機能

vaSi_Image_GetProperty

構文

int vaSi_Image_GetProperty (va_image_handle imageHandle, const char* propType, va_data* propData)

パラメータ 1

画像ハンドル。

パラメータ 2

クエリするPropertyを指定するEnum値。

パラメータ 3

データ通信に使用されるデータ構造へのポインタ。

説明

イメージハンドルによって参照される画像のPropertyをクエリします。以下のPropertyを利用できます:

ImgWidth: 画像幅を取得します(propData の型は VA_UINT32)

ImgHeight: 画像高さを取得します(propData の型は VA_UINT32)

戻り値

0 : Propertyが正常にクエリされました

VA_SIM_INVALID_PARAMETER: Propertyを特定できません

VA_SIM_INVALID_TYPE: Propertyデータのフォーマットが正しくありません

VA_SIM_INVALID_VALUE: Propertyデータが無効な値です

機能

vaSi_Image_SetLineLength

構文

int vaSi_Image_SetLineLength (va_image_handle imageHandle, unsigned int line, unsigned int length)

パラメータ 1

画像ハンドル。

パラメータ 2

行番号。

パラメータ 3

行の長さ。

説明

参照されている行の長さを、画像全体の幅とは異なる個別の値に設定します(画像フォーマットで定義されている最大画像幅を超えない範囲)。

戻り値

0 : 操作が正常に完了しました

<0: Cannot set line length to the given value

機能

vaSi_Image_GetLineLength

構文

int vaSi_Image_GetLineLength (va_image_handle imageHandle, unsigned int line, unsigned int *length)

パラメータ 1

画像ハンドル。

パラメータ 2

行番号。

パラメータ 3

行長の戻り値パラメータ。

説明

参照されている行の長さを返します。

戻り値

0: OK

<0: Cannot query line length

機能

vaSi_Image_SetPixelValue

構文

int vaSi_Image_SetPixelValue (va_image_handle imageHandle, uint64_t imagePos, unsigned int compIndex, int64_t value)

パラメータ 1

画像ハンドル。

パラメータ 2

フレーム内の位置。

パラメータ 3

コンポーネントインデックス。

パラメータ 4

ピクセルコンポーネント値。

説明

対応するピクセルコンポーネントを指定された値に設定します。

戻り値

0 : 操作が正常に完了しました

<0: Error setting the pixel component value

機能

vaSi_Image_GetPixelValue

構文

int vaSi_Image_GetPixelValue (va_image_handle imageHandle, uint64_t imagePos, unsigned int compIndex, int64_t *value)

パラメータ 1

画像ハンドル。

パラメータ 2

フレーム内の位置。

パラメータ 3

コンポーネントインデックス。

パラメータ 4

ピクセルコンポーネント値の戻り値パラメータ

説明

対応するピクセルコンポーネント値を返します。

戻り値

0 : 操作が正常に完了しました

<0: Error getting the pixel component value

機能

vaSi_ImageFormat_SetProperty

構文

int vaSi_ImageFormat_SetProperty (va_image_format_handle formatHandle, const char* propType, const va_data* propData)

パラメータ 1

画像フォーマットハンドル。

パラメータ 2

設定するPropertyを特定する列挙値。

パラメータ 3

新しいプロパティを保持するデータ構造へのポインタ。

説明

ハンドルによって参照される画像フォーマットのPropertyを設定します。この関数により、以下のPropertyを設定できます:

Protocol:画像プロトコルを設定します。ここで、 *propData の型は VA_ENUM であり、次のいずれかの値に設定されます:

  • VALT_IMAGE2D

  • VALT_LINE1D

ColorFormat:画像プロトコルを設定します。ここで、 *propData の型は VA_ENUM であり、次のいずれかの値に設定されます:

  • VAF_GRAY

  • VAF_COLOR

ColorFlavor:画像プロトコルを設定します。ここで、 *propData の型は VA_ENUM であり、次のいずれかの値に設定されます:

  • FL_NONE

  • FL_HSI

  • FL_YUV

  • FL_LAB

  • FL_RGB

  • FL_XYZ

Parallelism:Parallelismを設定します(型: VA_INT32)

ComponentCount:ピクセルコンポーネントの数を設定します(型: VA_INT32)

ComponentWidth:ピクセルコンポーネント幅を設定します(型: VA_INT32)

Arithmetic:ピクセルコンポーネントのArithmeticを設定します。ここで、 *propData の型は VA_ENUM であり、次のいずれかの値に設定されます:

  • UNSIGNED

  • SIGNED

MaxImgHeight:最大画像高さを設定します(型: VA_INT32)

MaxImgWidth:最大画像幅を設定します(型: VA_INT32)

戻り値

0 : Propertyが正常に設定されました

VA_SIM_INVALID_PARAMETER: Propertyを特定できません

VA_SIM_INVALID_TYPE: Propertyデータのフォーマットが正しくありません

VA_SIM_INVALID_VALUE: Propertyデータが無効な値です

機能

vaSi_ImageFormat_GetProperty

構文

int vaSi_ImageFormat_GetProperty (va_image_format_handle formatHandle, VAImageFormatProperty propType, va_data* propData)

パラメータ 1

画像フォーマットハンドル。

パラメータ 2

クエリするPropertyを指定するEnum値。

パラメータ 3

照会されたPropertyによって上書きされるデータ構造へのポインタ。

説明

ハンドルによって参照される画像フォーマットのPropertyを照会します。照会可能なPropertyは、次の関数を通じて設定可能なものと同一です vaSi_ImageFormat_SetProperty().

戻り値

0 : Propertyが正常にクエリされました

VA_SIM_INVALID_PARAMETER: Propertyを特定できません

VA_SIM_INVALID_TYPE: Propertyデータのフォーマットが正しくありません

機能

vaSi_CreateStatusMessage

構文

int vaSi_CreateStatusMessage (va_custom_op_sim_handle simHandle, va_status_handle *newMessage)

パラメータ 1

シミュレーションハンドル。

パラメータ 2

作成されたエラーメッセージの戻り値パラメータ。

説明

シミュレーションエンジンに送信できるステータスメッセージを作成します。

戻り値

0 : OK

<0: Can’t create message

機能

vaSi_SetStatusMessageProperty

構文

int vaSi_SetStatusMessageProperty (va_custom_op_sim_handle simHandle, va_status_handle message, const char* propName, const va_data* propValue)

パラメータ 1

シミュレーションハンドル。

パラメータ 2

ステータスメッセージハンドル。

パラメータ 3

設定するPropertyの名前。

パラメータ 4

新しい Property 値

説明

ステータス メッセージの Property を変更します。この関数を介して以下の Property を設定できます。

Code: エラーコードを設定します(型: VA_INT32)

Severity: データが(型: VA_ENUM)である深刻度レベルを設定します。次の値のいずれかである必要があります:

  • VA_INFO

  • VA_WARNING

  • VA_ERROR

Description: ステータスの文字列表記を設定します(型: VA_STRING)

機能

vaSi_SendStatusMessage

構文

int vaSi_SendStatusMessage (va_custom_op_sim_handle simHandle, va_status_handle message)

パラメータ 1

シミュレーションハンドル。

パラメータ 2

送信されるステータス メッセージのハンドル。

説明

シミュレーション エンジンにステータス メッセージを送信しました。

戻り値

0 : OK

<0: Can’t submit message

カスタムオペレータードキュメントの作成

オペレーターのマニュアルは HTML ファイル形式で提供する必要があります。利用可能な場合は、マニュアルを構成するすべてのファイルを General → HTML Help Files タブの下で指定する必要があります:

最初指定されたファイルは、オペレーターのマニュアルの開始点として解釈されます。このファイルの命名規則は以下の通りです: <NameOfCustomOperator>.htm.

CSS ファイルを必ず用意してください。 また、関連するすべての画像ファイルも必ず用意してください。

VisualApplets インストールディレクトリのサブディレクトリにあるオペレーターテンプレートを使用できます。 Examples/CustomLibrary/OperatorTemplate.

カスタムオペレーターの完成

インターフェイスが生成されたブラックボックスと一致するように HDL コードをラップしたら、カスタム オペレーターを完成させるための最後の手順を進める必要があります:

  1. 実装からネットリストを作成します。

    [ヒント] 設定 Add IO Buffer = NO

    ネットリストを作成する際、合成ツールが IO バッファを自動的に追加しないようにしてください。ネットリスト合成に XST を使用する場合は、次のように設定します

    Add IO Buffer = NO

    それ以外の場合、生成された NGC ファイルは VisualApplets のビルドフロー中にエラーを引き起こします。

    [ヒント] ネットリスト生成時の警告

    ネットリストの生成時、カスタム オペレーター インターフェイスの未使用の IO ポートに関する警告が出力される場合があります。未使用の IO ポートとは、オペレーター定義に従って生成されたものの、IP コアに接続されていないすべてのポートです。これらの警告は無視しても問題ありません。

    この動作の例は、以下の場所にあるすべてのカスタム オペレーターの例です Examples VisualApplets インストールのディレクトリ:

    \Examples\CustomLibrary

  2. 必要に応じて、制約ファイルも定義します(*.ucf フォーマット(Xilinx ISEを使用する場合)、 *.xdc Xilinx Vivado を使用している場合は、フォーマットを使用します)。

  3. 必要に応じて、セクション 'Defining the Custom Operator’s Software Interface' で説明されているように、オペレーターのソフトウェア インターフェイスを設定します。

  4. 必要に応じて、セクション 'Creating Custom Operator Documentation' で説明されているように、オペレーターのマニュアルを作成します。

次に、VisualApplets でオペレーター定義を完了する必要があります。そのためには、次のように進めます。

必要な手順:

  1. Coresタブに移動します。

  2. 生成したネットリストファイルを指定します。

  3. 制約事項を定義している場合は、制約ファイルを指定します。

  4. サポート対象のデバイスを指定します。デバイス名は、ターゲットプラットフォームのFPGAタイプの名前です。VisualAppletsのプロジェクト情報ボックスに表示されているものと全く同じ表記を使用してください。複数のFPGAタイプがサポートされている場合は、スペース区切りの名前リストを使用します。

    カスタムオペレーターを使用しているデザインにおいて、ターゲットプラットフォーム上のFPGAがこのリストに含まれていない場合、DRCは、そのオペレーターがターゲットプラットフォームでサポートされていないというエラーを報告します。

  5. サポートされているXilinx Tool(s)を指定します。ISEとVivadoの両方のチェックボックスをオンにすることができます。ISEで生成されたネットリストは通常Vivadoのビルドフローとも互換性がありますが、ご使用のオペレーターの実装において該当するかどうかを確認する必要があります。指定されたネットリストをサポートするツールの最小バージョン番号を定義する必要があります。通常これは、ネットリストの作成に使用したバージョンになります。

    カスタムオペレーターを使用しているデザインにおいて、指定されたツールがデザインのビルドに使用されていない場合、DRCは、そのオペレーターがターゲットプラットフォームでサポートされていないというエラーを報告します。

    [ヒント] 複数のコアの定義

    同じカスタムオペレーターに対して複数のコアを定義できます。これにより、カスタムオペレーターのデバイスおよびツール固有の実装を使用できるようになり、異なるターゲットプラットフォームに対してアップレットをビルドする際に適切な実装が選択されます。

    オプションの手順:

  6. オプションとして、オペレーターによるロジックリソースの消費量を入力します。ネットリストの生成中にXilinx toolsによって見積もられた値をそのまま入力してください。

  7. Generalタブで、シミュレーションライブラリ(カスタムオペレーターのソフトウェアインターフェイス)へのパスを指定します。

  8. 「一般」タブで、アイコンファイルへのパスを指定します。これは、カスタムオペレーターが表示されるときに使用されるアイコンを含むファイルです。 VisualApplets 。

  9. Generalタブで、カスタムオペレーターのマニュアルを構成するすべてのファイルを指定します。CSSファイルと関連するすべての画像ファイルも必ず用意してください。

  10. オペレーターのデザインを保護する場合:左下隅で、Protectedオプションを有効にします。表示されるダイアログで:

    1. 保護モードPasswordが有効になっていることを確認します。

    2. パスワードを入力します。

    3. OKをクリックします。

    カスタムオペレーターのデザインは、後からカスタムライブラリ要素のコンテキストメニューを使用していつでも保護できます。

    [ヒント] 保護オプション

    保護が有効になると、カスタムオペレーターは「ブラックボックス」になります。カスタムオペレーターのデザインを保護するには2つの方法があります:

    • パスワードによる保護:カスタムオペレーターのデザインは、その後パスワードを使用して開き、編集することができます。パスワードを持たないユーザーは、カスタムオペレーターの詳細を一切確認できません(ブラックボックス)。

    • 不可逆的な保護:保護モードとしてOne-Wayを選択した場合、カスタムオペレーターは永久にブラックボックスとなり、ご自身であっても再度開くことはできません。

    「One-Way」保護は不可逆的です:保護モードとして(Passwordではなく)One Wayを選択した場合、カスタムライブラリ要素をご自身であっても二度と開き直すことはできません。将来的に要素を拡張する予定がある場合は、代わりに必ず保護モードPasswordを選択してください。または、この保護モードを有効にする前に、要素のコピーを(階層ボックスまたは非保護オペレーターとして)保存することもできます。

  11. Saveをクリックします。

これで、新しいカスタムオペレータをデザインで使用する準備が整いました。

新しいカスタムオペレーターの使用

カスタムライブラリまたは個別カスタムオペレーターの配布

含まれているすべてのオペレータを含むカスタムライブラリは、1つの <LibaryName>.val または <LibaryName>.vl ファイル。

<LibaryName> は、カスタムライブラリの名前です。

このファイルは配布可能であり、VisualAppletsで直接適用できます。VisualAppletsの設定で指定されているCustom Libraryディレクトリにコピーするだけです( Settings → System Settings → Paths → Custom Libraries)。

  1. 新しい <LibaryName>.val または <LibaryName>.vl ファイルをVisualAppletsのインストール先のCustom Libraryディレクトリにコピーします。

  2. VisualAppletsのGUIでカスタムライブラリを再スキャンします。ライブラリ名を右クリックし、サブメニューからRescan Custom Library Directoryを選択します。

VisualAppletsのサンプルディレクトリには、すぐに使用できる CustomLibrary.vl

という名前のライブラリがあり、すべてのサンプルオペレータが含まれています。

カスタムライブラリからのアップデート

カスタムオペレータに変更を加えた場合、これらの変更はすでにカスタムオペレータを使用しているデザインには反映されません。そのため、デザイン内のカスタムオペレータインスタンスを更新する必要があります。

  1. オペレータを右クリックします。

  2. サブメニューから、Update from Custom LibraryまたはQuick Update from Custom Libraryを選択します。

カスタムライブラリの更新メカニズムは、ユーザーライブラリの場合とまったく同じです。

個別カスタムオペレーターのインポートとエクスポート

オペレータのXML定義をインポート/エクスポートすることで、個々のカスタムオペレータをインポートおよびエクスポートできます。

カスタムオペレータをインポートするには:

  1. カスタムオペレータのインポート先となるカスタムライブラリを右クリックします。

  2. サブメニューから、Import Operator → From XMLを選択します。

  3. カスタムオペレータのXML定義へのパスを指定し、Openをクリックします。

    すぐにEdit Custom Operatorダイアログが開きます:

  4. Saveをクリックします。

    保存後、インポートしたオペレータがカスタムライブラリで直接使用できるようになります:

オペレーターテンプレートと例

例

インストールディレクトリには、参照として使用できる3つの完成したカスタムオペレータがあります。サンプルは以下にあります:

\Examples\CustomLibrary

カスタムオペレーターテンプレート

インストールディレクトリには、カスタムオペレータの定義に使用できるカスタムオペレータテンプレートがあります。

\Examples\CustomLibrary カスタムオペレータテンプレートを使用するには:

  1. 新しいカスタムオペレータを作成するカスタムライブラリを右クリックします。

  2. サブメニューから、Import Operator → From XMLを選択します。

  3. オペレータテンプレートへのパスを指定します。

  4. Openをクリックします。

    すぐにEdit Custom Operatorダイアログが開きます:

  5. 新しいカスタムオペレーターに名前を付け、「GUI経由での個別のカスタムオペレーターの定義」のセクションで説明されている手順に従って進めます。

カスタムオペレーター仕様のXMLフォーマット

カスタムオペレーターの定義はXML形式で保存されます。該当するXMLファイルはオペレーターライブラリからエクスポートできるほか、以前にエクスポートしたXMLファイルを使用してオペレーターをインポートすることもできます。

以下では、パラメータ名が同名のXMLタグに関連付けられている必要なパラメータについて説明します。次のようなパラメータは: ImgInInfo 次のようなXMLエントリに変換されます:

<ImgInInfo> ImgInPortNames </ImgInInfo> ここで、 ImgInPortNames は、この場合はポート名のシーケンスとなる値です。パラメータは階層的に順序付けられています。以下の表では、背景が灰色の行によって、パラメータが配置される階層位置が示されます。

単純なパラメータ値には、次の型を指定できます:

  • 選択(Choice):許可される値は: YES または NO

  • 文字列(String):空白を含まないASCII文字列

  • Integer

  • 浮動小数点

一部のパラメータは、配列またはレコードが構造化要素として可能な値の構造として構成されます。配列は、空白で区切られた値のリストによって入力され、値自体が構造化される場合があります。レコードは、次のようなスキームによって入力されます。 RecordName はレコード識別子です。 attrX はレコードエントリの識別子であり、 attrXValue 値は次のとおりです。

<RecordName attr1=”attr1Value” .. attrN=”attrNValue”/>

例えば、次のようなレコードを提供する port 名前と幅のエントリを含む:

<port name=”flag” width=”4”/>

ルートタグXML フォーマットは オペレーター 属性付き name カスタム演算子名を指定する必要があります。

<Operator name=”XYZ”>
…
</Operator>
   
[ヒント] VHDL命名規則への準拠

VA GUIで演算子名を定義する際は、VHDLの命名規則に準拠するようにしてください。

VHDLで有効な名前は次のように定義されています:

ポート、信号、変数、エンティティ名、アーキテクチャ本体、または類似のオブジェクトの有効な名前は、文字の後に任意の数の文字または数字がスペースなしで続く形式です。有効な名前は、名前付き識別子とも呼ばれます。VHDLでは大文字と小文字は区別されません。ただし、名前の中にアンダースコアを使用することはできますが、名前の先頭または末尾には使用できません。連続する2つのアンダースコアは許可されていません。

パラメーター名

タイプ

説明

Vendor

String

ベンダー名

Version

String

オペレーターのバージョン番号。この値は自由に選択でき、ユーザーによるバージョン識別を目的としています。

Cores

文字列の配列

演算子のコアネットリストのリスト。最初の文字列は Core0 そして常に存在していなければなりません。複数のコアが利用可能な場合、それらの命名規則は次のとおりです。 Core<N> ここで、 <N> は、コアごとにインクリメントされる整数です。

LibraryFile

String

オペレーターのハイレベルシミュレーションモデルを含むソフトウェアライブラリ(ダイナミックリンクライブラリ)を含むファイルのクォーテーションで囲まれた名前。

IconFile

String

オペレーターアイコンを含むファイルのクォーテーションで囲まれた名前。

HtmlHelpFiles

文字列の配列

ヘルプコンテンツ(HTML+画像)を含む、クォーテーションで囲まれたファイル名のリスト。最初のファイルがメインのHTMLファイルとみなされます。

表 7. Operator/Info


パラメーター名

タイプ

説明

RegInInfo

文字列の配列

後で定義されるinfo構造体の名前のリスト (Operator/RegIn)。書き込みレジスタポート記述します。

RegOutInfo

文字列の配列

後で定義されるinfo構造体の名前のリスト (Operator/RegOut)。読み込みレジスタポートを記述します。

ImgInSyncMode

String

ImgInポートの入力が互いに同期しているか非同期であるかを定義する文字列。この文字列には、“Sync”または“Async”を指定できます。

ImgInInfo

文字列の配列

後で定義されるinfo構造体の名前のリスト (Operator/ImgIn)。画像入力ポートのPropertyを記述します。複数のリストエントリが同じ構造体を指している場合、同じ種類の画像入力インタフェースのポートが複数利用可能であることを意味します。

ImgOutInfo

文字列の配列

後で定義されるinfo構造体の名前のリスト (Operator/ImgOut)。画像出力ポートのPropertyを記述します。複数のリストエントリが同じ構造体を指している場合、同じ種類の画像出力インタフェースのポートが複数利用可能であることを意味します。

GPIn

文字列の配列

汎用信号入力のピン名のリスト。

GPOut

文字列の配列

汎用信号出力のピン名のリスト。

MemInfo

文字列の配列

後で定義されるinfo構造体の名前のリスト (Operator/Mem)。メモリインタフェースポートのPropertyを記述します。複数のリストエントリが同じ構造体を指している場合、同じ種類のメモリインタフェースのポートが複数利用可能であることを意味します。

表 8. Operator/IO


パラメーター名

タイプ

説明

NrLut

Integer

オペレーターによって消費されるFPGAのLUTエレメントの数

NrRegs

Integer

オペレーターによって消費されるFPGAレジスタの数

NrBlockRam

Integer

オペレーターによって消費されるブロックRAMエレメントの数

NrEmbeddedMult

Integer

オペレーターによって消費される組み込み乗算器の数

表 9. Operator/Properties


画像入力ポートの仕様は、設定ファイル内で次の構文を使用して行われます。

<ImgIn name=”IMG_IN_IDENTIFIER”> Parameters </ImgIn>;

ここで、 IMG_IN_IDENTIFIER は、上記のパラメータで提供されている画像入力ポート名の1つです Operator/IO/ImgInInfo。 コンテンツ Parameters は、画像インタフェースポートのPropertyを指定しています。

パラメーター名

タイプ

説明

Width

Integer

画像データポートの幅

FIFODepth

Integer

VAコアによって最低限提供される必要がある、入力データ用バッファFIFOの深さ。値は15から1023の間で、2のべき乗から1を引いた数である必要があります。

Formats

Array of Record

ポートでサポートされている ImgFormat 画像フォーマットレコードのリスト。画像フォーマットの命名規則については、以下を参照してください。

表 10. Operator/ImgIn


画像フォーマットレコードは、以下の構造を持っています。

<ImgFormat name=”FORMAT” maxWidth=”X1” maxHeight=”Y1” alias=”NAME1”/>

エントリ FORMAT は、後述する画像フォーマットの命名規則に従ってコード化された画像フォーマットの文字列値です。属性 maxWidth および maxHeight はオプションであり、画像サイズの制限を固定します。これらが指定されていない場合、画像サイズの制約は、後で VisualApplets 内でユーザーが自由に変更できます。属性 alias もオプションであり、指定されている場合、GUIでフォーマットが表示される際の名前を定義します。

画像出力ポートの指定は、設定ファイル内で以下の構文に従って行われます。

<ImgOut name=”IMG_OUT_IDENTIFIER”> Parameters </ImgOut>;

ここで、 IMG_OUT_IDENTIFIER は、上記のパラメータで提供されている画像出力ポート名のいずれかです Operator/IO/ImgOutInfo。 Parameters の内容は、画像インターフェースポートのPropertyを指定します。

パラメーター名

タイプ

説明

Width

Integer

画像データポートの幅

FIFODepth

Integer

VAコアによって最低限提供される必要がある、出力データ用バッファFIFOの深さ。値は15から1023の間で、2のべき乗から1を引いた数である必要があります。

Formats

Array of Record

ポートでサポートされている ImgFormat 画像フォーマットレコードのリスト。画像フォーマットの命名規則については、以下を参照してください。

表 11. Operator/ImgOut


画像フォーマットは、以下の命名規則に従ってコード化されます。

{BaseFormat}{BitsPerPixel}x{Parallelism}

オプションとして、画像寸法や符号付きコンポーネントデータの通知を表すサフィックスを付加することができます。

{BaseFormat}{BitsPerPixel}x{Parallelism}x{Dimension}{Sign}

ディメンションの意味は次のとおりです。

  • Dimension = 2 – 二次元画像とは、画像が行末およびフレームエンドマーカーの両方によって構成されていることを意味します。

  • Dimension = 1 – 一次元画像とは、入力された行をフレームに分割するフレームエンドマーカルが存在しないことを意味します。

次元が指定されていない場合、デフォルト値として2が想定されます。サフィックス {Sign} は s は符号付きピクセルコンポーネントを表し、 u は符号なし値を表します。このようなサフィックスが指定されていない場合のデフォルト値は u です。サポートされている Color Format は rgb, yuv, hsi, lab および xyz.

例:

  • gray8x4 – 8ビットピクセルおよび Parallelism 4 のグレイフォーマット

  • rgb24x2 – 3x8ビットピクセルおよび Parallelism 2 の rgb カラーフォーマット

  • gray16x1 – 16ビットピクセルのグレイフォーマット(データワード内の単一ピクセルのみ)

  • gray8x4x1 – ピクセルあたり8ビットおよび Parallelism 4 の一次元グレイ画像

  • gray16x1s – 符号付き16ビットコンポーネントを持つグレイ画像(データワード内の単一ピクセルのみ)

レジスタ入力ポートの指定は、設定ファイル内で次の構文を使用して行われます:

<RegIn name=”REG_IN_IDENTIFIER”> Parameters </RegIn>;

ここで、 REG_IN_IDENTIFIER は、上記のパラメータで提供されているレジスタ入力ポート名のいずれかです Operator/IO/RegInInfo。 Parameters は、レジスタインターフェイスポートのプロパティを指定しています:

パラメーター名

タイプ

説明

Width

Integer

レジスタポートの幅

表 12. Operator/RegIn


レジスタ出力ポートの指定は、設定ファイル内で次の構文を使用して行われます:

<RegOut name=”REG_OUT_IDENTIFIER”> Parameters </RegOut>;

ここで、 REG_OUT_IDENTIFIER は、上記のパラメータで提供されているレジスタ出力ポート名のいずれかです Operator/IO/RegOutInfo。 Parameters は、レジスタインターフェイスポートのプロパティを指定しています:

パラメーター名

タイプ

説明

Width

Integer

レジスタポートの幅

表 13. Operator/RegOut


メモリインターフェイスの指定は、設定ファイル内で次の構文を持つセクションによって行われます:

<Mem name=”MEM_IDENTIFIER”> Parameters </MEM>

ここで、 MEM_IDENTIFIER は、上記で説明したパラメータで提供されているメモリポート名のいずれかです Operator/IO/MemInfo。 コンテンツ Parameters は、メモリインターフェイスのプロパティを指定しています:

パラメーター名

タイプ

説明

DataWidth

Integer

データ幅

AddrWidth

Integer

アドレス幅

WrFlagWidth

Integer

書き込みアクセスをマークするためのフラグの幅。このパラメータは >= 1 である必要があります。

RdFlagWidth

Integer

読み取りアクセスをマークするためのフラグの幅。このパラメータは >= 8 である必要があります。

WrCntWidth

Integer

利用可能な書き込みコマンドの数を通信するためのポートの幅

RdCntWidth

Integer

利用可能な読み取りコマンドの数を通信するためのポートの幅

SyncMode

String

このパラメータは、メモリインターフェイスクロックと設計クロックの関係を示します。以下の値を使用できます。

SyncToDesignClk – メモリインターフェイスポートは以下と同期します iDesignClk.

SyncToDesignClk2x – メモリインターフェイスポートは以下と同期します iDesignClk2x.

表14. Operator/Mem


IPコアネットリストの指定は、設定ファイル内で次の構文を持つセクションによって行われます。

<Core name=”CORE_IDENTIFIER”> Parameters </Core>

ここで、 Core_IDENTIFIER は、上記で説明したパラメータで提供されているコア名の1つです。 Operator/Cores。コンテンツ Parameters は、IPコアのPropertyを指定します。

パラメーター名

タイプ

説明

Devices

文字列の配列

コアでサポートされているFPGAデバイス名のリスト(例: XC3S1600E XC3S4000を使用します。

NetlistFile

String

ネットリスト用のクォートされたUTF-8エンコードファイル名。

ConstraintsFile

String

オプションの制約ファイル用のクォートされたUTF-8エンコードファイル名。

MinVersionISE

String

指定されたネットリストを使用できるISEツールフローの最小バージョン番号(例: 14.6 (ISE 14.6用)。ISEがサポートされていない場合、この文字列は空になります。

MinVersion

String

指定されたネットリストを使用できるVivadoツールフローの最小バージョン番号(例: 2014.4 (Vivado 2014.4用)。Vivadoがサポートされていない場合、この文字列は空になります。

表15. Operator/Core