VisualAppletsを使用すると、VHDLで設計した画像処理モジュールをVisualAppletsオペレーターに変換することができます。
モジュールをIPコアとしてVisualAppletsに組み込みます。各IPコアが1つのオペレーターを構成します。実装後、これらのオペレーターは組み込みのVisualAppletsオペレーターと同様に動作します。このように実装されたオペレーターは、カスタムオペレーターと呼ばれます。

カスタムオペレーターをVisualAppletsのGUI上で利用できるようにするには、1つまたは複数のカスタムオペレーターを含む1つ以上のカスタムライブラリを定義する必要もあります。各カスタムオペレーターは、特定のカスタムライブラリの一部である必要があります。
わずか数ステップで、新しいカスタムオペレーターをVisualAppletsに追加できます。一連のワークフロー全体をご自身で完了させることができます:
-
カスタムオペレーターの主要なプロパティとインターフェイスをVA GUI上で直接指定します(オペレーター名、オペレーターバージョン、必要な画像入力、画像出力、Memory ポートなどの数とプロパティ)。
-
ステップ1での入力に基づいて、オペレーターインターフェイス(ブラックボックス)用のVHDLコードと、実装をテストするためのVHDLテストベンチをVisualAppletsに生成させます。
-
生成されたブラックボックスとインターフェイスが一致するようにHDLコードをラップします。実装のテストには、自動生成されたテストベンチが役立ちます。
-
実装のネットリストを作成します。必要に応じて制約ファイルも作成します。
-
オプションとして、オペレーターのドキュメント(オペレーターのヘルプウィンドウ用)およびシミュレーションモデル(後でカスタムオペレーターを含むVAデザインのシミュレーションを可能にするもの)を作成します。
-
VAでカスタムオペレーターを再度編集し、生成されたネットリスト、およびオプションでヘルプファイルとシミュレーションモデルを追加します。
これらの手順の後、画像処理モジュールがカスタムオペレーターとしてVisualApplets内で直接利用できるようになり、他のオペレーターと同様に使用できます。カスタムライブラリは *.val または *.vl ファイル(ユーザーライブラリに類似)として保存されます。この形式で展開および配布することができます。

このワークフローの間、VisualApplets(つまり、VisualAppletsのカスタムオペレーター機能)が2回使用されます:
-
関連するIPコアインターフェイス(ブラックボックスとテストベンチ)を定義するためのHDLコードのエクスポートを可能にする、VisualAppletsでのオペレータープロトタイプの生成のため。
-
合成、および(オプションで)シミュレーションとヘルプコンテンツに必要なファイルを追加して、オペレーターを完成させるため。
オペレータープロトタイプの生成:VAのカスタムオペレーター機能を使用すると、Visual Appletsでオペレーターをインスタンス化するためにすぐに使用できるオペレータープロトタイプを作成できます。このオペレータープロトタイプでは、生成されたオペレーターインターフェイスの通信ポートをエミュレートするための、ブラックボックスインターフェイスおよびRTLレベルのシミュレーションエンティティをエクスポートできます。その後、コーディング(つまり、ブラックボックスのインターフェイスに準拠したHDLコードの実装)と、カスタムオペレーターデザインのシミュレーションを開始できます。結果として得られるFPGAデザインを、EDIFまたはNGCネットリストに合成します。オプションとして、制約ファイルの追加、VisualAppletsの高レベルシミュレーション用のダイナミックリンクライブラリの作成、およびVisualApplets GUI用のHTMLドキュメントの記述を行います。
オペレーター定義の完了:VAのカスタムオペレーター機能を使用すると、ネットリスト、シミュレーションライブラリ、およびドキュメントファイルを指定できます。これらのファイルが追加されると、オペレーターはすぐに使用できる状態になります。
VisualAppletsでは、基盤となるフロー制御メカニズムに応じて、さまざまなタイプのオペレーターとポートが認識されます。オペレーターは、タイプOまたはタイプMのいずれかです。
![]() |
カスタムオペレーターのタイプ:M |
|---|---|
|
カスタムオペレーターは常にタイプMです。 |
オペレーターポートは同期または非同期にすることができます。VisualAppletsにおける同期とは、基本的には複数のポートのデータが同期して転送されることを意味し、一方、互いに非同期なポートは非整列の通信パターンをサポートします。
ポートは、共通のMソースを持つ場合、またはSYNCモジュールからソース供給されている場合にのみ同期します。そのソースとポートの間には、任意のOオペレーターの配置が存在してもかまいません。
オペレーターの入力ポート同士の関係に応じて、次のオプションを区別します:
-
同期入力:すべての入力ポートが互いに同期しています。出力ポートは1つあります。
-
非同期入力:一部の入力ポートが互いに非同期であり、すべての出力が互いに同期しています。
非同期出力を持つオペレーターは許可されません。同期入力を持つオペレーターは、出力が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 インターフェイスにより、カスタムオペレータの専用信号ピンを接続できます。すべての GPIO ポートは、入力または出力のいずれかであるカスタムオペレータのピンにマッピングされます。
双方向ピンはサポートされていません。VisualApplets では、対応するオペレータポートのタイプは SIGNAL です。
![]() |
双方向ピンはサポートされていません |
|---|---|
|
GPIO ピンは入力または出力のいずれかである必要があります。双方向ピンはサポートされていません。 |
まず、新しいカスタムオペレータを説明するいくつかの詳細を入力する必要があります。
VisualApplets は、これらの詳細を使用して、カスタムオペレータ用の VHDL ブラックボックスと、シミュレーション用の対応するテストベンチを生成します。
個別カスタムオペレータの設定は、VisualApplets GUI を介して入力します。VisualApplets では、ネットリスト、シミュレーションモデル、ドキュメントに関してオペレータの仕様が不完全である場合でも、指定されたオペレータをデザインですぐに使用できるようになります。
![]() |
カスタムライブラリファイル |
|---|---|
|
含まれているすべてのオペレータを含むカスタムライブラリは、1つの このファイルは配布可能であり、VisualApplets で直接適用できます。VisualApplets の設定で指定されているカスタムライブラリディレクトリにコピーするだけです。 |
![]() |
XML フォーマットでのオペレータ設定 |
|---|---|
|
VisualApplets は、カスタムオペレータの仕様を XML フォーマットで保存します。バージョン管理システムで処理する場合などに、カスタムライブラリから XML コンテンツをファイルにエクスポートできます。一方、カスタムオペレータを追加するために XML をインポートすることもできます('Importing and Exporting Individual Custom Operators' のセクションを参照)。この XML ファイルがどのように見えるかを知る必要はありません。ただし、確認したい場合は、'XML Format for Custom Operator Specification' のセクションを参照してください。 |
新しいカスタムオペレータの定義を開始する前に、新しいオペレータが属するカスタムライブラリを作成する必要があります。
新しいカスタムオペレータが属するカスタムライブラリがすでに用意されている場合は、このセクションをスキップし、セクション「新しいカスタムオペレータの作成」に進んでください。
新しいカスタムライブラリを作成するには:
-
メニューで、メニュー項目を選択します。

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

