IPコアPropertyの定義

FPGAで使用する個々のVA IP Coreのインターフェースを定義するには、GUIツールのeVA Designerを使用します。eVA DesignerはVisualApplets Embedderパッケージに含まれています。eVA DesignerはVisualAppletsと一緒にインストールされます。VisualApplets Embedderライセンスを取得すると、eVA Designerを使用できるようになります。ここで入力したデータは、ハードウェア記述ファイル(XML)に書き込まれます。このデータをもとに、eVA Designerは後でVHDLでIP Coreのブラックボックスを構築します。

eVA Designer のグラフィカルユーザーインターフェース

eVA Designerのグラフィカルユーザーインターフェースは、簡単で直感的です。

eVA DesignerのGUIは、あらゆる入力に対して反応するため、作業をサポートします。

グラフィカル表現

定義されたIP Coreのグラフィカル表現(プログラムウィンドウの左側パネル)には、指定した時点で定義したすべてのインターフェースが表示されます。グラフィカル表現は、入力(インターフェースの追加または削除)に対して即座に反応します。

  • FIFOを使用するすべてのインターフェースは緑色で表示されます。

  • 同種の複数のインターフェースは、それに応じて表示されます。

    • 同種のインターフェースが最大3つの場合は、その実際の数のインターフェースの重ね合わせとして表示されます。例:2つのmemoryインターフェース: 

    • 同種のインターフェースが3つを超える場合は、実際の数を示す数字が添えられた3つの重ね合わせとして表示されます。例:4つのGPIインターフェースと4つのGPOインターフェース:

出力フィールド

IP Coreの定義がeVA Designerでの他の入力内容と一致しない場合、出力フィールドに即座に通知されます。たとえば、定義したインターフェースが、IP Core内でそれらのインターフェースに接続するために定義したVisualAppletsオペレーターと一致しない場合などです。

出力フィールドは、入力(インターフェースやオペレーターの追加または削除など)に対して即座に反応します。

eVA Designer とハードウェア記述ファイルのオープン

新しいIP Coreの定義を作成するには、つまり、FPGAデザインに統合するプログラマブルIP Coreのインターフェースを定義するには、次のように操作します:

  1. VisualAppletsを起動します。

  2. Toolsメニューから、eVA Designerを選択します。

    eVA Designerのスタートウィンドウが開きます:

  3. Fileメニューから、Openを選択します。

  4. ファイルシステムからXMLテンプレート(または以前作業していたHW記述ファイル)を選択して、eVA Designerに読み込みます。

    XMLテンプレートがeVA Designerに読み込まれます:

[注] ハードウェア記述ファイルの作業の継続

もちろん、すでに取り組んでいた個々のハードウェア記述ファイルや、完全に入力されたサンプルファイルの1つを再度開くこともできます。この場合、IP Coreのグラフィカル表現には、すでに指定されているインターフェースが表示されます:

Zynqプラットフォーム用に指定されたIP Coreの例

図193. Zynqプラットフォーム用に指定されたIP Coreの例


プラットフォーム詳細の入力

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

  2. 画像処理アプリケーションを搭載するFPGAを含むハードウェアに関する最初の情報を入力します:

    • Name:ターゲットハードウェア製品の名前を入力します。

    • Display Name:VisualAppletsのGUIに表示するハードウェアの別名を定義します。スペース文字を使用できます。

    • ベンダー(表示フィールド): 自社の会社名(つまり、製品のベンダー)を入力します。この文字列の値はBaslerによってあらかじめ設定されており、変更することはできません。ベンダー名はVisualAppletsのグラフィカルユーザーインターフェースに表示されます(サンプルHW記述ファイルでは、この場所に DEMO が表示されます)。

    • ID: ランタイムシステムを介して読み取り可能な、ハードウェアプラットフォームの4桁の16進数の識別番号を入力します。ここには任意の値を自由に入力できます。この値は、VisualAppletsユーザーによるハードウェア識別のためのものです。例: 0xabcd

    • バージョン: ハードウェア製品のバージョンを入力します。ここには任意の値を自由に入力できます。この値は、VisualAppletsユーザーによるHWバージョンの識別のためのものです。

    • パフォーマンスクラス: ここには、選択したXMLテンプレートのパフォーマンスクラスが表示されます。利用可能なパフォーマンスクラスの詳細については、「パフォーマンスクラス」のセクションを参照してください。

    • アイコンファイル(オプション): ここには、後でVisualApplets内でハードウェアプラットフォームの名前とともに表示される小さな画像ファイルへのパスを入力できます。

FPGA詳細の入力

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

  2. IPコアを統合するFPGAに関する情報を、Type Information for FPGA Device の下に入力します:

    ベンダー: FPGAベンダー名(例: XILINX)。

    アーキテクチャ: FPGAのFPGAシリーズおよびFPGAモデル(例: ZYNQ7000)。

    デバイス: FPGAのデバイス名(FPGAタイプ、スピードグレードとパッケージの詳細を除く)(例: xc7z020)。

    スピードグレード: FPGAのスピードグレード(例: -1)

    パッケージ: FPGAのパッケージ識別子(例: clg484)

  3. VisualApplets Design Clock Settings の下で、iDesignClk のプロパティを指定します:

    最小設計クロック周波数: Visual Applets Coreデザインの最小周波数。

    最大設計クロック周波数: Visual Applets Coreデザインの最大周波数。

    デフォルト設計クロック周波数: Visual Applets Coreデザインのデフォルト周波数。

    設計クロック周波数ステップ: Visual Applets Coreの周波数を調整できるステップサイズ。

    ここに(上の3つのフィールドすべてに同じ値を入力する代わりに)周波数 範囲 を指定すると、VisualAppletsユーザーが特定のデザインの設計クロックを指定した値の範囲内の値に設定できるようになります。クロックシステムの一般的な情報については、'Clock Interface' を参照してください。

    [注] 周辺のFPGAデザインが定義された周力をサポートしている必要がある

    周辺のFPGAデザインが、IPコアデザインのためにここで定義する周力を提供していることを確認してください。(3つのフィールドすべてに同じ値を入力する代わりに、ここに周波数 範囲 を指定することで)VisualAppletsユーザーが設計クロックを調整できるようにする場合は、次の点を確認する必要があります。

    • 周辺のFPGAデザインに、その入力を iDesignClk に適応させる柔軟性があること、および

    • FPGAデザインが指定された値の範囲内のすべての周力を提供できること。

  4. FPGA Resources Available for VisualApplets の下で、画像処理アプリケーション(VA IPコア内)による使用を最大限に許可するFPGAリソースを入力します:

    最大LUT数: Visual Appletsデザインで使用できるFPGA LUTの最大数。

    最大レジスタ数: Visual Appletsデザインで使用できるFPGAレジスタの最大数。

    Max. number of Block RAMs: Visual Appletsデザインで使用できるFPGAのブロックRAMの最大数。

    Max. number of embedded ALUs: Visual Appletsデザインで使用できるFPGAの組み込みALUの最大数。

必要な ImgIn インターフェイスの説明の入力

eVA IP Coreの ImgIn インターフェイス

画像ストリーミングポート ImgIn は、周辺のFPGAロジックからVA IP Coreへ画像データを書き込むための汎用画像通信インターフェイスです。ImgIn ポートは、シンプルなFIFOインターフェイスと追加のパラメータポートで構成されています。インターフェイスポートは完全にパラメータ化されています。既存のパラメータに加えて、接続されたFPGAロジックへパラメータを転送するための追加レジスタを定義できます。

