IPインタフェースを定義する
- 更新日2025-03-06
- 27分で読める
IPをコンポーネントレベルIP (CLIP) 項目としてLabVIEWプロジェクトに追加するには、IPおよびFPGAモジュールのI/Oを定義するための宣言XMLファイルが必要です。宣言XMLファイルはIPの要素を示します。FPGAモジュールは、このファイルを使用してIPをLabVIEWプロジェクトに追加します。
XMLの使用については、www.w3.org/XMLを参照してください。
宣言ファイルを作成する
宣言ファイルの1行目にはXMLのバージョンが含まれます。ファイル内のすべてのタグは、以下に示すように<CLIPDeclaration>タグで囲む必要があります。
<?xml version="1.0"?> <CLIPDeclaration Name="My VHDL IP"> <!-- タグをここに挿入 --> </CLIPDeclaration>
| タグ | 必須? | 親タグ | 親タグ内のタグ数 | 説明 |
|---|---|---|---|---|
| CLIPDeclaration | はい | — | — | すべてのCLIPの定義は、このタグの中に含まれる必要があります。Nameは、LabVIEWが表示するCLIP名を定義する必須の属性です。 |
| FormatVersion | はい | CLIPDeclaration | 1 | この宣言XMLファイルで使用するCLIPタグのバージョンを定義します。FormatVersionを4.3.に設定します。 |
| Description | いいえ | CLIPDeclaration | 1 | コンポーネントレベルIPプロパティダイアログボックスの一般ページにこのCLIPの説明を表示します。 |
| SupportedDeviceFamilies | いいえ | CLIPDeclaration | 1 | カンマ区切りのリストを使用して、サポートされているデバイスシリーズを定義します。LabVIEWで認識されるデバイスは、Spartan-3、Spartan-3E、Spartan-6、Virtex-II、Virtex-II Pro、Virtex-5、Virtex-6、Virtex-7、Zynq、Kintex-7です。 すべてのシリーズをサポートするために、Unlimitedを指定することもできます。 |
| CompatibleCLIPSocketList | いいえ | CLIPDeclaration | 1 | ソケット付きCLIPの場合、CLIPがサポートするソケットを指定します。 |
| Socket | はい | CompatibleCLIPSocketList | 1以上 | ソケット付きCLIPの場合、互換性のあるソケットの名前を指定します。 |
| TopLevelEntityAndArchitecture | はい | CLIPDeclaration | 1 | トップレベルシンセシスおよびシミュレーションVHDLファイルの実体とアーキテクチャを指定します。 |
| SynthesisModel | はい | TopLevelEntityAndArchitecture | 1 | トップレベルシンセシスVHDLファイルの実体とアーキテクチャ名を指定します。 |
| Entity | はい | SynthesisModel | 1 | トップレベルシンセシスVHDLファイルの実体名を指定します。 |
| Architecture | いいえ | SynthesisModel | 1 | トップレベルシンセシスVHDLファイルのアーキテクチャ名を指定します。 |
| SimulationModel | いいえ | TopLevelEntityAndArchitecture | 1 | トップレベルシミュレーションVHDLファイルの実体とアーキテクチャ名を指定します。 |
| Entity | はい | SimulationModel | 1 | トップレベルシミュレーションVHDLファイルの実体名を指定します。 |
| Architecture | いいえ | SimulationModel | 1 | トップレベルシミュレーションVHDLファイルのアーキテクチャ名を指定します。 |
| InterfaceList | はい | CLIPDeclaration | 1 | 1つまたは複数のインタフェース定義が含まれます。インタフェースリストはネスト化できません。インタフェースリストは1つのみしか定義できません。 |
| Interface | はい | InterfaceList | 1以上 | CLIPで利用可能なすべてのI/O、クロック、およびその他の信号を定義します。インタフェースはネスト化できません。Nameは必須の属性です。 |
| InterfaceType | はい | Interface | 1 | FPGAでインタフェースが接続される場所を定義します。以下のいずれかの値を入力できます。
|
| SignalList | はい | Interface | 1 | 1つまたは複数の信号定義が含まれます。SignalListタグはネスト化できません。 |
| Signal | はい | SignalList | 1以上 | CLIPから取得可能な信号、またはCLIPが使用可能な信号を定義します。FPGAモジュールで表示の目的に使用されるName属性が含まれる必要があります。Name属性は文字で始まる必要があり、英数字、ピリオド、ダッシュ、および下線のみを含めることができます。デフォルトは、Signalタグで宣言するHDLNameです。 信号をCLIP IO階層に整理するには、名前の区切り文字としてピリオドを使用します。たとえば、A.InputおよびA.Outputという名前の信号は、プロジェクトでInputおよびOutput信号が含まれるAという名前のフォルダを作成します。 |
| Description | いいえ | Signal | 1 | 信号の詳細を指定します。 |
| HDLName | いいえ | Signal | 0または1 | VHDLファイルのI/O実体の名前を定義します。ポートのHDLNameは、トップレベルシンセシスファイルの名前と同じである必要があります。 |
| RequiredClockDomain | いいえ | Signal | 0または1 | 必須クロック領域を指定しない場合は、すべてのクロック領域のI/Oを使用できます。RequiredClockDomainの値は、他の場所にあるCLIP XMLファイルで定義したクロックの信号名と一致する必要があります。必須クロック領域を指定する場合は、このCLIP I/Oを使用するブロックダイアグラムのI/Oノードが指定したクロック領域内にある必要があります。I/Oノードが正しくないクロック領域にある場合、FPGA VIのコンパイル中にエラーが返されます。 |
| LeaveUndrivenIfNotUsedInLabVIEW | いいえ | Signal | 0または1 | VHDLファイルにデフォルト値がある時、トップレベルファイルで信号を駆動しないことを指定します。それ以外の場合、LabVIEWは、コード生成中にすべてのゼロの値を持つ信号を駆動します。 |
| HDLType | はい | Signal | 1 | 信号のVHDLポートタイプを指定します。std_logicとstd_logic_vectorのみがサポートされます。リセットおよびクロック信号はstd_logicのみです。 |
| UseInLabVIEWSingleCycleTimedLoop | いいえ | Signal | 0または1 | 有効な値は、NotAllowed、Allowed、Requiredです。デフォルト値は、Allowedです。このタグは、シングルサイクルタイミングループでCLIP I/Oを使用できる方法を指定します。シングルサイクルタイミングループでは、各クロックエッジで確実にデータがラッチされます。各クロックエッジでCLIPのIPが値を受信しようとする場合、このタグをRequiredに設定するとこの要件が強制されます。 |
| SpecificTargetClock | いいえ | Signal | 0または1 | CLIPクロックの必須クロック接続として、使用可能なFPGAターゲットベースクロックの1つを指定します。このタグの値は特定のFPGAターゲットベースクロックの名前です。FPGAターゲットベースクロックがプロジェクト内に存在し、宣言XMLファイルで指定された要求周波数範囲を満たしている必要があります。 |
| DataType | はい | Signal | 1 | 信号のデータタイプを定義します。信号がLabVIEWのインタフェース用の場合、データタイプはLabVIEWによるこの信号の表記法も定義します。信号がソケットインタフェース用の場合、データタイプはソケット内の信号のデータタイプに一致する必要があります。以下の子タグのいずれかを使用して、データタイプを定義します。
|
| Boolean | いいえ | DataTypeまたはArray | 親タグを参照 | VHDLコードがstd_logicを使用することを指定します。* |
| U8 | いいえ | DataType | 親タグを参照 | VHDLコードがstd_logic_vector(7 downto 0)を使用することを指定します。* |
| U16 | いいえ | DataType | 親タグを参照 | VHDLコードがstd_logic_vector(15 downto 0)を使用することを指定します。* |
| U32 | いいえ | DataType | 親タグを参照 | VHDLコードがstd_logic_vector(31 downto 0)を使用することを指定します。* |
| U64 | いいえ | DataType | 親タグを参照 | VHDLコードがstd_logic_vector(63 downto 0)を使用することを指定します。* |
| I8 | いいえ | DataType | 親タグを参照 | VHDLコードがstd_logic_vector(7 downto 0)を使用することを指定します。* |
| I16 | いいえ | DataType | 親タグを参照 | VHDLコードがstd_logic_vector(15 downto 0)を使用することを指定します。* |
| I32 | いいえ | DataType | 親タグを参照 | VHDLコードがstd_logic_vector(31 downto 0)を使用することを指定します。* |
| I64 | いいえ | DataType | 親タグを参照 | VHDLコードがstd_logic_vector(63 downto 0)を使用することを指定します。* |
| FXP | いいえ | DataType | 親タグを参照 | VHDLコードがstd_logic_vector(x downto 0)を使用することを指定します。ここで、xは[0,63]の範囲内にあります。* |
| WordLength | いいえ | FXP | 0または1 | FXP信号のワード長を指定します。サポート範囲は[1, 64]です。 |
| IntegerWordLength | いいえ | FXP | 0または1 | FXP信号の整数ワード長を指定します。サポート範囲は[-2048, 2047]です。 |
| Unsigned | いいえ | FXP | 0または1 | FXP信号が符号なしである場合、このタグを追加します。FXP信号が符号付きである場合、このタグを追加しません。 |
| Array | いいえ | DataType | 親タグを参照 | ブールデータタイプの配列を作成します。BooleanタグをArrayタグの中に含める必要があります。Arrayタグはソケット付きCLIPでのみ使用できます。 |
| Size | はい | Array | 1 | 配列サイズを指定します。 |
| Direction | いいえ | Signal | 0または1 | CLIPが信号データを受信または送信するかを指定します。以下の値から選択できます。
|
| SignalType | いいえ | Signal | 0または1 | 信号のタイプを示します。以下の値から選択できます。
|
| FreqInHertz | いいえ | Signal | 1 | 信号の周波数範囲を定義します。SignalTypeがclockに設定されている場合、FreqInHertzタグが必要です。 |
| Max | はい | FreqInHertz | 1 | SI表記でサポートされている最大を定義します。Maxタグは、FreqInHertzタグを含める場合に必要です。** |
| Min | いいえ | FreqInHertz | 0または1 | SI表記でサポートされている最小を定義します。Minの値を指定しないと、Min値はMax値と等しくなります。** |
| ImplementationList | はい | CLIPDeclaration | 1 | 含めるCLIPファイルを定義します。CLIPファイルが同じディレクトリにある必要はありません。ImplementationListタグは1つしか含めることができません。 |
| Path | はい | ImplementationList | 1以上 | IPのコンパイルに必要な実装ファイルを含むパスまたはディレクトリを定義します。ディレクトリのパスを指定してもそのサブディレクトリは認識されません。サブディレクトリは別のタグで定義する必要があります。Pathタグは、XMLファイルの相対パスまたは絶対パスを使用してください。 サブディレクトリへの相対パスを定義する際、2つの連続するピリオド (..) を使用して現在作業中のディレクトリの親ディレクトリを示し、1つのピリオド (.) を使用して現在作業中のディレクトリを示し、スラッシュまたは円記号 (/または\) を使用して次のサブディレクトリを入力します。たとえば、../folderA/fileB.vhdは、ディスク上のXMLファイルと同じ階層レベルにある、folderAディレクトリ内のfileB.vhdファイルを指します。たとえば、/folderA/fileB.vhdは、ディスク上のXMLファイルと同じ階層レベルにあるfolderAディレクトリ内のfileB.vhdファイルを指します。LabVIEWは無効なパスに対してエラーを返します。LabVIEWは、他のファイルまたはディレクトリタグがXMLファイルに存在しない限り、空のディレクトリが指定されてもエラーを返しません。Nameはこのタグの必須の属性で、シンセシスファイル名と同じである必要があります。 |
| MD5 | いいえ | Path | 1 | シンセシスファイルが修正されたかどうかを検出します。 |
| TopLevel | いいえ | Path | 0または1 | 現在のシンセシスファイルがトップレベルファイルであるかどうかを示します。トップレベルシンセシスファイルに成り得るVHDLファイルは、1つのみです。 |
| SimulationFileList | いいえ | Path | 1 | 特定のシンセシスファイルのシミュレーションファイルを定義します。1つのシンセシスファイルに追加できる<SimulationFileList>タグは、1つのみです。<SimulationModel>が存在している場合、このタグが必要となります。 |
| Path | いいえ | SimulationFileList | 1以上 | IPのコンパイルに必要なシミュレーションファイルを含むパスまたはディレクトリを定義します。ディレクトリのパスを指定してもそのサブディレクトリは認識されません。サブディレクトリは別のタグで定義する必要があります。Pathタグは、XMLファイルの相対パスまたは絶対パスを使用してください。 サブディレクトリへの相対パスを定義する際、2つの連続するピリオド (..) を使用して現在作業中のディレクトリの親ディレクトリを示し、1つのピリオド (.) を使用して現在作業中のディレクトリを示し、スラッシュまたは円記号 (/または\) を使用して次のサブディレクトリを入力します。たとえば、../folderA/fileB.vhdは、ディスク上のXMLファイルと同じ階層レベルにある、folderAディレクトリ内のfileB.vhdファイルを指します。たとえば、/folderA/fileB.vhdは、ディスク上のXMLファイルと同じ階層レベルにあるfolderAディレクトリ内のfileB.vhdファイルを指します。LabVIEWは無効なパスに対してエラーを返します。LabVIEWは、他のファイルまたはディレクトリタグがXMLファイルに存在しない限り、空のディレクトリが指定されてもエラーを返しません。このタグは、<SimulationModelType>がUser-definedの時に<SimulationModelType>の下で必須です。シミュレーションファイル名は、このタグのname属性として指定される必要があります。Nameは必須の属性です。 |
| SimulationModelType | はい | SimulationFileList | 1 | 特定のシンセシスファイルのシミュレーションモデルタイプを定義します。オプションは、Same as synthesis、User-defined、およびExclude from simulation modelです。ネットリストファイル以外のファイルの場合、デフォルトのオプションはSame as synthesisです。ネットリストファイルの場合、デフォルトのオプションはExclude from simulationで、Same as synthesisはサポートされません。 |
| NumberOfDCMsNeeded | いいえ | CLIPDeclaration | 0または1 | FPGAのデジタルクロックマネージャ (DCM) を特定の数だけ予約します。この数を使用して、コンパイル時にコードがインスタンス化できるDCMの数が決定されます。 |
| NumberOfMMCMsNeeded | いいえ | CLIPDeclaration | 0または1 | FPGAのMixed-Mode Clock Managers (MMCM) を特定の数だけ予約します。この数を使用して、コンパイル時にコードがインスタンス化できるMMCMの数が決定されます。 |
| NumberOfBufGsNeeded | いいえ | CLIPDeclaration | 0または1 | FPGAのBUFGを特定の数だけ予約します。この数を使用して、コンパイル時にコードがインスタンス化できるグローバルクロックネットの数が決定されます。 |
| DutyCycleRange | いいえ | Signal | 0または1 | クロックがサポートする最大および最小デューティサイクルを定義します。デフォルト値は50%です。値の後に%シンボルを含みます。 |
| PercentInHighMax | いいえ | DutyCycleRange | 0または1 | クロックがHIGHで維持される最大時間をパーセンテージで定義します。デフォルト値は50%です。値の後に%シンボルを含みます。** |
| PercentInHighMin | いいえ | DutyCycleRange | 0または1 | クロックがHIGHで維持される最小時間をパーセンテージで定義します。デフォルト値は50%です。値の後に%シンボルを含みます。** |
| AccuracyInPPM | In ToCLIP: いいえ In FromCLIP: はい | Signal | 0または1 | CLIPクロックの確度を100万分の1 (ppm) 単位で指定します。** |
| JitterInPicoSeconds | In ToCLIP: いいえ In FromCLIP: はい | Signal | 0または1 | CLIPクロックのジッタをピコ秒単位で指定します。** |
| GenericList | いいえ | CLIPDeclaration | 1 | VHDLジェネリックの情報を指定します。 |
| Generic | はい | GenericList | 1以上 | このタグの属性としてジェネリック名を指定します。 |
| Description | いいえ | Generic | 1 | ジェネリックの詳細を指定します。コンポーネントレベルIPプロパティダイアログボックスのジェネリックと構文のチェックページのメッセージボックスに詳細が表示されます。 |
| GenericType | はい | Generic | 1 | トップレベルシンセシスファイルからのジェネリックタイプを指定します。 |
| DefaultValue | はい | Generic | 1 | ジェネリックのデフォルト値を指定します。この値はトップレベルシンセシスファイルからの値です。コンポーネントレベルIPプロパティダイアログボックスのジェネリックと構文のチェックページまたはCLIPウィザードでDefaultValueをオーバーライドするために、別の値を指定することができます。 |
| SupportDerivedClocks | いいえ | Signal | 1 | このタグは、派生クロックをサポートする各FromCLIPクロックで必要となります。このタグが存在する場合は、SourceClockReadyHDLNameおよびDerivedClocksValidHDLNameも必要となります。このタグは、FromCLIPクロック信号のみで有効です。 |
| SourceClockReadyHDLName | いいえ | Signal | 1 | このタグは、SupportDerivedClocksタグを持つ各FromCLIPクロックで必要となります。これは、FromCLIP方向のクロックステータスタイプ信号のHDL名です。このHDL名が存在する場合、FromCLIPクロックが有効で自走であることを示します。一度アサートされると、この信号はDerivedClocksValid信号がアサートされるまでアサートされたままの状態になります。この信号のアサート解除は、FromCLIPクロックがもうすぐオフになることを示します。この信号のアサート解除後は、FromCLIPクロックをDerivedClocksValidHDLName信号がアサート解除になるまでオフにしてはいけません。 |
| DerivedClocksValidHDLName | はい | Signal | 1 | このタグは、SupportDerivedClocksタグを持つ各FromCLIPクロックで必要となります。これは、ToCLIP方向のクロックステータスタイプ信号のHDL名です。このHDL名が存在する場合、LabVIEW FPGAクロック生成回路で生成され、このFromCLIPクロックから供給されるすべての派生クロックが有効で自走であることを示します。この信号には、以下の2つの目的があります。
このタグは、派生クロックをサポートする各外部クロックで必要となります。 |
| SupportsGating | ToCLIP: はい In FromCLIP: いいえ | Signal | 1 | シングルサイクルタイミングループから間接的な有効信号の削除をサポートするには、各ToCLIPゲートクロックでこのタグが必要です。 |
| CyclesRequiredBeforeAsynchronousResetClears | ToCLIP: はい In FromCLIP: いいえ | Signal | 1 | 非同期リセットがアサート中に発生する必要がある、このクロックのクロックエッジ数を定義します。非同期リセットはクロックの実行が開始する前にアサートおよびアサート解除されるため、ビルド仕様が間接的な有効信号の解除を許可するように構成されている場合、このCLIPを使用するにはこの値を0にする必要があります。このクロックをリセット中に停止する可能性のある外部クロックと使用する場合は、この値も0にする必要があります。組込FIFOを使用するCLIPなど、CLIPが非同期リセット中に実行中のクロックが必要な場合、および設計で間接的な有効信号の削除が必要な場合は、ローカル非同期リセットを作成してこのローカルリセットがアサート中にダイアログがCLIPへのまたはCLIPからのアクセスを行うことを回避することを検討します。 |
| ReadBeforePlace | いいえ | Path | 1 | このタグは、1つ以上のXDCファイルに適用できます。XDCファイルには、Xilinx Vivadoツールチェーンで読み取られる制約が含まれています。ReadBeforePlaceタグのあるXDCファイルはPlaceプロセスを呼び出す直前にXilinx Vivadoツールチェーンで読み取られますが、ReadBeforePlaceタグのないXDCファイルはSynthesisプロセスを呼び出す直前にXilinx Vivadoツールチェーンで読み取られます。このタグは、CLIP FormatVersion 4.3以降を搭載するLabVIEW FPGA 2022以降で使用できます。このタグはウィザードでは設定されないため、手動で設定する必要があります。このタグは、Xilinx ISEツールチェーンで読み取られる制約を含むUCFファイルでは使用できません。 |
* このタグには値が含まれないため、オープンタグでスラッシュを使用するか、空のオープンとクローズタグを作成してください。たとえば、<Boolean />または<Boolean> </Boolean>を使用してブールデータタイプを示すことができます。
** CLIPパラメータに数値を入力する場合、小数点にはピリオドを使用する必要があります。小数点の記号としてコンマを使用すると、LabVIEWはXMLエラーを返します。
スキーマを使用してエラーを減らす
XMLスキーマファイルは、XMLファイルを特定の形式に制限する定義ファイルです。スキーマファイルは通常、XMLファイルを作成する際にXML編集ツールに追加できます。labview\FPGA\CLIP\SchemaディレクトリにあるCLIPDeclaration.xsdスキーマファイルを使用することで、ユーザ定義CLIPのCLIP宣言ファイルを作成する際に発生する構文およびフォーマットエラーを最小限に抑えることができます。
異なるディレクトリの複数の実装ファイルを処理する
CLIPコードを実装するために、複数のファイルを指定することができます。次の例で、実装するCLIPには、以下で示すディレクトリ構造に保存された5つのファイルがあります。
foo/myCLIPDeclaration.xml
foo/myTop.vhd
foo/mySide.vhd
foo/components/myLeftSubComponent.vhd
foo/components/myMiddleSubComponent.vhd
foo/components/myRightSubComponent.vhd
myCLIPDeclaration.xmlでは、相対パスを使用して、すべての5つのVHDLファイルがCLIPに必要であることを示すことができます。fooディレクトリの2つのVHDLファイル、およびcomponentsにあるすべてのファイルが必要であることを指定するために、以下のコードをXMLファイルに含めます。
<ImplementationList>
<Path Name="./myTop.vhd">
<TopLevel/></Path>
<Path Name="./mySide.vhd"></Path>
<Path Name="./components"></Path>
(
<Path Name="./components/myLeftSubComponent.vhd"></Path>
<Path Name="./components/myMiddleSubComponent.vhd"></Path>
<Path Name="./components/myRightSubComponent.vhd"></Path>
)
</ImplementationList>
CLIPインタフェース定義の例については、「CLIPチュートリアル パート2: インタフェースを定義する」を参照してください。