![]() |
有効なC言語識別子の規約への準拠 |
|---|---|
|
ライブラリ名を定義する際は、有効なC言語識別子の規約に必ず従ってください。 |
これで新しいカスタムライブラリが作成されました。オペレータパネルのタブで確認できます:
カスタムライブラリ名にマウスカーソルを合わせると、ライブラリが以下の形式で保存されているかどうかを示すツールチップが表示されます: *.vl レガシーファイル形式:

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

新しいカスタムオペレータを定義するには:
-
メニューで、メニュー項目を選択します。
-
開いたサブメニューで、を選択します。

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

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

![[ヒント]](../common/images/admon/tip.png)
VHDL命名規則への準拠 VA GUIでオペレータ名を定義する際は、VHDL命名規則に必ず従ってください。
VHDLで有効な名前は次のように定義されています:
「ポート、信号、変数、エンティティ名、アーキテクチャ本体、または類似のオブジェクトの有効な名前は、文字から始まり、その後に任意の数の文字または数字が続くもので構成され、スペースは含まれません。有効な名前は名前付き識別子とも呼ばれます。VHDLは大文字と小文字を区別しません。ただし、名前の中にアンダースコアを使用することはできますが、名前の最初や最後に使用することはできません。2つの連続するアンダースコアは許可されません。」
-
保存する前に、新しいオペレータのPropertyを定義する必要があります:

新しいカスタムオペレーターのPropertyの定義についての詳細は、'Defining Basic Information about Custom Operator'を参照してください。
-
ボタンをクリックします。
ダイアログボックスが開きます。ここでカスタムオペレーターを定義できます。
-
ボタンをクリックします。
これで、新しいカスタムオペレーターが所属するカスタムライブラリの下に表示されます。

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

![]() |
代わりにオペレーターテンプレートを使用する |
|---|---|
|
あるいは、VisualAppletsのインストールに含まれているカスタムオペレーターテンプレートを使用して、新しいカスタムオペレーターを定義することもできます。テンプレートの使用方法については、'Custom Operator Template'のセクションを参照してください。 |
最初のステップとして、カスタムオペレーターのインターフェイスを定義します。
-
ベンダー名を入力します。任意の文字列を入力できます。この情報は、ユーザーがオペレーターを識別するためのものです。
-
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.

-
タブに進みます。
タブで、画像入力ポートのPropertyについて記述します。
-
まずはじめに、カスタムオペレーターのImgInポートの入力モードを定義します。

![]() |
同期および非同期オペレーターポート | |||||
|---|---|---|---|---|---|---|
|
オペレーターポートは、同期または非同期にすることができます。VisualAppletsにおける同期とは、基本的には複数のポートのデータが同期して転送されることを意味し、一方、互いに非同期なポートは非整列の通信パターンをサポートします。 ポートは、共通のMソースを持つ場合、またはSYNCモジュールからソース供給されている場合のみ同期します。そのソースとポートの間には、任意の数のOオペレーターが存在する場合があります。 オペレーターの入力ポート同士の関係に応じて、以下のオプションに区別されます。
非同期出力を持つオペレーターは許可されていません。同期入力を持つオペレーターは、単一の出力のみを持つことができます。複数の出力が必要な場合は、入力が非同期であると宣言する必要があります。 複数の出力を持つオペレーターを作成する場合は、その入力が非同期であると宣言する必要があります。複数の出力は常に同期します。 両方のクラスの例(VisualAppletsの組み込みオペレーター):
|
1つまたは複数の画像入力ポート(ImgIn)を定義できます。各 ImgIn ポートは、指定した回数だけ使用できます。
-
次のボタンをクリックします ボタン
をクリックして、最初の画像入力(ImgIn)ポートを作成します。
-
ImgIn ポートに名前を付け、 フィールドで入力ポートの数を定義します。>1に設定すると、ベース名とインデックスで構成される名前を持つポートの配列が定義されます。

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

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

-
で、ImgIn ポートの幅を指定します。
-
で、少なくとも 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 が定義されます(下の画像の パネル内のテーブルの左側の列に表示されます)。
複数のプロトコルを指定する場合は、カスタムオペレーターが入力チャネルの構成をサポートするように設計します。この場合、単一のポートを介して複数の異なるプロトコルを駆動できます。
カスタムオペレーターのユーザーは、特定の ImgIn ポートで使用するプロトコルを選択できます。VA ユーザーが行った選択に従って、対応する ID が関連するカスタムオペレーターポートに出力されます。これにより、カスタムオペレーターは選択したプロトコルに動作を適応させることができます。
-
-
で、プロトコルの 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 のカラー画像
-
-
列のフィールドをダブルクリックし、特定フォーマットのピクセルデータ幅を指定します。

Pix.Width の値の範囲は、 での選択によって異なります。
Gray: ピクセルデータ幅 (以下 X と呼びます) は 64 ビットに制限されています。
All color formats: ピクセルデータ幅 (以下 Y と呼びます) は 3 の倍数である必要があり、63 ビットに制限されています。
-
列のフィールドをダブルクリックし、特定フォーマットの 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 ) 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 が青の役割を果たします。
-
-
で、プロトコルが 2D (エリア)、1D (ライン)、0D (ロー) 画像のどれをサポートするかを指定します。

-
: これらのオプションフィールドを使用して、画像幅と画像高さの制約を定義できます。
-
ステップ 6 ~ 10 を繰り返して、ImgIn ポートがサポートする数だけプロトコルを定義します。
-
ステップ 1 ~ 11 を繰り返して、カスタムオペレーターに提供する数だけ ImgIn ポートを定義します。

タブで、画像出力ポートのプロパティを記述します。
1 つ以上の画像出力ポート (ImgOut) を定義できます。各 ImgOut ポートは、指定した回数だけ使用できます。
-
次のボタンをクリックします ボタン
最初の画像出力を作成するには (ImgOut)ポートを作成します。
-
ImgOutポートに名前を付けます。
-
列のフィールドをダブルクリックして、ポートの配列を作成します。Multiplicityが1より大きい場合、ベース名とインデックスで構成される名前を持つポートの配列が定義されます。

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

-
パネルで、このImgOutポートがサポートするプロトコルのプロパティを指定します。
で、ImgOutポートの幅を指定します。
-
で、出力データ用のバッファ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 が定義されます(下の画像の パネル内のテーブルの左側の列に表示されます)。
複数のプロトコルを指定する場合は、カスタムオペレーターが入力チャネルの構成をサポートするように設計します。この場合、単一のポートを介して複数の異なるプロトコルを駆動できます。
カスタムオペレーターのユーザーは、特定のImgOutポートで使用するプロトコルを選択できます。VAユーザーが行った選択に応じて、対応するIDが出力され、関連するカスタムオペレーターポートに出力されます。これにより、カスタムオペレーターは選択したプロトコルに合わせて動作を適応させることができます。
-
-
で、プロトコルの 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 のカラー画像
-
-
Pix.Width 列のフィールドをダブルクリックし、特定フォーマットのピクセルデータ幅を指定します。

Pix.Widthの値の範囲は、での選択によって異なります。
Gray: ピクセルデータ幅 (以下 X と呼びます) は 64 ビットに制限されています。
All color formats: ピクセルデータ幅 (以下 Y と呼びます) は 3 の倍数である必要があり、63 ビットに制限されています。
-
列のフィールドをダブルクリックし、特定フォーマットの 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 ) 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 が青の役割を果たします。
-
-
で、プロトコルが 2D (エリア)、1D (ライン)、0D (ロー) 画像のどれをサポートするかを指定します。