画像データは、ImgIn 型のインターフェイスポートを介してVA IP Coreに入力されます。ImgIn ポートには複数のクラスを定義でき、それぞれのクラスに対して複数のインスタンスを作成できます。

画像入力インターフェイスのポートレイアウト

図194:画像入力インターフェイスのポートレイアウト


次の表は、PORTID が対応する画像入力ポートクラスの名前であり、X が同じクラスの複数のポートを区別するためのポート番号であるインターフェイス信号の説明です。

ポート

方向

Width

説明

iPORTIDXClk

では、

1

FIFOへの書き込み用クロック。ポートが同期通信用に設定されている場合、この入力は無視されます。ImgIn インターフェイスの設定については、「Defining ImgIn Interface Classes」で説明されています。

ivPORTIDXData

では、

PORTIDWidth

書き込みデータ(ピクセルデータ、または行末(end-of-line)もしくはフレーム終了(end-of-frame)フラグとして解釈されます)

iPORTIDXValid

では、

1

書き込みアクセスの実行

iPORTIDXEndOfLine

では、

1

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

iPORTIDXEndOfFrame

では、

1

フレームの終了を信号化します。このフラグが有効化されている場合、データにはピクセル値が含まれません。フレーム終了信号は、行末信号と一致している必要があります。

oPORTIDXFIFOFull

出力

1

入力FIFOが満杯であり、これ以上のデータは受け付けられません。

ovPORTIDXFIFOCnt

出力

Ceil Log2(PORTIDFIFODepth)。Ceil Log2は、値を表現するために必要なビット数です。

入力FIFO内のワード数。この信号を使用して、Almost FullなどのFIFOフラグを生成できます。

oPORTIDXReset

出力

1

プロセスのリセット信号

oPORTIDXEnable

出力

1

プロセスのイネーブル信号

ovPORTIDX_PARNAME_D

出力

S

パラメータ PARNAME のデータ。Sは選択された Bit Width によって異なります。この信号は定義されたパラメータごとに生成されます。

oPORTIDX_PARNAME_Upd

出力

1

ランタイムソフトウェアからパラメータ PARNAME が更新されると、この信号は1クロックサイクルの間「1」に設定されます。この信号は定義されたパラメータごとに生成されます。

ovPORTIDX_FID_D

出力

Ceil Log2(N)。Ceil Log2(N)は、値(N-1)を表現するために必要なビット数です。

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

次の図は、32ビットのグレースケール画素値が3つ含まれる2行のフレームが転送される簡単な例について、ImgInインターフェースを介した画像通信のタイミングを示しています。波形では、名前の一部 PORTIDX が imgin に置き換えられています。

画像入力ポート上のプロトコルを示す波形

図195:画像入力ポート上のプロトコルを示す波形


サポートされているImgInフォーマット

単一の ImgIn ポートを介して、さまざまなプロトコルを駆動できます。VisualAppletsは以下の画像フォーマットをサポートしています:

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

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

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

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

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

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

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

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

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

VA IP コアを囲むプラットフォーム設計が画像通信チャネルの適切な構成をサポートしていることを条件として、これらのフォーマットの任意の組み合わせをサポートするように ImgIn インターフェイス クラスを定義できます。

ピクセルコンポーネントを符号付きまたは符号なしのどちらとして解釈するかを指定できます。

ImgIn インターフェイス クラスの定義

さまざまなクラスの ImgIn インターフェイスを定義できます。これらのインターフェイス クラスは、サポートされる画像プロトコルの数と種類、サポートされるデータ幅、使用されるクロック信号、およびその他の多くの点で異なる場合があります。各 ImgIn インターフェイス クラスは、VA IP コア上で複数回利用できるようにすることができます。

eVA IP コアの例

図 196. eVA IP コアの例


上の図の IP コアの例には、2 つの ImgIn クラスと 2 つの ImgOut クラスが表示されています。両方のクラスの複数のインスタンスが利用可能です。この VA IP コアには、ImgIn クラス ImgIn_A の ImgIn ポートが 7 つ、ImgIn クラス ImgIn_B の ImgIn ポートが 5 つ、ImgOut クラス ImgOut_a の ImgOut ポートが 2 つ、および ImgOut クラス ImgOut_b の ImgOut ポートが 5 つ用意されています。

[注] VisualApplets 内の関連オペレーター

定義された各 ImgIn クラスについて、後で 1 つ以上のプラットフォーム固有の VisualApplets ImgIn オペレーターを生成できます(詳細については、「ハードウェア固有のオペレーターの定義」を参照してください)。これらのオペレーターは、(IP コアの統合後に)VisualApplets 内でインスタンス化され、インターフェイスを実装できます。

同じ構成(クラス)のインターフェイス ポートが複数存在する場合、対応するオペレーターのインスタンスは、VisualApplets のリソース管理によって制御されて、それらのいずれにも接続できます。

VisualApplets のリソース管理:VisualApplets では、各 ImgIn クラスに対して同じ名前のリソースが設定されます。VisualApplets のこのリソースダイアログで、割り当てを定義できます。

ImgIn ポートの設定

eVA IP コアへの画像ストリーミングを許可するポートを定義するには:

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

  2. プラス アイコンをクリックします。

  3. Base Name フィールドに、定義する ImgIn インターフェイス クラスの名前を入力します。フィールドをダブルクリックして入力します。

  4. Multiplicity フィールドで、VA IP コア上にこのクラスの ImgIn インターフェイスをいくつ配置するかを定義します。フィールドをダブルクリックして入力します。

    定義された ImgIn ポート(この例ではクラス ImgInGray の 3 つのインターフェイス)は、IP コアのグラフィカル表現にすぐに表示されます。

  5. ImgIn インターフェイス クラスのその他のプロパティを定義します。

    Flow control: このパラメータは、VisualApplets アプリケーションが着信画像データのフローを一時的に停止することを許可するかどうかを決定します。「YES」に設定すると、入力データを一時停止するための内部フロー制御メカニズムが実装されます。「NO」に設定すると、フロー制御メカニズムは実装されません。停止可能な画像ソースが ImgIn ポートに接続されている場合は、フロー制御メカニズムの実装が合理的です。停止不可能なソースを使用する場合は、「NO」を選択します。

    • Yes:入力データを一時停止するためのフロー制御メカニズムが実装されます。

    • NO:入力データを一時停止するためのフロー制御メカニズムは実装されません。

    Sync. mode: このパラメータは、画像インターフェイス クラス(ImgIn ポート上の iPORTIDXClk)とデザイン クロック(IP コア上の iDesignClk)の関係を示します。以下の値を使用できます。

    • SyncToDesignClk – インターフェイスポートは iDesignClk と同期します。画像インターフェイスポートの外部クロック入力は無視されます。

    • SyncToDesignClk2x – インターフェイスポートは iDesignClk2x と同期します。ImgIn ポートの外部クロック入力は無視されます。

    [注] ダブルピクセル深度が利用可能

    ImgIn ポートに iDesignClk2x を使用する場合、ポート iv..Data に定義するビット深度の2倍のビット深度を持つ画像プロトコルを定義できます(つまり、bit width と Parallelism の積を2倍のサイズにすることができます)。この場合、システムによって係数2の自動パラレルアップが実行されます。

    • Async – 非同期インターフェイス:インターフェイスポートは、ImgIn インターフェイスの外部クロック入力と同期します。

    Async を選択する場合は、次の操作を行う必要があります。

    • ImgIn インターフェイスの iImgInClk ポートにクロック信号を供給し、

    • 合成制約(制約ファイル)でクロックドメイン遷移制約を定義します。

    [注] ダブルピクセル深度が利用可能

    iDesignClk よりもはるかに高い周波数のクロック信号を iImgInClk ポートに供給する場合、ポート iv..Data に定義するビット深度の2倍のビット深度を持つ画像プロトコルを定義できます(つまり、bit width と Parallelism の積を2倍のサイズにすることができます)。この場合、システムによって係数2の自動パラレルアップが実行されます。

    [注] iDesignClk または iDesignClk2x を使用する

    Basler は、可能な限り同期に iDesignClk または iDesignClk2x を使用することを推奨しています。

    Fifo depth: 接続された VisualApplets インターフェイスオペレーターによって少なくとも実装される必要がある、入力データ用バッファ FIFO の深度をここで定義します。値は、15 から 1023 の間の 2 のべき乗マイナス 1 である必要があります。

    Port width: 画像データポートの幅をここで定義します。