-
: これらのオプションフィールドを使用して、画像幅と画像高さの制約を定義できます。
-
手順6から10を繰り返して、ImgOutポートがサポートするようにするプロトコルを必要な数だけ定義します。
-
手順1から11を繰り返して、カスタムオペレーターがサポートするImgOutポートを必要な数だけ定義します。
汎用 I/O インターフェイスにより、カスタムオペレータの専用信号ピンを接続できます。すべての GPIO ポートは、入力または出力のいずれかであるカスタムオペレータのピンにマッピングされます。
双方向ピンはサポートされていません。VisualAppletsでは、対応するオペレーターポートのタイプはSIGNALです。
-
タブに移動します。
-
を使用して、必要な数のGPIおよびGPOを追加します。 ボタン
.
-
フィールドをダブルクリックして、特定のGPIまたはGPOに名前を付けます。
定義されたGPIおよびGPOは、プログラムウィンドウの左上パネルにあるカスタムオペレーターの表現にすぐに表示されます。

![]() |
双方向ピンはサポートされていません |
|---|---|
|
ピンは入力または出力のいずれかです。双方向ピンはサポートされていません。 |
カスタムオペレーターは、1つ以上のメモリバンク(DRAM、SRAMなど)にアクセスするように設定できます。
すべてのメモリポートには、書き込みおよび読み取りコマンド用のFIFO様インターフェイスがあります。FIFOはカスタムオペレーターのVA部分に常駐するため、フロー制御のみを実装し、FIFOを実装する必要はありません。FIFOコンテンツをカスタムオペレーターに接続されたメモリコントローラーに転送するタイミングは、完全にVisualAppletsによって制御されます。
タブで、オペレーターが外部メモリにアクセスできるように定義できます。最大4つのポートを指定できます。オペレーターに必要なメモリインターフェイスプロパティを指定できます。
![]() |
ターゲットプラットフォームのメモリレイアウトに準拠する |
|---|---|
|
潜在的なターゲットプラットフォーム(カスタムオペレーターを含むアプレットが実行されるプラットフォーム)のメモリレイアウトに留意してください。 |

|
パラメーター名 |
タイプ |
説明 |
|---|---|---|
|
|
Integer |
データ幅 |
|
|
Integer |
アドレス幅 |
|
|
Integer |
書き込みアクセスをマークするためのフラグの幅。このパラメータは >= 1 である必要があります。 |
|
|
Integer |
読み取りアクセスをマークするためのフラグの幅。このパラメータは >= 8 である必要があります。 |
|
|
String |
このパラメータは、メモリインターフェイスクロックとデザインクロックの関係を示します。以下の値が可能です。
|
タブで、カスタムオペレータが提供する書き込みおよび読み込みレジスタを定義できます。これらの各レジスタには、専用のオペレータパラメータを介して VisualApplets からアクセスします(パラメータ名はレジスタ名と同じになります)。
-
タブに移動します。
-
の下で、カスタムオペレータに持たせる書き込みレジスタを定義します。
-
書き込みレジスタごとに特定の幅を定義します。
-
の下で、カスタムオペレータに持たせる読み込みレジスタを定義します。
-
読み込みレジスタごとに特定の幅を定義します。
関連するオペレータパラメータが、ダイアログウィンドウの左下パネルにすぐに表示されます:

-
をクリックします。
「GUI を介した個別のカスタムオペレータの定義」セクションで説明されているすべての詳細を入力したら、実際の VHDL コーディングの準備が整います。まず、VisualApplets で VHDL ブラックボックスとテストベンチを生成する必要があります。
VHDL ブラックボックスとテストベンチの生成をトリガーするには:
-
VisualApplets プログラムウィンドウの パネルで、 タブに移動します。
-
カスタムライブラリを開き、実装するカスタムオペレータを選択します。
-
オペレータ名を右クリックし、サブメニューから → を選択します。

-
作成した VHDL ファイルを保存するフォルダーを指定します。
これで生成が開始されます。生成が成功すると、確認ダイアログが開きます。 をクリックして確認します。
生成されたすべてのファイルは、指定したフォルダーにあります。
生成されたブラックボックスには、GUI を介して指定したすべてのポートが含まれています(「GUI を介した個別のカスタムオペレータの定義」を参照してください)。
この章では、生成された VHDL ブラックボックス内でこれらのポートがどのように表示されるかについての詳細な説明をご覧いただけます。
VisualApplets は 2 つのクロックドメインをサポートしています。ベースデザインクロックと、そのクロックと同位相であり 2 倍の周波数を持つ派生クロックが 1 つあります。したがって、カスタムオペレータには 2 つのクロック入力があります。さらに、 Reset および
Enable 上記のような入力があります。
|
ポート |
方向 |
Width |
説明 |
|---|---|---|---|
|
|
では、 |
1 |
ベースデザインクロック |
|
|
では、 |
1 |
次の要素に同期したクロック |
|
|
では、 |
1 |
オペレーターのリセット |
|
|
では、 |
1 |
処理の有効化 |
「 GUIによる個別のカスタムオペレーターの定義 」のセクションで説明されているライトレジスターポートの定義により、以下のようなインターフェイスが生成されます。ここで、 PORTID はレジスター名であり、
PORTIDWidth は定義されたレジスター幅です。
|
ポート |
方向 |
Width |
説明 |
|---|---|---|---|
|
|
では、 |
PORTID |
レジスターデータ |
|
|
では、 |
1 |
ライトアクセスの信号 |
「カスタムオペレーターのレジスターの定義」で説明されているリードレジスターポートの定義により、同様に以下のインターフェイスが生成されます。
|
ポート |
方向 |
Width |
説明 |
|---|---|---|---|
|
|
出力 |
PORTID |
レジスターデータ |
|
|
では、 |
1 |
リードアクセスの信号 |
VisualAppletsコアとカスタムオペレーターの間でデータを通信するために、「画像入力ポートの定義」で説明されている画像通信ポートを設定できます。通信は、シンプルなFIFOインターフェイスと追加のフォーマット識別子ポートを介して行われます。
ImgIn型のインターフェイス
VisualAppletsコアからカスタムオペレーターにデータを転送するためのImgInチャネルは、以下のようなインターフェイスになります。ここで、PORTIDは対応するポートタイプの名前であり、Xは同種の複数のポートを区別するためのポート番号です。
|
ポート |
方向 |
Width |
説明 |
|---|---|---|---|
|
|
では、 |
PORTID |
カスタムオペレーターに入るデータ |
|
|
出力 |
1 |
入力データの受け入れ |
|
|
では、 |
1 |
行の終わりを通知する信号。このフラグが有効化されている場合、データには画素値が含まれません。 |
|
|
では、 |
1 |
フレームの終わりを通知する信号。このフラグが有効化されている場合、データには画素値が含まれません。このフラグは、行の終わりも通知されている場合にのみアサートされます。 |
|
|
では、 |
1 |
バッファーFIFOが空です |
|
|
では、 |
|
バッファーFIFO内のワード数。この信号を使用して、次のようなFIFOフラグを生成できます。 |
|
|
では、 |
|
現在の画像データフォーマットを通知する事前定義されたパラメータ。Nは、このポートに指定された画像フォーマットの数です。 |
下の図は、ImgInポートでのデータフローを示しています。ポート名の構成要素PORTIDXはImgInに置き換えられています。波形は、サイズ3x2の二次元フレームの入力を示しています。
ImgInポートが複数のO-synchronous入力ポートの一部である場合、それらすべてが同時にFIFOデータを消費する必要があります。その場合、すべてのポートのFIFO Fillレベルが正確に一致するため、オペレーターは複数のO-synchronous入力のうちの1つのFillレベルに従ってフロー制御を実装するだけで済みます。

カスタムオペレーターからVisualAppletsコアへデータを転送するためのImgOutチャネルは、次のようなインターフェースにつながります。ここで、PORTIDは対応するポートタイプ名の名前であり、Xは同種の複数のポートを区別するためのポート番号です。
|
ポート |
方向 |
Width |
説明 |
|---|---|---|---|
|
|
出力 |
PORTID |
出力データ |
|
|
出力 |
1 |
出力データ有効 |
|
|
出力 |
1 |
行末通知として現在の書き込みアクセスを通知します。この場合、書き込みデータはピクセルデータとして解釈されません。 |
|
|
出力 |
1 |
フレームエンド通知として現在の書き込みアクセスを通知します。この場合、書き込みデータはピクセルデータとして解釈されません。このフラグは、同時に行末ストローブと関連付ける必要があります。 |
|
|
では、 |
1 |
バッファFIFOが満杯であり、これ以上のデータは受け付けられません |
|
|
では、 |
|
バッファーFIFO内のワード数。この信号を使用して、次のようなFIFOフラグを生成できます。 |
|
|
では、 |
|
現在の画像データフォーマットを通知する事前定義されたパラメータ。Nは、このポートに指定された画像フォーマットの数です。 |
下の図は、ImgOutポートでのデータフローを示しています。波形は、3x2サイズの2次元フレームの出力を示しています。ImgOutポートが複数のO同期出力ポートの一部である場合、それらすべてが同時にデータを出力する必要があります。

カスタムオペレーターは、最大4つのメモリポートを持つように設定できます。生成されたインターフェースのI/Oポートには、サフィックスXが付きます。ここで、Xはメモリポートのインデックスです。
|
名前 |
方向 |
Width |
説明 |
|---|---|---|---|
|
|
出力 |
|
VisualAppletsコアを介してメモリに出力される書き込みデータ |
|
|
出力 |
|
書き込みフラグ出力 |
|
|
出力 |
|
書き込みアドレス |
|
|
出力 |
1 |
書き込みコマンドを発行 |
|
|
出力 |
1 |
この書き込みポートの優先度を要求 |
|
|
では、 |
1 |
単一の追加書き込みコマンドのみが受け付けられる場合があります |
|
|
では、 |
1 |
関連するFIFOが満杯であるため、書き込みコマンドは受け付けられません |
|
|
では、 |
1 |
書き込みコマンド用のFIFOが空です |
|
|
では、 |
4 |
バッファリングされた書き込みコマンドの数 |
|
|
では、 |
|
VisualAppletsコアからの書き込みフラグ出力 |
|
|
では、 |
1 |
書き込みフラグ入力有効 – 次のことを通知します: |
|
|
出力 |
|
読み取りフラグ |
|
|
出力 |
|
読み取りアドレス |
|
|
出力 |
1 |
読み取りコマンドを発行 |
|
|
出力 |
1 |
この読み取りポートの優先度を要求 |
|
|
では、 |
1 |
後続の読み出しコマンドは1つのみ受け付けられます |
|
|
では、 |
1 |
対応するFIFOが満杯のため、読み出しコマンドは受け付けられません |
|
|
では、 |
1 |
読み出しコマンド用のFIFOが空です |
|
|
では、 |
4 |
バッファリングされた読み出しコマンドの数 |
|
|
では、 |
|
読み出しフラグ入力 – 有効な条件: |
|
|
では、 |
|
読み出しデータ入力 |
|
|
では、 |
1 |
読み出しデータ有効 |

上の図は、Memory interfaceプロトコルの波形を示しています。
カスタムオペレーターのインターフェース記述('Defining an Individual Custom Operator via GUI'セクション)で定義されたGPIO入力または出力信号には、生成されるオペレーターインターフェースに対応する入力ポートまたは出力ポートがあります。汎用ピンが宣言されると、次のポートが作成されます。
-
iSig_名前 次の名前のGPIO入力信号の場合: 名前. -
oSig_名前 次の名前のGPIO出力信号の場合: 名前.
カスタムオペレーターモジュールを含む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 コードで提供されているように。
刺激ファイルには以下のコマンドが含まれる場合があります。
|
コマンド |
説明 |
|---|---|
|
|
行の残りの部分はコメントです |
|
|
グローバルリセットのエミュレート |
|
|
プロセスリセットのエミュレート。このコマンドの構文は以下のとおりです。 |
|
|
プロセスの有効化。構文は以下のとおりです。 |
|
|
クロックサイクル数の待機。構文は以下のとおりです。 |
|
|
レジスタへの書き込み: |
|
|
レジスタからの読み出し: |
任意のコマンドの最後のパラメータの後には、#を前置してコメントを追加できます。
次のコードは、上記のテストベンチに従ってレジスタにアクセスする刺激ファイルの例です 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 ポートのテストベンチには、ジェネリックな <PORTIDX>_StimuliFileName where <PORTIDX> は、対応する画像入力ポートタイプの名前の後にポート番号が続いたものです。指定されたファイル内の各行は、次の構文に従う必要があります:
<Command> <Data> <EndOfLine> <EndOfFrame> <DataValid>
ここで、 <Command> は3文字のコマンドであり、 <Data> 16進数のデータワードを提供し、残りの3つのパラメータはイメージプロトコルフラグに対応します。
次の表に、利用可能なコマンドを示します:
|
コマンド |
説明 |
|---|---|
|
|
データコマンド。このコマンドは、ポートで入力となるデータを提供します
|
|
|
ウェイトコマンド。パラメータ |
|
|
FID入力を設定します。パラメータ |
任意のコマンドラインに、#で始まるコメントを追加できます。
次のコードは、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 は、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によって完全に制御され、プラットフォーム間や異なるデザイン間でも変動する可能性があるためです。
専用入力信号のエミュレーションは、刺激ファイルによって駆動され、各信号に対して独立して行われます。そこでは、信号状態のシーケンスに関する情報が提供されます。刺激ファイルは、以下に説明する複数のコマンドで構成される場合があります。存在する出力信号ポートごとに、テストベンチエンティティはジェネリックを持っています
iSig_<NAME>_StimuliFileName ここで、
<NAME> は該当するポート名です。
次の表に、利用可能なコマンドを示します:
|
コマンド |
説明 |
|---|---|
|
|
信号を設定します。このコマンドは、ポートの出力が設定される信号状態を提供します |
|
|
Waitコマンドの構文は以下のとおりです。 |
|
|
最初から再起動します。コマンドインタプリタは、スティミュラスファイルの最初の行から再度開始します。このコマンドにはパラメータはありません。このコマンドは、ファイル内の最初のコマンドを同じクロックティックで実行するため、ギャップのないループの構築が可能になります。 |
|
|
現在の状態で停止します。コマンドインタプリタは停止し、シミュレーションが終了するまで現在の信号状態が一定に保持されます。このコマンドにはパラメータはありません。 |
任意のコマンドラインに、#で始まるコメントを追加できます。
次のコードは、カスタムオペレーターの入力信号のトグルを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関数の事前定義されたセットを持つダイナミックリンクライブラリにコンパイルする必要があります。このファイルは、オペレーター仕様の → タブに追加します。