ImgIn インターフェイスクラスの画像プロトコルの定義

この ImgIn インターフェイスクラスでサポートする画像プロトコルを定義する必要があります。指定したいすべてのプロトコルが揃うまで、プロトコルを1つずつ定義します。

[注] VisualApplets 内の関連オペレーター

VA IP コアを FPGA 設計に統合した後、画像処理アプリケーションの desenvolvedor(開発者)は VisualApplets で ImgIn オペレーターをインスタンス化し、ImgIn インターフェイス(およびオペレーター自体)がサポートするプロトコルのうちどれが、特定のアプリケーション内のこのオペレーターインスタンスによって実装されるかを定義します。

  1. Format 列の矢印をクリックし、フォーマットリストから希望のフォーマットを選択します。

    サポートされている画像フォーマットの詳細については、'Supported ImageIn Formats' を参照してください。

  2. Pix.Width 列のフィールドをダブルクリックします。

    必要なピクセルデータ Bit Width を入力します(値の範囲:[1..64])。

    ピクセルデータ幅は最大 64 bit に制限されます。グレー以外のすべてのカラーフォーマットのピクセルデータ幅は 3 の倍数である必要があり、最大 63 bit に制限されます。

  3. Parall 列のフィールドをダブルクリックします。必要な Parallelism を入力します。

    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 the 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 (Port width, see above) must follow certain rules:

    • すべての P ピクセルのデータは、長さ N の単一ワードに収まる必要があります。データは LSB アライメントで保存されます。つまり、ピクセル幅 Z(グレーの場合は Z=X、カラーの場合は 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が青の役割を担います。

  4. Dimension列の矢印をクリックして、定義しているプロトコルの画像ディメンションを選択します。

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

    • Area(デフォルト): 画像は行末およびフレーム末マーカーによって構造化されます。VisualAppletsでは、画像ディメンションのAreaは2Dと呼ばれます。エリアカメラは2D画像ソースになり得ます。

    • Line: 画像は行末マーカーによって構造化されます。受信した行をフレームに分割するフレーム末マーカーはありません。VisualAppletsでは、画像ディメンションのLineは1Dと呼ばれます。ラインカメラは1D画像ソースになり得ます。

    • Raw: 受信した画像データを行やフレームに分割する行末およびフレーム末マーカーはありません。画像入力ストリームは、幅1ピクセルのエンドレスなピクセルストリームで構成されます。VisualAppletsでは、画像ディメンションのRawは0Dと呼ばれます。

  5. Signedness列の矢印をクリックし、定義しているプロトコルの画像ディメンションを選択します。

    • Unsigned(デフォルト): ピクセルデータは符号なしピクセルコンポーネントとして解釈されます。

    • Signed: ピクセルデータは符号付きピクセルコンポーネントとして解釈されます。

  6. 画像クラスがサポートするように設定するすべての画像プロトコルを定義し終えるまで、手順1〜5を繰り返します。

[注] 画像プロトコル定義の内部ID

カーネルサイズは暗黙的に1x1であると仮定されます。リストされた各プロトコルには番号が付けられ、リストはゼロから始まります。これらの番号が、特定のImgInクラスのプロトコルIDを構成します。IDはGUIには表示されません。したがって、定義する各ImgInクラスには、定義した画像プロトコルの内部IDリストが存在します。

次のいずれかの手順で、1つ以上のVisualApplets ImgInオペレータを定義できます。そのインスタンスは、定義されたImgInクラスに接続できます(オペレータの定義方法の詳細については、'Defining Hardware-Specific Operators'を参照してください)。これらの各オペレータには、該当する画像ポートに対して指定した画像プロトコルのすべて、またはそのサブセットを割り当てることができます。

VisualAppletsでは、ImgInオペレータは、VisualAppletsユーザーがオプションのリストから画像フォーマットを選択できるパラメータを提供します。選択に応じて、対応するIDが関連するIPコアのImgInポート(ov..FID_D)に割り当てられます。これにより、接続されたグルーロジックは、選択されたフォーマットに応じてその動作を適応させることができます。

ImgInインターフェイスクラスの追加パラメータの定義

ImgInインターフェイスクラスに持たせたい追加のパラメータを定義できます。これらの(動的な)パラメータは実行時に設定できます。これらはランタイムインターフェイス経由でアクセスできます('Runtime Software Interface'を参照)。

これらのパラメータは、VA IPコアのレジスタスレーブインターフェイス('Register Slave Interface'を参照)を介して通信されます。

ovPORTIDX_PARNAME_D: パラメータPARNAMEのデータ。方向: 出力(Out)。Bit Widthを定義できます。この信号は、定義された各パラメータに対して生成されます。

oPORTIDX_PARNAME_Upd: 方向: 出力(Out)。Bit Width: 1。この信号は、パラメータPARNAMEがランタイムソフトウェアから更新されたときに、1クロックサイクルの間「1」に設定されます。この信号は、定義された各パラメータに対して生成されます。

ImgInインターフェイスクラスの追加パラメータを定義するには:

  1. プログラムウィンドウの Parameter ports エリアに移動します。

  2. プラス アイコンをクリックします。

  3. Name フィールドに、定義するパラメータの名前を入力します。フィールドをダブルクリックして入力します。

  4. Width フィールドで、パラメータポートの幅 {1,64} を定義します。フィールドをダブルクリックして入力します。

    [注] スレーブインターフェイスデータ幅と実際のレジスタ幅の間のマッピング

    レジスタインターフェイスを介してアクセスされるレジスタの幅は、1 から 64 の間であれば任意に設定できます。スレーブインターフェイスのデータ幅と VisualApplets パラメータの実際のレジスタ幅の間のマッピングは、自動的に行われます。レジスタの幅がレジスタインターフェイスの幅より大きい場合、ランタイムソフトウェアはアクセスを自動的に分割します。これにより、単一のパラメータが複数のレジスタアドレスを占有することになります。

  5. 画像クラスがサポートするすべてのパラメータを定義し終えるまで、手順 2 ~ 4 を繰り返します。

    'Setting up ImgIn Ports'、'Defining Image Protocols for an ImgIn Interface Class'、および 'Defining Additional Parameters for an ImgIn Interface Class' で説明されているすべての手順を実行すると、最初の ImgIn インターフェイスクラスの設定が完了します。

  6. さらに ImgIn インターフェイスクラスが必要な場合は、再度 'Setting up ImgOut Ports' から始めて次の ImgIn インターフェイスクラスを定義します。

[注] 必要な数の ImgIn インターフェイスクラスを定義する

必要な数のインターフェイスクラスを定義できます。次の ImgIn インターフェイスクラスを設定するには、セクション 'Setting up ImgIn Ports' で説明されている手順を再度実行します。

必要な ImgOut インターフェイスの説明の入力

VA IP コアの ImgOut インターフェイス

画像ストリーミングポート ImgOut は、VA IP コアから周辺の FPGA ロジックに画像データを書き込むための汎用画像通信インターフェイスです。ImgOut ポートは、シンプルな FIFO インターフェイスと追加のパラメータポートで構成されています。インターフェイスポートは徹底的にパラメータ化されています。既存のパラメータに加えて、接続された FPGA ロジックにパラメータを転送するための追加のレジスタを定義できます。

画像データは、ImgOut タイプのインターフェイスポートを介して VA IP コアから出力されます。ImgOut ポートの複数のクラスを定義でき、それぞれのクラスで複数のインスタンスを作成可能です。

画像出力インターフェイスのポートレイアウト
画像出力インターフェイスのポートレイアウト

図 197. 画像出力インターフェイスのポートレイアウト


次の表は、PORTID が対応する画像入力ポートクラスの名前であり、X が同じクラスの複数のポートを区別するためのポート番号であるインターフェイス信号の説明です。

ポート

方向

Width

説明

iPORTIDXClk では、 1 FIFO から読み取るためのクロックです。ポートが同期通信用に設定されている場合、この入力は無視されます。(ImgOut インターフェイスの設定については、'Defining ImgOut Interface Classes' を参照してください。)
ivPORTIDXData 出力 PORTIDWidth カスタム読み取り用データ
iPORTIDXRead では、 1

読み取りアクセスを実行します

iPORTIDXEndOfLine 出力 1 行の終わりを示します。このフラグが有効になっている場合、データにはピクセル値が含まれません。
iPORTIDXEndOfFrame 出力 1 フレームの終わりを示します。このフラグが有効になっている場合、データにはピクセル値が含まれません。フレーム終了信号は、行終了信号と一致している必要があります。
oPORTIDXFIFOEmpty 出力 1 出力FIFOは空です
ovPORTIDXFIFOCnt 出力

Ceil Log2(

PORTIDFIFODepth

)

出力FIFO内のワード数。この信号は、「ほぼ空(Almost Empty)」などのFIFOフラグを生成するために使用できます。
oPORTIDXReset 出力 1 プロセスのリセット信号
oPORTIDXEnable 出力 1 プロセスのイネーブル信号
ovPORTIDX_PARNAME_D 出力 S パラメータ PARNAME のデータ。Sは選択されたBit Widthによって異なります。この信号は、定義された各パラメータに対して生成されます。
oPORTIDX_PARNAME_Upd 出力 1 パラメータ PARNAME がランタイムソフトウェアから更新されたとき、この信号は1クロックサイクルの間「1」に設定されます。この信号は、定義された各パラメータに対して生成されます。
ovPORTIDX_FID_D 出力 Ceil Log2(N)。Ceil Log2(N)は、値(N-1)を表現するために必要なビット数です。 現在の画像データ形式を通知する事前定義済みパラメータ。Nはこのポートに指定された画像プロトコルの数です。

次の図は、簡単な例における ImgOut インターフェイスを通じた画像通信のタイミングを示しています。32ビットのグレーピクセル値が3個含まれる2行のフレームが転送されます。波形では、名前の部分 PORTIDX が imgout に置き換えられています。

画像出力ポートにおけるプロトコルを示す波形

図198. 画像出力ポートにおけるプロトコルを示す波形


サポートされている ImgOut フォーマット

単一の ImgOut ポートを介して、さまざまな異なるプロトコルを駆動できます。VisualAppletsは以下の画像フォーマットをサポートしています。

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

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

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

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

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

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

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

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

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

VA IP Coreを取り囲むプラットフォームデザインが画像通信チャネルの適切な構成をサポートしている限り、これらのフォーマットの任意の組み合わせをサポートするように ImgOut インターフェイスクラスを定義できます。

ImgOut インターフェイスクラスの定義

さまざまなクラスの ImgOut インターフェイスを定義できます。これらのインターフェイスクラスは、サポートされる画像プロトコルの数と種類、サポートされるデータ幅、使用されるクロック信号、およびその他多くの面で異なる場合があります。各 ImgOut インターフェイスクラスは、VA IP Core上で複数存在することができます。

eVA IP コアの例

図199. eVA IP Coreの例


上の図の例では、2つの ImgIn クラスと2つの ImgOut クラスを示しています。両方のクラスの複数のインスタンスが利用可能です。このVA IP Coreは、ImgIn_A クラスの ImgIn ポートを7つ、ImgIn_B クラスの ImgIn ポートを5つ、ImgOut_a クラスの ImgOut ポートを2つ、および ImgOut_b クラスの ImgOut ポートを5つ提供します。

[注] VisualApplets 内の関連オペレーター

定義された各ImgOutクラスに対して、後で1つ以上のプラットフォーム固有のVisualApplets ImgOutオペレータを定義できます(詳細は 'ハードウェア固有のオペレータの定義' を参照)。これらのオペレータは、(IPコアの統合後)VisualApplets内でインスタンス化され、インターフェイスを実装できます。同じ構成(クラス)のインターフェイスポートが複数存在する場合、対応するオペレータのインスタンスは、VisualAppletsのリソース管理によって制御されて、そのいずれにも接続できます。

ImgOut ポートのセットアップ

VA IP Coreから周囲のFPGAデザインへの画像ストリーミングを可能にするポートを定義するには:

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

  2. プラス アイコンをクリックします。

  3. Base Name フィールドに、定義する ImgOut インターフェイスクラスの名前を入力します。フィールドをダブルクリックして入力します。

  4. Multiplicity フィールドで、VA IP Core上に持たせたいこのクラスの ImgOut インターフェイスの数を定義します。フィールドをダブルクリックして入力します。

    定義された ImgOut ポート(この例では、ImgOutGray クラスの3つのインターフェース)が、IP コアのグラフィカル表現にすぐに表示されます。

  5. ImgOut インターフェースクラスのその他の Property を定義します。

    Flow control {Yes,No}:

    • Yes: Yes を選択すると、出力データを一時停止するためのフロー制御機構が実装されます。Value を Yes にすると、VisualApplets デザインは任意の期間にわたって出力 FIFO からの読み出しをブロックできるようになります。FIFO full 信号は、これ以上データを書き込めないことを示します。

    • NO: No を選択すると、出力データをブロックするためのフロー制御機構は実装されません。

    Sync. mode: このパラメータは、画像インターフェースクロック(ImgOut ポート上の iPORTIDXClk)とデザインクロック(IP コア上の iDesignClk)の関係を示します。以下の値を使用できます。

    • SyncToDesignClk – インターフェースポートは iDesignClk と同期します。ImgOut ポート上の外部クロック入力は無視されます。

    • SyncToDesignClk2x – インターフェースポートは iDesignClk2x と同期します。ImgOut ポート上の外部クロック入力は無視されます。

    [注] ダブルピクセル深度が利用可能

    ImgOut ポートに iDesignClk2x を使用する場合、port ov..Data に定義するビット深度の2倍のビット深度を持つ画像プロトコルを定義できます(つまり、Bit Width と Parallelism の積を2倍のサイズにすることができます)。この場合、システムによって係数 2 の自動 parallel-up が実行されます。

    • Async – 非同期インターフェース:インターフェースポートは、ImgOut インターフェースの外部クロック入力と同期します。

    Async を選択する場合は、次の操作を行う必要があります。

    • ImgOut インターフェースの iPortIDXClk ポートでクロック信号を供給し、さらに

    • 合成制約(制約ファイル)でクロックドメイン遷移制約を定義します。

    [注] ダブルピクセル深度が利用可能

    ImgOut ポートに iDesignClk2x を使用する場合、ov..Data ポートに定義するビット深度の2倍のビット深度を持つ画像プロトコルを定義できます(つまり、Bit Width と Parallelism の積を2倍のサイズにすることができます)。この場合、システムによって係数 2 の自動 parallel-up が実行されます。

    [注] iDesignClk または iDesignClk2x を使用する

    Basler は、可能な限り同期に iDesignClk または iDesignClk2x を使用することを推奨しています。

    Fifo depth: 接続された Visual Applets インターフェースオペレーターによって少なくとも実装される必要のある、出力データ用バッファ FIFO のデプスをここで定義します。値は、15 から 1023 の範囲の 2 のべき乗マイナス 1 である必要があります。

    Port width: 画像データポートの幅をここで定義します。

ImgOut インターフェースクラスの画像プロトコルを定義する

この ImgOut インターフェースクラスがサポートする画像プロトコルを定義する必要があります。指定したいすべてのプロトコルが揃うまで、プロトコルを1つずつ定義していきます。

[注] VisualApplets 内の関連オペレーター

VA IP コアを FPGA デザインに統合した後、画像処理アプリケーションの開発者は VisualApplets で ImgOut オペレーターをインスタンス化し、ImgOut インターフェース(およびオペレーター自身)によってサポートされるプロトコルのうちどれが、特定のアプリケーション内のこのオペレーターインスタンスによって実装されるかを定義します。

  1. Format 列の矢印をクリックし、フォーマットリストから希望のフォーマットを選択します。

    サポートされている画像フォーマットの詳細な説明については、'Supported ImgOut Formats'を参照してください。

  2. Pix.Width 列のフィールドをダブルクリックします。

    必要なピクセルデータ Bit Width を入力します(値の範囲:[1..64])。

    ピクセルデータ幅は最大 64 bit に制限されます。グレー以外のすべてのカラーフォーマットのピクセルデータ幅は 3 の倍数である必要があり、最大 63 bit に制限されます。

  3. Parall 列のフィールドをダブルクリックします。必要な Parallelism を入力します。

    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 the 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 (Port width, see above) must follow certain rules:

    • すべての P ピクセルのデータは、長さ N の単一ワードに収まる必要があります。データは LSB アライメントで保存されます。つまり、ピクセル幅 Z(グレーの場合は Z=X、カラーの場合は 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が青の役割を担います。

  4. Dimension列の矢印をクリックして、定義しているプロトコルの画像ディメンションを選択します。

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

    • Area (デフォルト):画像は、end-of-line マーカーおよび end-of-frame マーカーによって構造化されます。VisualApplets では、画像ディメンション Area は「2D」と呼ばれます。

    • Line:画像は end-of-line マーカーによって構造化されます。入力されたラインをフレームに分割する end-of-frame マーカーはありません。VisualApplets では、画像ディメンション Line は「1D」と呼ばれます。

    • Raw:入力された画像データをラインやフレームに分割する end-of-line マーカーも end-of-frame マーカーもありません。画像入力ストリームは、幅 1 ピクセルのエンドレスなピクセルストリームで構成されます。VisualApplets では、画像ディメンション Raw は「0D」と呼ばれます。ラインカメラは 0-D 画像ソースになる可能性があります。

  5. Signedness列の矢印をクリックし、定義しているプロトコルの画像ディメンションを選択します。

    • Unsigned (デフォルト):ピクセルデータは、符号なしピクセルコンポーネントとしてパッキングされます。

    • Signed:ピクセルデータは、符号付きピクセルコンポーネントとしてパッキングされます。

  6. 画像クラスがサポートするように設定するすべての画像プロトコルを定義し終えるまで、手順1〜5を繰り返します。

[注] 画像プロトコル定義の内部ID

カーネルサイズが 1x1 であることが暗黙的に前提とされています。リストされた各プロトコルには番号が付けられ、リストはゼロから始まります。これらの番号が、特定の ImgOut クラスのプロトコル ID を形成します。ID は GUI に表示されません。したがって、定義する各 ImgOut クラスには、定義した画像プロトコルの内部 ID リストが存在します。

次のステップのいずれかで、VisualApplets の ImgOut オペレーターを定義できます。これらのオペレーターのインスタンスを定義済みの ImgOut クラスに接続できます(オペレーターの定義方法の詳細については、'Defining Hardware-Specific Operators'を参照してください)。各 ImgOut オペレーターには、該当する画像ポートに対して指定したすべての画像プロトコル、またはそのサブセットを割り当てることができます。

VisualApplets では、ImgOut オペレーターによって、VisualApplets ユーザーがオプションのリストから画像フォーマットを選択できるパラメータが提供されます。選択に応じて、対応する ID が関連する IP コアの ImgOut インターフェースポート(ov..FID_D)に割り当てられます。これにより、接続されたグルーロジックは、選択されたフォーマットに応じてその挙動を適応させることができます。

ImgOut インターフェースクラスの追加パラメータを定義する

ImgOut インターフェイスクラスに追加のパラメータを定義できます。これらの(ダイナミック)パラメータは、実行時(ランタイム)に設定および再設定が可能です。 これらには、ランタイムインターフェイス(「Runtime Software Interface」を参照)を介してアクセスできます。

実行時には、VA IP Coreのレジスタスレーブインターフェイス(「Register Slave Interface」を参照)を介して通信が行われます。

ovPORTIDX_PARNAME_D: パラメータ PARNAME のデータ。方向:Out。Bit Widthは以下のように定義できます。この信号は、定義されたパラメータごとに生成されます。

oPORTIDX_PARNAME_Upd: 方向: 出力(Out)。Bit Width: 1。この信号は、パラメータPARNAMEがランタイムソフトウェアから更新されたときに、1クロックサイクルの間「1」に設定されます。この信号は、定義された各パラメータに対して生成されます。

ImgOut インターフェイスクラスに追加のパラメータを定義するには:

  1. プログラムウィンドウの Parameter ports エリアに移動します。

  2. プラス アイコンをクリックします。

  3. Name フィールドに、定義するパラメータの名前を入力します。フィールドをダブルクリックして入力します。

  4. Width フィールドで、パラメータポートの幅 {1,64} を定義します。フィールドをダブルクリックして入力します。

    [注] スレーブインターフェイスデータ幅と実際のレジスタ幅の間のマッピング

    レジスタインターフェイスを介してアクセスされるレジスタの幅は、1 から 64 の間であれば任意に設定できます。スレーブインターフェイスのデータ幅と VisualApplets パラメータの実際のレジスタ幅の間のマッピングは、自動的に行われます。レジスタの幅がレジスタインターフェイスの幅より大きい場合、ランタイムソフトウェアはアクセスを自動的に分割します。これにより、単一のパラメータが複数のレジスタアドレスを占有することになります。

  5. 画像クラスがサポートするすべてのパラメータを定義し終えるまで、手順 2 ~ 4 を繰り返します。

    'ImgOut ポートの設定'、'ImgOut インターフェイスクラスのImage Protocolsの定義'、および 'ImgOut インターフェイスクラスの追加パラメータの定義' に記載されているすべての手順を実行すると、最初の ImgOut インターフェイスクラスの設定が完了します。

  6. さらに ImgOut インターフェイスクラスが必要な場合は、再び 'ImgOut ポートの設定' から始めて、次の ImgOut インターフェイスクラスを定義します。

[注] 必要な数の ImgOut インターフェイスクラスを定義する

必要な数のインターフェイスクラスを定義できます。次の ImgOut インターフェイスクラスを設定するには、再び 'ImgOut ポートの設定' に記載されている手順から始めてください。

GPIO定義の入力

汎用信号IN(GPI)および汎用信号OUT(GPO)は、VA IP Coreに入出力される場合があります。これらの信号は、トリガおよびプロセス制御に使用できます。

以下のように設定できるGPIおよびGPO信号の数。

eVAプラットフォーム記述で定義されたGPIまたはGPO信号には、VA IP Coreに対応する入力ポートまたは出力ポートがあります。NAME がVisualAppletsに表示されるGPIまたはGPO信号の名前である場合、信号ポートには次の名前が付けられます:

  • 幅1の入力信号の場合は iSig_NAME

  • 幅1の出力信号の場合は oSig_NAME

専用の I/O 信号はすべて、クロック iDesignClk と同期します。

ポート 方向 Width 説明
iSig_NAME では、 1 GPIポート上の入力信号
oSig_NAME 出力 1 GPOポート上の出力信号

VA IP CoreのGPIポートを定義するには:

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

  2. ペインの 汎用入力信号(General Purpose Input Signals) 領域で、プラスをクリックします アイコンをクリックします。

  3. 表示されたフィールドに、定義するGPIポートの名前を入力します。フィールドをダブルクリックして入力します。

  4. VA IP Coreで使用可能にしたいすべてのGPIポートを定義し終えるまで、ステップ3と4を繰り返します。

  5. General Purpose Output Signalsエリアに移動します。

  6. プラス アイコンをクリックします。

  7. 表示されたフィールドに、定義するGPOポートの名前を入力します。フィールドをダブルクリックして入力します。

  8. VA IP Coreで使用可能にしたいすべてのGPOポートを定義し終えるまで、ステップ7と8を繰り返します。

    定義したGPIポートとGPOポートは、IP Coreのグラフィカル表現に即座に反映されます。

[注] VisualApplets 内の関連オペレーター

GPI信号およびGPO信号については、後から1つまたは複数のプラットフォーム固有のVisualApplets GPIOオペレーターを定義できます(詳細は「ハードウェア固有のオペレーターの定義」を参照してください)。これらのオペレーターは、1つまたは複数のGPIOリソースへのコネクタで構成されます。

これらのオペレーターは、(IP Coreの統合後に)VisualApplets内でインスタンス化し、IP Coreの1つまたは複数のGPIポートおよび/またはGPOポートへのアクセスを実装できます。VisualApplets環境では、リソース競合のチェックが行われます(同じ入力/出力ピンを2つのオペレーターインスタンスで同時に使用することはできません)。

必要なMemoryインターフェイスの定義

抽象化されたメモリインターフェースを介して、VA IP Coreを外部メモリに接続できます。単一のインターフェースメカニズムにより、あらゆる種類のメモリを接続可能です。使用するメモリコントローラーに合わせて、eVAメモリインターフェースプロトコルをグルーロジックに適応させるだけです。

VA IP Coreで使用可能なメモリインターフェースポートの数を設定できます。ポートごとに、インターフェースのProperty(アドレスおよびデータ幅など)を個別に定義できます。

eVA IPコアのMemoryインターフェイス

イメージバッファオペレーターを使用する場合、VisualAppletsは外部メモリへのアクセスを必要とします。ほとんどの場合、これは複数のRAMバンクになります。メモリインターフェースポートはVisualAppletsのデザインエントリ内では表示されません。ただし、外部メモリを使用するオペレーター(ImageBufferなど)は、VisualAppletsのリソース管理によって処理されるRAMと呼ばれる抽象化されたリソースを使用します。

eVAメモリインターフェースは、単一のインターフェースメカニズムを介してさまざまなメモリアーキテクチャを接続できるように設計されています。この抽象化されたインターフェースは基本的にスレーブインターフェースであり、外部メモリコントローラーがアクセスをマスターとして制御します。スレーブは、書き込みコマンドおよび読み取りコマンド用の独立したFIFOインターフェースを介して、書き込みアクセスまたは読み取りアクセスを要求します。接続されたマスターは、コマンドの取得を認識(アノレッジ)する必要があり、いつでもアクセスを実行できます。フラグインターフェースにより、要求されたアクセスがいつ実行されたかをスレーブが検知できるようになります。取得待ちのコマンド数など、追加情報のためのオプション信号も用意されています。これらの信号は、メモリコントローラーマスターがメモリへのアクセスを最適化するのに役立ちます。

eVAフレームワークは、複数のメモリポートで動作可能です。結果として得られるVA IP CoreのI/Oポートには、末尾にXが付加されます。ここで、Xはメモリインターフェースチャネルの番号です。

Xがインターフェースポートのインデックスである場合のメモリインターフェースのポートレイアウト

図200:Xがインターフェースポートのインデックスである場合のメモリインターフェースのポートレイアウト


  • 非同期インターフェースが指定されている場合、すべてのI/Oは外部から供給されるクロックiMemClkXと同期します。または、同期モードとして、すべてのI/OがiDesignClkと同期するSyncToDesignClk、またはI/OがiDesignClk2xと同期するSyncToDesignClk2xを指定することもできます。

[注] iDesignClk2xを推奨

Baslerでは、メモリポートでiDesignClk2xクロック信号を使用することを推奨しています。

  • 書き込み要求と読み取り要求は同時に発生する可能性があり、メモリへの書き込みデータパスと読み取りデータパスは完全に分離されています。

  • 書き込みアクセスは、ポートovMemWrDataX、ovMemWrAddrX、ovMemWrFlagX、およびoMemWrReqXを使用して要求されます。これらは以下では書き込みコマンドと呼ばれます。

  • 読み取りアクセスは、ポートovMemRdAddrX、ovMemRdFlagX、oMemRdReqXを使用して要求されます。これらは以下では読み取りコマンドと呼ばれます。

  • アクセスコマンドが取得されると、コントローラーはそれを認識(アノレッジ)します。認識(書き込みの場合はiMemWrAckX、読み取りの場合はiMemRdAckX)の後、次のクロックティックで次のコマンドを提供できます。コマンドは対応する要求ポート(書き込みの場合はoMemWrReqX、読み取りの場合はoMemRdReqX)によって通知されます。

  • VAオペレーターによっては、アクセスにフラグ(ovMemWrFlagX、ovMemRdFlagX)のタグ付けが必要な場合があります。アクセスが実行された後、コントローラーはこのフラグをメモリインターフェース(ivMemWrFlagX、ivMemRdFlagX)に返す必要があります。提供する必要があるタグの最小幅は次のとおりです。

    • MemWrFlagWidth >= 4

    • MemRdFlagWidth >= 8

次の表は、複数のメモリポートを区別するためのポート番号であるXを含むメモリインターフェースポートの詳細な説明を示しています。

ポート

方向

Width

説明

iMemClkX

では、

1

メモリインターフェースクロック。ポートが同期通信用に設定されている場合、この入力は無視されます。

ovMemWrDataX

出力

MemDataWidthX

メモリコントローラへの書き込みデータ出力

ovMemWrAddrX

出力

MemAddrWidthX

書き込みアドレス

ovMemWrFlagX

出力

MemWrFlagWidthX

書き込みフラグ出力

oMemWrReqX

出力

1

書き込み要求

iMemWrAckX

では、

1

書き込みデータがメモリコントローラによって取得されたことの確認

oMemWrAlmostEmptyX

出力

1

単一の書き込みコマンドのみ利用可能

ovMemWrCntX

出力

MemWrCntWidthX

利用可能な書き込みコマンドの数

ivMemWrFlagX

では、

MemWrFlagWidthX

コントローラからの書き込みフラグ出力

iMemWrFlagValidX

では、

1

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

ovMemRdAddrX

出力

MemAddrWidthX

読み出しアドレス出力

ovMemRdFlagX

出力

MemRdFlagWidthX

読み出しフラグ出力

oMemRdReqX

出力

1

読み出し要求

iMemRdAckX

では、

1

読み出しアドレスがメモリコントローラによって受け付けられたことを確認します

oMemRdAlmostEmptyX

出力

1

利用可能な読み出しアドレスは1つのみ

ovMemRdCntX

出力

MemRdCntWidthX

利用可能な読み出しアドレスの数

ivMemRdFlagX

では、

MemRdFlagWidthX

読み出しフラグ入力 - iMemRdDataValidXがアサートされている場合のみ有効です

ivMemRdDataX

では、

MemDataWidthX

読み出しデータ入力

iMemRdDataValidX

では、

1

読み出しデータ有効

次の図は、両方のアクセスが重なり合う書き込みおよび読み出しアクセスのインターフェイスプロトコルを示しています。簡略化のため、読み出しレイテンシが2クロックサイクルの固定メモリコントローラを想定しています。

メモリインターフェイスプロトコルを示す波形

図 201:メモリインターフェイスプロトコルを示す波形


Memoryインターフェイスの定義

さまざまなクラスのメモリインターフェイスを定義できます。これらのインターフェイスクラスは、サポートされるデータ幅、アドレス、使用されるクロック信号、およびその他の多くの面で異なる場合があります。各メモリインターフェイスクラスは、VA IP Core上で複数利用できる場合があります。

VA IP Coreの例

図 202:VA IP Coreの例


(上の図の)VA IP Coreの例は、2つのメモリインターフェイスクラスを示しています。両方のクラスの複数のインスタンスが利用可能です。このVA IP Coreは、インターフェイスクラス MemIF_A のメモリインターフェイスを1つ、インターフェイスクラス MemIF_B のメモリインターフェイスを3つ提供します。

VA IP Coreのメモリインターフェイスを定義するには:

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

  2. プラス アイコンをクリックします。

  3. Memory Typeフィールドに、定義するメモリインターフェイスクラスの名前を入力します。フィールドをダブルクリックして入力します。

  4. Multiplicityフィールドで、このクラスのメモリインターフェイスをVA IPコア上にいくつ作成するかを定義します。フィールドをダブルクリックして入力します。

    定義されたメモリインターフェイス(この例では、MemIF_Aクラスの6つのインターフェイス)が、IPコアのグラフィカル表現にすぐに表示されます:

  5. メモリインターフェイスクラスのその他のPropertyを定義します:

    Data width: メモリインターフェイスクラスのデータ幅を入力します。

    Address width: アドレス幅をここに入力します。

    Write flags count: ovMemWrFlagXの幅をここに入力します(最小幅:4)

    Read flags count: ovMemRdFlagXの幅をここに入力します(最小幅:8)

    一部のVisualAppletsオペレーターでは、アクセスにフラグ(ovMemWrFlagX、ovMemRdFlagX)によるタグ付けが必要です。アクセスが実行された後、コントローラーはこのフラグをメモリインターフェイス(ivMemWrFlagX、ivMemRdFlagX)に返す必要があります。提供する必要があるタグの最小幅は、MemWrFlagWidth >= 4、MemRdFlagWidth >= 8 です。

    Sync. mode: このパラメーターは、メモリインターフェイスのクロック(メモリインターフェイス上のiMemClkX)とデザインクロック(IPコア上のiDesignClk)の関係を示します。以下の値が可能です:

    • SyncToDesignClk – インターフェイスポートはiDesignClkと同期して動作します。インターフェイスクロックポートへの外部クロック入力は無視されます。

    • SyncToDesignClk2x – インターフェイスポートはiDesignClk2xと同期します。インターフェイスクロックポートへの外部クロック入力は無視されます。

    [注] iDesignClk2xを推奨

    Baslerでは、メモリポートでiDesignClk2xクロック信号を使用することをお勧めします。

    • Async – 非同期インターフェイス:インターフェイスポートは、クロックポートiMemClkXへの外部クロック入力に同期されます。

      Asyncを選択する場合は、次を行う必要があります

      • メモリインターフェイスのiMemClkXポートでクロック信号を提供し、

      • 合成制約(制約ファイル)でクロックドメインスイッチを定義します。

    Max. pending read transfers: コア外のリードパイプラインにおけるデータワードの最大数をここに入力します。この値は、受信リードデータの最小バッファ深度を計算するうえで重要です。

  6. 手順2~5を繰り返して、必要なすべてのメモリインターフェイスクラスを定義します。

ハードウェア固有のオペレータの定義

VisualAppletsには、画像処理アプリケーションを定義するための多数のオペレーターライブラリが用意されています。1つを除き、すべてのライブラリはハードウェアに依存しないため、含まれるオペレーターはあらゆるターゲットハードウェア向けのあらゆるデザインで使用できます。

唯一の例外は、VA IPコアを囲むハードウェアに直接接続するオペレーターです:ImgInインターフェイス、ImgOutインターフェイス、およびメモリインターフェイスです。これらはハードウェア固有のオペレーターであり、IPコア自体と一緒に設計する必要があります。

ImgInオペレーターの定義

ターゲットハードウェアのImgInオペレーターを定義するには:

  1. VisualApplets Operatorsタブに移動します。

  2. ImgIn Operatorsタブに移動します。

    ImgIn Operatorsタブの下に、あらかじめ定義したImgInインターフェイスクラスのリストが表示されます。

    (この例では、ImgIn_AとImgIn_Bです。)

  3. 接続するImgInオペレーターを定義するImgInインターフェイスクラスをクリックします。

  4. プラス アイコンをクリックします。

    これで、このImgInインターフェイスクラスのオペレーターを定義するためのオプションが表示されます。

  5. Operatorフィールドに、定義するオペレーターの名前を入力します。フィールドをダブルクリックして入力します。

  6. Icon fileフィールドで、VisualAppletsのオペレーターのグラフィック表現に表示されるアイコンファイルへのパスを定義します。VisualAppletsでの完全なグラフィック表現の外観は、プログラムウィンドウの右上パネルで確認できます:

  7. フィールド ヘルプファイルで、オペレーターとそのパラメータを説明するHTMLヘルプファイルへのパスを定義します。プラスアイコンをクリックして、ファイルシステムからファイルを選択します。開始ファイルの *.html という名前は <nameofOperator>.html にする必要があり、最初に配置する必要があります。その他のファイルには、画像、CSSファイルなどが含まれます。

  8. このオペレーターに関する情報を含むファイルを複数追加する場合は、ステップ7を繰り返します。ファイルのバッチ(グラフィックファイルを含むHTMLファイルシステムなど)を一度に読み込むことができます。ここにリストした最初のHTMLファイルは、メインのヘルプファイル(ヘルプファイルシステムの起点)とみなされます。

    メインのヘルプファイルは、ユーザーがオペレーターをインスタンス化し、デザインウィンドウでオペレーターインスタンスをクリックしてF1キーを押すと、VisualAppletsのヘルプパネルに表示されます:

    Image protocol selectionパネルには、選択したインターフェイスクラスに関連付けられたイメージプロトコルが表示されます:

  9. このオペレーターでサポートするイメージプロトコルをここで選択します。

  10. 必要に応じて、最後の2つの列で、選択したイメージプロトコルの最大画像幅(maximal image width)と最大画像高さ(maximal image height)を定義します。

  11. ステップ4~10を繰り返して、選択したインターフェイスクラスに接続可能な追加のオペレーターを定義します。

  12. ステップ3~10を繰り返して、他のインターフェイスクラスのオペレーターを定義します。

ImgOutオペレーターの定義

ターゲットハードウェア用のImgOutオペレーターを定義するには:

  1. VisualApplets Operatorsタブに移動します。

  2. ImgOut Operatorsタブに移動します。

    ImgOut Operatorsタブの下に、あらかじめ定義したImgOutインターフェイスクラスのリストが表示されます。(この例では、ImgOut_aとImgOut_bです。)

  3. 接続するImgOutオペレーターを定義するImgOutインターフェイスクラスをクリックします。

  4. プラス アイコンをクリックします。

    これで、このImgOutインターフェイスクラスのオペレーターを定義するためのオプションが表示されます:

  5. Operatorフィールドに、定義するオペレーターの名前を入力します。フィールドをダブルクリックして入力します。

  6. Icon file フィールドで、VisualApplets内のオペレーターのグラフィック表現に表示されるアイコンファイルへのパスを指定します。VisualAppletsでの完全なグラフィック表現の外観は、プログラムウィンドウの右上ペインで確認できます:

  7. Help file フィールドで、オペレーターとそのパラメータを説明するHTMLヘルプファイルへのパスを指定します。プラスアイコンをクリックして、ファイルシステムからファイルを選択します。

  8. このオペレーターに関する情報を含むファイルを複数追加する場合は、手順7を繰り返します。グラフィックファイルを含むHTMLファイルシステムなどのファイルのバッチを1ステップで読み込むことができます。ここに最初にリストしたHTMLファイルがメインヘルプファイル(ヘルプファイルシステムの起点)とみなされます。

    ユーザーがオペレーターをインスタンス化し、デザインウィンドウ内のオペレーターインスタンスをクリックしてF1キーを押すと、メインヘルプファイルがVisualAppletsのヘルプパネルに表示されます。

    Image protocol selectionパネルには、選択したインターフェイスクラスに関連付けられたイメージプロトコルが表示されます:

  9. このオペレーターでサポートするイメージプロトコルをここで選択します。

  10. 必要に応じて、最後の2つの列で、選択したイメージプロトコルの最大画像幅(maximal image width)と最大画像高さ(maximal image height)を定義します。

  11. ステップ4~10を繰り返して、選択したインターフェイスクラスに接続可能な追加のオペレーターを定義します。

  12. ステップ3~10を繰り返して、他のインターフェイスクラスのオペレーターを定義します。

GPIOオペレータの定義

設定可能な数のGPIポートおよびGPOポートを提供するGPIOオペレーターを定義できます。画像処理アプリケーションを設計する際、ユーザーはこれらのポートをeVA IP Coreの実際のGPIおよびGPOポートに接続できます。

ターゲットハードウェア用のGPIOオペレーターを定義するには:

  1. VisualApplets Operatorsタブに移動します。

  2. GPIO Operators タブに移動します。

  3. プラス アイコンをクリックします。

  4. 開いたフィールドに、定義するオペレーターの名前を入力します。フィールドをダブルクリックして入力します。

  5. Icon file フィールドで、VisualApplets内のオペレーターのグラフィック表現に表示されるアイコンファイルへのパスを指定します。VisualAppletsでの完全なグラフィック表現の外観は、プログラムウィンドウの右上ペインで確認できます。

  6. Help file フィールドで、オペレーターとそのパラメータを説明するHTMLヘルプファイルへのパスを指定します。プラスアイコンをクリックして、ファイルシステムからファイルを選択します。

  7. このオペレーターに関する情報を含むファイルを複数追加する場合は、手順6を繰り返します。グラフィックファイルを含むHTMLファイルシステムなどのファイルのバッチを1ステップで読み込むことができます。ここに最初にリストしたHTMLファイルがメインヘルプファイル(ヘルプファイルシステムの起点)とみなされます。

    ユーザーがオペレーターをインスタンス化し、デザインウィンドウ内のオペレーターインスタンスをクリックしてF1キーを押すと、メインヘルプファイルがVisualAppletsのヘルプパネルに表示されます。

    GPIO port selection ペインには、eVA IP Coreに対して定義したGPIおよびGPOインターフェースが表示されます:

  8. このオペレーターの接続先とするIPコアのGPIポートおよびGPOポートをここで選択します。

  9. 手順3〜8を繰り返して、IPコアのGPIおよびGPOポートに接続可能な追加のオペレーターを定義します。

IPコア用のVHDLコードの生成

「Common Interfaces for all Platforms」から「Defining Hardware-Specific Operators」のセクションで説明されているようにIP Coreブラックボックスを定義したら、IP Coreブラックボックス(VHDL)をビルドできます。「Embedding and Simulating the IP core」では、このブラックボックスをFPGAデザインに統合する方法について説明します。

IP Coreブラックボックスと共に、eVA Designer は、定義した個々のインターフェース用のシミュレーション環境と、それに応じたテストベンチを自動的に生成します。「Embedding and Simulating the IP core」のセクションでは、これらの使用方法について詳しく説明しています。

IPコアブラックボックスを生成するために、ビルドフローの詳細を指定する必要はありません。また、後段階で定義する可能性のあるハードウェア固有のオペレーターについても同様です。

IP Coreブラックボックスを生成するには:

  1. 「Common Interfaces for all Platforms」から「Defining Hardware-Specific Operators」のセクションで説明されているように、ターゲットハードウェアおよび必要なIP Coreインターフェースに関するすべての情報を入力します。

  2. ハードウェアおよびコアインターフェースの説明が含まれるXMLまたは *.eva ファイルを開きます。

  3. Tools メニューから、Generate VHDL … を選択します。

  4. 生成されたファイルを保存するための専用ディレクトリを作成します。

  5. Select Directory をクリックします。これで、関連するすべてのファイルが自動的に生成されます。生成されたファイルは、選択したディレクトリに保存されます:

  6. 「Embedding and Simulating the IP core」のセクションの手順に従ってください。以下について学習します:

    1. (作成したばかりの)IPコアブラックボックスをFPGAデザイン(VHDL)に統合すること、

    2. VHDL統合をサポートする刺激ファイルとシミュレーションファイルを使用します。