VisualApplets内でのハイレベルシミュレーションでは、次の関数をエクスポートする必要があります。
int SimulateOPNAME (va_custom_op_sim_handle simHandle)
ここで、OPNAMEはカスタムオペレーターの名前です。
ハイレベルシミュレーションは、次の要件に従って実行する必要があります。
-
フレームベースシミュレーション - 各画像入力ポートで、1つ以上のフレームが利用可能かどうかを照会できます。シミュレーションの開始に必要なすべてのポートがフレームを提供できる場合、対応する出力フレームを計算し、適切な関数の呼び出しを介して出力する必要があります。1次元画像データの場合、データストリームは自動的にフレームに分割され、2Dデータと同様にシミュレーションされます。
-
ビット精度シミュレーション – 結果のフレームの計算はビット精度である必要があります。つまり、出力データはハードウェア実装によって生成されたデータと完全に一致している必要があります。
-
フローの一貫性の維持 – オペレーターの入力ポート同士が同期している場合、入力画像もそれに応じて取得される必要があります。複数の出力が定義されている場合、画像は同時に出力される必要があります。シミュレーション関数の場合、これは、1つの出力リンクにフレームが出力されるとき、シミュレーション関数が戻る前に、他のすべての出力リンクにもフレームが出力されなければならないことを意味します。
オペレーターの動作は通常、オペレーターパラメーターのセットに依存するため、これらのパラメーターは次のインターフェースを介して照会できます。
|
No. |
機能 |
説明 |
|---|---|---|
|
1 |
|
オペレーターパラメーターの値を取得します。 |
カスタムオペレーターの画像データの取得、生成、および保存を行うために、VisualAppletsによっていくつかの関数が提供されています。
|
No. |
機能 |
説明 |
|---|---|---|
|
1 |
|
ImgInポートで利用可能な画像を取得します。 |
|
2 |
|
画像をImgOutポートに出力します。 |
|
3 |
|
ImgInポートが画像を提供できるかどうかを照会します。 |
|
4 |
|
ImgOutポートが画像を受け取ることができるかどうかを照会します。 |
|
5 |
|
新しい画像を作成します。 |
|
6 |
|
画像を削除します。 |
|
7 |
|
後で画像を参照できるように名前を指定して、オペレーターインスタンスのローカルストレージに画像を保存します。 |
|
8 |
|
オペレーターインスタンス内に保存されている画像の数を照会します。 |
|
9 |
|
インデックスを指定して保存されている画像を取得します。 |
|
10 |
|
インデックスを指定して保存されている画像の名前を取得します。 |
|
11 |
|
名前を指定して保存されている画像を取得します。 |
|
12 |
|
指定されたポートに関連付けられたフォーマットによって初期化される、新しい Image Format ハンドルを作成します。 |
|
13 |
|
指定されたフォーマットのコピーである新しい Image Format を作成します。 |
|
14 |
|
以前に作成した Image Format ハンドルを削除します。 |
Image Handle を介して画像を操作するには、次の機能を利用できます:
|
No. |
機能 |
説明 |
|---|---|---|
|
1 |
|
Image Format を取得します。 |
|
2 |
|
フレームの Property(高さなど)を設定します。 |
|
3 |
|
フレームの Property を取得します。 |
|
4 |
|
ピクセルコンポーネントの値を設定します。 |
|
5 |
|
ピクセルコンポーネントの値を取得します。 |
|
6 |
|
ラインの個別の長さを設定します。 |
|
7 |
|
個別ラインの長さを取得します。 |
Image Format は次の機能を使用して操作できます:
|
No. |
機能 |
説明 |
|---|---|---|
|
1 |
|
Image Format Property(最大幅など)を設定します。 |
|
2 |
|
Image Format Property を取得します。 |
シミュレーション機能では、次の機能を使用して VisualApplets シミュレーションシステムにステータスメッセージ(エラーメッセージなど)を挿入できます:
|
No. |
機能 |
説明 |
|---|---|---|
|
1 |
|
ステータスメッセージを作成します。 |
|
2 |
|
ステータスメッセージの Property(重要度など)を設定します。 |
|
3 |
|
シミュレーションエンジンにステータスメッセージを送信します。 |
情報の照会とパラメータの設定を行うには、ソフトウェアインターフェイスを介してデータをやり取りする必要があります。インターフェイス関数をシンプルに保ちながら型安全なインターフェイスを提供するために、データの抽象化メカニズムが実装されています。異なる型のデータを通信する必要がある場合は常に、 va_data と呼ばれるデータ構造が使用され、これにはデータへの参照と基盤となるデータ型に関する情報が含まれています。このデータ構造はユーザーによって作成されますが、以下にリストされている専用の関数によって設定されます。次の表は、この方法で処理されるデータ型を示しています:
|
データ型 |
説明 |
|---|---|
|
|
32ビット整数として指定された enum エントリ |
|
|
32ビット符号付き整数 |
|
|
32ビット符号なし整数 |
|
|
64ビット符号付き整数 |
|
|
64ビット符号なし整数 |
|
|
倍精度浮動小数点数 |
|
|
32ビット符号付き整数配列 |
|
|
32ビット符号なし整数配列 |
|
|
64ビット符号付き整数配列 |
|
|
64ビット符号なし整数配列 |
|
|
倍精度浮動小数点数配列 |
|
|
次のように指定された文字列: |
以前に作成された 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つの方法があります。
-
次を介してchar配列を提供する:
va_data_string()。その後、クエリされた文字列データはその配列にコピーされます。 -
次へのポインタを提供する:
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 には要求された情報が含まれます。
以下では、指定されたシミュレーションインターフェイス関数のパラメータと戻り値の詳細について説明します。
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
パラメータの名前。 |
|
パラメータ 3 |
クエリされた値の戻り値パラメータ。 |
|
説明 |
指定された名前を持つパラメータの値を返します。 |
|
戻り値 |
0 : 値はクエリされたデータです <0: Cannot query parameter |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
オペレーターポートの名前。 |
|
パラメータ 3 |
画像ハンドルの戻り値パラメータ。 |
|
説明 |
指定されたポートでオペレーターに入力される画像を取得し、その画像を参照するハンドルを返します。シミュレーション機能から戻る前に、この画像を次を呼び出して保存するか、 |
|
戻り値 |
0: OK <0 : Cannot get image |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
オペレーターポートの名前。 |
|
パラメータ 3 |
画像ハンドル。 |
|
説明 |
指定されたポートに出力画像を出力します。 |
|
戻り値 |
0 : 操作が正常に完了しました <0: Cannot output image |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
オペレーター入力ポートの名前。 |
|
説明 |
指定された名前のポートに入力画像が存在するかどうかを返します。 |
|
戻り値 |
true : 画像が存在します false : 画像はありません |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
オペレーター出力ポートの名前。 |
|
説明 |
指定された名前の出力ポートが画像を受け入れることができるかどうかを返します。 |
|
戻り値 |
true : 次の画像の出力準備が完了しています false : 画像を受け取る準備ができていません |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
新しい画像の画像フォーマット。 |
|
パラメータ 3 |
画像ハンドルの戻り値パラメータ。 |
|
説明 |
パラメータ2で指定されたフォーマットに基づいて空白の画像を作成します。シミュレーション機能から戻る前に、この画像を次を呼び出して保存する必要があります:
|
|
戻り値 |
0 : OK <0 : Could not create image |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
削除する画像のハンドル。 |
|
説明 |
指定された画像ハンドルが参照する画像を削除します。 |
|
戻り値 |
0 : 操作が正常に完了しました <0: Error during deleting image |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
画像ハンドル。 |
|
パラメータ 3 |
画像を保存する名前。画像は後でこの名前でクエリできます。 |
|
説明 |
オペレーターシミュレーションインスタンスのローカルストレージに画像を保存します。 |
|
戻り値 |
0 : 操作が正常に完了しました |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
画像数の戻り値パラメータ。 |
|
説明 |
オペレータシミュレーションインスタンス内に保存されている画像の数を返します。 |
|
戻り値 |
0: OK <0: Can’t query information. |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
保存された画像の配列内のインデックス。 |
|
パラメータ 3 |
画像ハンドルの戻り値パラメータ。 |
|
説明 |
以前に保存された画像を取得します。画像はイメージストレージから削除されます。シミュレーション関数から戻る前に、この画像を再度保存するか、次を呼び出して |
|
戻り値 |
0 : OK <0 : Could not get image |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
保存された画像の配列内のインデックス。 |
|
説明 |
画像名の文字列を返します。 |
|
戻り値 |
否定 |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
画像が保存されたときの名前。 |
|
パラメータ 3 |
画像ハンドルの戻り値パラメータ。 |
|
説明 |
指定されたストレージ名で以前に保存された画像を取得します。画像はイメージストレージから削除されます。シミュレーション関数から戻る前に、この画像を再度保存するか、次を呼び出して
|
|
戻り値 |
0 : OK <0 : Could not get image |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
オペレーターポートの名前。 |
|
パラメータ 3 |
フォーマットハンドルの戻り値ポインタ。 |
|
説明 |
新しい画像フォーマットオブジェクトを作成し、対応するハンドルを返します。フォーマットは、指定された名前を持つポートのフォーマットによって初期化されます。シミュレーション関数から戻る前に、次を呼び出してフォーマットを削除する必要があります
|
|
戻り値 |
0 : OK <0 : Could not create format |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
コピーされるフォーマットのハンドル。 |
|
パラメータ 3 |
フォーマットハンドルの戻り値パラメータ。 |
|
説明 |
新しい画像フォーマットオブジェクトを作成し、対応するハンドルを返します。フォーマットは提供されたフォーマットによって初期化されます。シミュレーション関数から戻る前に、次を呼び出してフォーマットを削除する必要があります
|
|
戻り値 |
否定 |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
オペレータシミュレーション関数に提供されるシミュレーションハンドル。 |
|
パラメータ 2 |
削除されるフォーマットのハンドル。 |
|
説明 |
指定されたフォーマットハンドルによって参照される画像フォーマットオブジェクトを削除します。 |
|
戻り値 |
0: OK <0 : Could not delete format |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
画像ハンドル。 |
|
パラメータ 2 |
画像のフォーマットに設定される、以前に作成されたフォーマットのハンドル。 |
|
説明 |
画像ハンドルによって参照される画像のフォーマットを照会します。 |
|
戻り値 |
0 : 操作が正常に完了しました <0: Cannot query format |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
画像ハンドル。 |
|
パラメータ 2 |
設定するPropertyを指定する文字列。 |
|
パラメータ 3 |
新しいPropertyの設定に使用されるデータ構造へのポインタ。 |
|
説明 |
イメージハンドルによって参照される画像のPropertyを設定します。この関数を介して次のPropertyを設定できます:
|
|
戻り値 |
0 : Propertyが正常に設定されました |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
画像ハンドル。 |
|
パラメータ 2 |
クエリするPropertyを指定するEnum値。 |
|
パラメータ 3 |
データ通信に使用されるデータ構造へのポインタ。 |
|
説明 |
イメージハンドルによって参照される画像のPropertyをクエリします。以下のPropertyを利用できます:
|
|
戻り値 |
0 : Propertyが正常にクエリされました |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
画像ハンドル。 |
|
パラメータ 2 |
行番号。 |
|
パラメータ 3 |
行の長さ。 |
|
説明 |
参照されている行の長さを、画像全体の幅とは異なる個別の値に設定します(画像フォーマットで定義されている最大画像幅を超えない範囲)。 |
|
戻り値 |
0 : 操作が正常に完了しました <0: Cannot set line length to the given value |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
画像ハンドル。 |
|
パラメータ 2 |
行番号。 |
|
パラメータ 3 |
行長の戻り値パラメータ。 |
|
説明 |
参照されている行の長さを返します。 |
|
戻り値 |
0: OK <0: Cannot query line length |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
画像ハンドル。 |
|
パラメータ 2 |
フレーム内の位置。 |
|
パラメータ 3 |
コンポーネントインデックス。 |
|
パラメータ 4 |
ピクセルコンポーネント値。 |
|
説明 |
対応するピクセルコンポーネントを指定された値に設定します。 |
|
戻り値 |
0 : 操作が正常に完了しました <0: Error setting the pixel component value |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
画像ハンドル。 |
|
パラメータ 2 |
フレーム内の位置。 |
|
パラメータ 3 |
コンポーネントインデックス。 |
|
パラメータ 4 |
ピクセルコンポーネント値の戻り値パラメータ |
|
説明 |
対応するピクセルコンポーネント値を返します。 |
|
戻り値 |
0 : 操作が正常に完了しました <0: Error getting the pixel component value |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
画像フォーマットハンドル。 |
|
パラメータ 2 |
設定するPropertyを特定する列挙値。 |
|
パラメータ 3 |
新しいプロパティを保持するデータ構造へのポインタ。 |
|
説明 |
ハンドルによって参照される画像フォーマットのPropertyを設定します。この関数により、以下のPropertyを設定できます:
|
|
戻り値 |
0 : Propertyが正常に設定されました
|
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
画像フォーマットハンドル。 |
|
パラメータ 2 |
クエリするPropertyを指定するEnum値。 |
|
パラメータ 3 |
照会されたPropertyによって上書きされるデータ構造へのポインタ。 |
|
説明 |
ハンドルによって参照される画像フォーマットのPropertyを照会します。照会可能なPropertyは、次の関数を通じて設定可能なものと同一です
|
|
戻り値 |
0 : Propertyが正常にクエリされました
|
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
シミュレーションハンドル。 |
|
パラメータ 2 |
作成されたエラーメッセージの戻り値パラメータ。 |
|
説明 |
シミュレーションエンジンに送信できるステータスメッセージを作成します。 |
|
戻り値 |
0 : OK <0: Can’t create message |
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
シミュレーションハンドル。 |
|
パラメータ 2 |
ステータスメッセージハンドル。 |
|
パラメータ 3 |
設定するPropertyの名前。 |
|
パラメータ 4 |
新しい Property 値 |
|
説明 |
ステータス メッセージの Property を変更します。この関数を介して以下の Property を設定できます。
|
|
機能 |
|
|---|---|
|
構文 |
|
|
パラメータ 1 |
シミュレーションハンドル。 |
|
パラメータ 2 |
送信されるステータス メッセージのハンドル。 |
|
説明 |
シミュレーション エンジンにステータス メッセージを送信しました。 |
|
戻り値 |
0 : OK <0: Can’t submit message |
オペレーターのマニュアルは HTML ファイル形式で提供する必要があります。利用可能な場合は、マニュアルを構成するすべてのファイルを → タブの下で指定する必要があります:

最初指定されたファイルは、オペレーターのマニュアルの開始点として解釈されます。このファイルの命名規則は以下の通りです:
<NameOfCustomOperator>.htm.
CSS ファイルを必ず用意してください。 また、関連するすべての画像ファイルも必ず用意してください。
VisualApplets インストールディレクトリのサブディレクトリにあるオペレーターテンプレートを使用できます。 Examples/CustomLibrary/OperatorTemplate.
インターフェイスが生成されたブラックボックスと一致するように HDL コードをラップしたら、カスタム オペレーターを完成させるための最後の手順を進める必要があります:
-
実装からネットリストを作成します。
![[ヒント]](../common/images/admon/tip.png)
設定 Add IO Buffer = NOネットリストを作成する際、合成ツールが IO バッファを自動的に追加しないようにしてください。ネットリスト合成に XST を使用する場合は、次のように設定します
Add IO Buffer = NOそれ以外の場合、生成された NGC ファイルは VisualApplets のビルドフロー中にエラーを引き起こします。
![[ヒント]](../common/images/admon/tip.png)
ネットリスト生成時の警告 ネットリストの生成時、カスタム オペレーター インターフェイスの未使用の IO ポートに関する警告が出力される場合があります。未使用の IO ポートとは、オペレーター定義に従って生成されたものの、IP コアに接続されていないすべてのポートです。これらの警告は無視しても問題ありません。
この動作の例は、以下の場所にあるすべてのカスタム オペレーターの例です
ExamplesVisualApplets インストールのディレクトリ:\Examples\CustomLibrary -
必要に応じて、制約ファイルも定義します(
*.ucfフォーマット(Xilinx ISEを使用する場合)、*.xdcXilinx Vivado を使用している場合は、フォーマットを使用します)。 -
必要に応じて、セクション 'Defining the Custom Operator’s Software Interface' で説明されているように、オペレーターのソフトウェア インターフェイスを設定します。
-
必要に応じて、セクション 'Creating Custom Operator Documentation' で説明されているように、オペレーターのマニュアルを作成します。
次に、VisualApplets でオペレーター定義を完了する必要があります。そのためには、次のように進めます。
必要な手順:
-
タブに移動します。

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

カスタムオペレーターを使用しているデザインにおいて、ターゲットプラットフォーム上のFPGAがこのリストに含まれていない場合、DRCは、そのオペレーターがターゲットプラットフォームでサポートされていないというエラーを報告します。
-
サポートされているXilinx Tool(s)を指定します。ISEとVivadoの両方のチェックボックスをオンにすることができます。ISEで生成されたネットリストは通常Vivadoのビルドフローとも互換性がありますが、ご使用のオペレーターの実装において該当するかどうかを確認する必要があります。指定されたネットリストをサポートするツールの最小バージョン番号を定義する必要があります。通常これは、ネットリストの作成に使用したバージョンになります。
カスタムオペレーターを使用しているデザインにおいて、指定されたツールがデザインのビルドに使用されていない場合、DRCは、そのオペレーターがターゲットプラットフォームでサポートされていないというエラーを報告します。
![[ヒント]](../common/images/admon/tip.png)
複数のコアの定義 同じカスタムオペレーターに対して複数のコアを定義できます。これにより、カスタムオペレーターのデバイスおよびツール固有の実装を使用できるようになり、異なるターゲットプラットフォームに対してアップレットをビルドする際に適切な実装が選択されます。
オプションの手順:
-
オプションとして、オペレーターによるロジックリソースの消費量を入力します。ネットリストの生成中にXilinx toolsによって見積もられた値をそのまま入力してください。
-
タブで、シミュレーションライブラリ(カスタムオペレーターのソフトウェアインターフェイス)へのパスを指定します。
-
タブで、アイコンファイルへのパスを指定します。これは、カスタムオペレーターが表示されるときに使用されるアイコンを含むファイルです。 VisualApplets 。
-
タブで、カスタムオペレーターのマニュアルを構成するすべてのファイルを指定します。CSSファイルと関連するすべての画像ファイルも必ず用意してください。
-
オペレーターのデザインを保護する場合:左下隅で、オプションを有効にします。表示されるダイアログで:
-
保護モードが有効になっていることを確認します。
-
パスワードを入力します。
-
をクリックします。

カスタムオペレーターのデザインは、後からカスタムライブラリ要素のコンテキストメニューを使用していつでも保護できます。
![[ヒント]](../common/images/admon/tip.png)
保護オプション 保護が有効になると、カスタムオペレーターは「ブラックボックス」になります。カスタムオペレーターのデザインを保護するには2つの方法があります:
-
パスワードによる保護:カスタムオペレーターのデザインは、その後パスワードを使用して開き、編集することができます。パスワードを持たないユーザーは、カスタムオペレーターの詳細を一切確認できません(ブラックボックス)。
-
不可逆的な保護:保護モードとしてOne-Wayを選択した場合、カスタムオペレーターは永久にブラックボックスとなり、ご自身であっても再度開くことはできません。
「One-Way」保護は不可逆的です:保護モードとして(Passwordではなく)One Wayを選択した場合、カスタムライブラリ要素をご自身であっても二度と開き直すことはできません。将来的に要素を拡張する予定がある場合は、代わりに必ず保護モードを選択してください。または、この保護モードを有効にする前に、要素のコピーを(階層ボックスまたは非保護オペレーターとして)保存することもできます。
-
-
をクリックします。
これで、新しいカスタムオペレータをデザインで使用する準備が整いました。
含まれているすべてのオペレータを含むカスタムライブラリは、1つの
<LibaryName>.val または
<LibaryName>.vl ファイル。
<LibaryName> は、カスタムライブラリの名前です。
このファイルは配布可能であり、VisualAppletsで直接適用できます。VisualAppletsの設定で指定されているCustom Libraryディレクトリにコピーするだけです( → → → )。

-
新しい
<LibaryName>.valまたは<LibaryName>.vlファイルをVisualAppletsのインストール先のCustom Libraryディレクトリにコピーします。 -
VisualAppletsのGUIでカスタムライブラリを再スキャンします。ライブラリ名を右クリックし、サブメニューからを選択します。

VisualAppletsのサンプルディレクトリには、すぐに使用できる
CustomLibrary.vl
という名前のライブラリがあり、すべてのサンプルオペレータが含まれています。
カスタムオペレータに変更を加えた場合、これらの変更はすでにカスタムオペレータを使用しているデザインには反映されません。そのため、デザイン内のカスタムオペレータインスタンスを更新する必要があります。
-
オペレータを右クリックします。
-
サブメニューから、またはを選択します。

カスタムライブラリの更新メカニズムは、ユーザーライブラリの場合とまったく同じです。
インストールディレクトリには、カスタムオペレータの定義に使用できるカスタムオペレータテンプレートがあります。
\Examples\CustomLibrary カスタムオペレータテンプレートを使用するには:
-
新しいカスタムオペレータを作成するカスタムライブラリを右クリックします。
-
サブメニューから、 → を選択します。

-
オペレータテンプレートへのパスを指定します。
-
をクリックします。
すぐにダイアログが開きます:

-
新しいカスタムオペレーターに名前を付け、「GUI経由での個別のカスタムオペレーターの定義」のセクションで説明されている手順に従って進めます。
カスタムオペレーターの定義は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つのアンダースコアは許可されていません。 |
|
パラメーター名 |
タイプ |
説明 |
|---|---|---|
|
|
String |
ベンダー名 |
|
|
String |
オペレーターのバージョン番号。この値は自由に選択でき、ユーザーによるバージョン識別を目的としています。 |
|
|
文字列の配列 |
演算子のコアネットリストのリスト。最初の文字列は
|
|
|
String |
オペレーターのハイレベルシミュレーションモデルを含むソフトウェアライブラリ(ダイナミックリンクライブラリ)を含むファイルのクォーテーションで囲まれた名前。 |
|
|
String |
オペレーターアイコンを含むファイルのクォーテーションで囲まれた名前。 |
|
|
文字列の配列 |
ヘルプコンテンツ(HTML+画像)を含む、クォーテーションで囲まれたファイル名のリスト。最初のファイルがメインのHTMLファイルとみなされます。 |
表 7. Operator/Info
|
パラメーター名 |
タイプ |
説明 |
|---|---|---|
|
|
文字列の配列 |
後で定義されるinfo構造体の名前のリスト
( |
|
|
文字列の配列 |
後で定義されるinfo構造体の名前のリスト
( |
|
|
String |
ImgInポートの入力が互いに同期しているか非同期であるかを定義する文字列。この文字列には、“Sync”または“Async”を指定できます。 |
|
|
文字列の配列 |
後で定義されるinfo構造体の名前のリスト
( |
|
|
文字列の配列 |
後で定義されるinfo構造体の名前のリスト
( |
|
|
文字列の配列 |
汎用信号入力のピン名のリスト。 |
|
|
文字列の配列 |
汎用信号出力のピン名のリスト。 |
|
|
文字列の配列 |
後で定義されるinfo構造体の名前のリスト
( |
表 8. Operator/IO
|
パラメーター名 |
タイプ |
説明 |
|---|---|---|
|
|
Integer |
オペレーターによって消費されるFPGAのLUTエレメントの数 |
|
|
Integer |
オペレーターによって消費されるFPGAレジスタの数 |
|
|
Integer |
オペレーターによって消費されるブロックRAMエレメントの数 |
|
|
Integer |
オペレーターによって消費される組み込み乗算器の数 |
表 9. Operator/Properties
画像入力ポートの仕様は、設定ファイル内で次の構文を使用して行われます。
<ImgIn name=”IMG_IN_IDENTIFIER”> Parameters </ImgIn>;
ここで、 IMG_IN_IDENTIFIER は、上記のパラメータで提供されている画像入力ポート名の1つです Operator/IO/ImgInInfo。
コンテンツ Parameters は、画像インタフェースポートのPropertyを指定しています。
|
パラメーター名 |
タイプ |
説明 |
|---|---|---|
|
|
Integer |
画像データポートの幅 |
|
|
Integer |
VAコアによって最低限提供される必要がある、入力データ用バッファFIFOの深さ。値は15から1023の間で、2のべき乗から1を引いた数である必要があります。 |
|
|
Array of Record |
ポートでサポートされている |
表 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を指定します。
|
パラメーター名 |
タイプ |
説明 |
|---|---|---|
|
|
Integer |
画像データポートの幅 |
|
|
Integer |
VAコアによって最低限提供される必要がある、出力データ用バッファFIFOの深さ。値は15から1023の間で、2のべき乗から1を引いた数である必要があります。 |
|
|
Array of Record |
ポートでサポートされている |
表 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 は、レジスタインターフェイスポートのプロパティを指定しています:
レジスタ出力ポートの指定は、設定ファイル内で次の構文を使用して行われます:
<RegOut name=”REG_OUT_IDENTIFIER”> Parameters </RegOut>;
ここで、 REG_OUT_IDENTIFIER は、上記のパラメータで提供されているレジスタ出力ポート名のいずれかです Operator/IO/RegOutInfo。 Parameters は、レジスタインターフェイスポートのプロパティを指定しています:
メモリインターフェイスの指定は、設定ファイル内で次の構文を持つセクションによって行われます:
<Mem name=”MEM_IDENTIFIER”> Parameters </MEM>
ここで、 MEM_IDENTIFIER は、上記で説明したパラメータで提供されているメモリポート名のいずれかです Operator/IO/MemInfo。
コンテンツ Parameters は、メモリインターフェイスのプロパティを指定しています:
|
パラメーター名 |
タイプ |
説明 |
|---|---|---|
|
|
Integer |
データ幅 |
|
|
Integer |
アドレス幅 |
|
|
Integer |
書き込みアクセスをマークするためのフラグの幅。このパラメータは >= 1 である必要があります。 |
|
|
Integer |
読み取りアクセスをマークするためのフラグの幅。このパラメータは >= 8 である必要があります。 |
|
|
Integer |
利用可能な書き込みコマンドの数を通信するためのポートの幅 |
|
|
Integer |
利用可能な読み取りコマンドの数を通信するためのポートの幅 |
|
|
String |
このパラメータは、メモリインターフェイスクロックと設計クロックの関係を示します。以下の値を使用できます。
|
表14. Operator/Mem
IPコアネットリストの指定は、設定ファイル内で次の構文を持つセクションによって行われます。
<Core name=”CORE_IDENTIFIER”> Parameters </Core>
ここで、 Core_IDENTIFIER は、上記で説明したパラメータで提供されているコア名の1つです。 Operator/Cores。コンテンツ
Parameters は、IPコアのPropertyを指定します。
|
パラメーター名 |
タイプ |
説明 |
|---|---|---|
|
|
文字列の配列 |
コアでサポートされているFPGAデバイス名のリスト(例:
|
|
|
String |
ネットリスト用のクォートされたUTF-8エンコードファイル名。 |
|
|
String |
オプションの制約ファイル用のクォートされたUTF-8エンコードファイル名。 |
|
|
String |
指定されたネットリストを使用できるISEツールフローの最小バージョン番号(例: |
|
|
String |
指定されたネットリストを使用できるVivadoツールフローの最小バージョン番号(例: |
表15. Operator/Core







前へ

