IPをコンポーネントレベルIP (CLIP) 項目としてLabVIEWプロジェクトに追加するには、IPおよびFPGAモジュールのI/Oを定義するための宣言XMLファイルが必要です。宣言XMLファイルはIPの要素を示します。FPGAモジュールは、このファイルを使用してIPをLabVIEWプロジェクトに追加します。

XMLの使用については、www.w3.org/XMLを参照してください。

宣言ファイルを作成する

メモ 一般的なエラーを回避できるように、コンポーネントレベルIPを構成ウィザードを使用してこの宣言ファイルを作成することを、NIは強く推奨します。以下の表には、コンポーネントレベルIPを構成ウィザードが生成するXMLタグのリファレンス情報が記載されています。

宣言ファイルの1行目にはXMLのバージョンが含まれます。ファイル内のすべてのタグは、以下に示すように<CLIPDeclaration>タグで囲む必要があります。

<?xml version="1.0"?> <CLIPDeclaration Name="My VHDL IP"> <!-- タグをここに挿入 --> </CLIPDeclaration>

以下の表は、宣言ファイルに使用できるXMLタグの定義を示します。
タグ必須?親タグ親タグ内のタグ数説明
CLIPDeclarationはいすべてのCLIPの定義は、このタグの中に含まれる必要があります。Nameは、LabVIEWが表示するCLIP名を定義する必須の属性です。
FormatVersionはいCLIPDeclaration1この宣言XMLファイルで使用するCLIPタグのバージョンを定義します。FormatVersionを4.3.に設定します。
DescriptionいいえCLIPDeclaration1コンポーネントレベルIPプロパティダイアログボックスの一般ページにこのCLIPの説明を表示します。
SupportedDeviceFamiliesいいえCLIPDeclaration1

カンマ区切りのリストを使用して、サポートされているデバイスシリーズを定義します。LabVIEWで認識されるデバイスは、Spartan-3、Spartan-3E、Spartan-6、Virtex-II、Virtex-II Pro、Virtex-5、Virtex-6、Virtex-7、Zynq、Kintex-7です。

すべてのシリーズをサポートするために、Unlimitedを指定することもできます。

CompatibleCLIPSocketListいいえCLIPDeclaration1ソケット付きCLIPの場合、CLIPがサポートするソケットを指定します。
SocketはいCompatibleCLIPSocketList1以上ソケット付きCLIPの場合、互換性のあるソケットの名前を指定します。
TopLevelEntityAndArchitectureはいCLIPDeclaration1トップレベルシンセシスおよびシミュレーションVHDLファイルの実体とアーキテクチャを指定します。
SynthesisModelはいTopLevelEntityAndArchitecture1トップレベルシンセシスVHDLファイルの実体とアーキテクチャ名を指定します。
EntityはいSynthesisModel1トップレベルシンセシスVHDLファイルの実体名を指定します。
ArchitectureいいえSynthesisModel1トップレベルシンセシスVHDLファイルのアーキテクチャ名を指定します。
SimulationModelいいえTopLevelEntityAndArchitecture1トップレベルシミュレーションVHDLファイルの実体とアーキテクチャ名を指定します。
EntityはいSimulationModel1トップレベルシミュレーションVHDLファイルの実体名を指定します。
ArchitectureいいえSimulationModel1トップレベルシミュレーションVHDLファイルのアーキテクチャ名を指定します。
InterfaceListはいCLIPDeclaration11つまたは複数のインタフェース定義が含まれます。インタフェースリストはネスト化できません。インタフェースリストは1つのみしか定義できません。
InterfaceはいInterfaceList1以上CLIPで利用可能なすべてのI/O、クロック、およびその他の信号を定義します。インタフェースはネスト化できません。Nameは必須の属性です。
InterfaceTypeはいInterface1

FPGAでインタフェースが接続される場所を定義します。以下のいずれかの値を入力できます。

  • LabVIEW: インタフェースがFPGAモジュールに接続。すべてのI/Oおよびクロックを、FPGAモジュールでリソースとして使用できます。
  • Socket: インタフェースがターゲット定義ソケットに直接接続。I/Oおよびクロックは、FPGAモジュールでリソースとして使用できません。
  • Fabric: インタフェースがFPGAに直接接続。I/Oおよびクロックは、FPGAでリソースとして使用できません。
SignalListはいInterface11つまたは複数の信号定義が含まれます。SignalListタグはネスト化できません。
SignalはいSignalList1以上

CLIPから取得可能な信号、またはCLIPが使用可能な信号を定義します。FPGAモジュールで表示の目的に使用されるName属性が含まれる必要があります。Name属性は文字で始まる必要があり、英数字、ピリオド、ダッシュ、および下線のみを含めることができます。デフォルトは、Signalタグで宣言するHDLNameです。

信号をCLIP IO階層に整理するには、名前の区切り文字としてピリオドを使用します。たとえば、A.InputおよびA.Outputという名前の信号は、プロジェクトでInputおよびOutput信号が含まれるAという名前のフォルダを作成します。

DescriptionいいえSignal1信号の詳細を指定します。
HDLNameいいえSignal0または1VHDLファイルのI/O実体の名前を定義します。ポートのHDLNameは、トップレベルシンセシスファイルの名前と同じである必要があります。
RequiredClockDomainいいえSignal0または1必須クロック領域を指定しない場合は、すべてのクロック領域のI/Oを使用できます。RequiredClockDomainの値は、他の場所にあるCLIP XMLファイルで定義したクロックの信号名と一致する必要があります。必須クロック領域を指定する場合は、このCLIP I/Oを使用するブロックダイアグラムのI/Oノードが指定したクロック領域内にある必要があります。I/Oノードが正しくないクロック領域にある場合、FPGA VIのコンパイル中にエラーが返されます。
LeaveUndrivenIfNotUsedInLabVIEWいいえSignal0または1VHDLファイルにデフォルト値がある時、トップレベルファイルで信号を駆動しないことを指定します。それ以外の場合、LabVIEWは、コード生成中にすべてのゼロの値を持つ信号を駆動します。
HDLTypeはいSignal1信号のVHDLポートタイプを指定します。std_logicstd_logic_vectorのみがサポートされます。リセットおよびクロック信号はstd_logicのみです。
UseInLabVIEWSingleCycleTimedLoopいいえSignal0または1有効な値は、NotAllowed、Allowed、Requiredです。デフォルト値は、Allowedです。このタグは、シングルサイクルタイミングループでCLIP I/Oを使用できる方法を指定します。シングルサイクルタイミングループでは、各クロックエッジで確実にデータがラッチされます。各クロックエッジでCLIPのIPが値を受信しようとする場合、このタグをRequiredに設定するとこの要件が強制されます。
SpecificTargetClockいいえSignal0または1CLIPクロックの必須クロック接続として、使用可能なFPGAターゲットベースクロックの1つを指定します。このタグの値は特定のFPGAターゲットベースクロックの名前です。FPGAターゲットベースクロックがプロジェクト内に存在し、宣言XMLファイルで指定された要求周波数範囲を満たしている必要があります。
DataTypeはいSignal1

信号のデータタイプを定義します。信号がLabVIEWのインタフェース用の場合、データタイプはLabVIEWによるこの信号の表記法も定義します。信号がソケットインタフェース用の場合、データタイプはソケット内の信号のデータタイプに一致する必要があります。以下の子タグのいずれかを使用して、データタイプを定義します。

  • <Boolean />
  • <U8 />
  • <U16 />
  • <U32 />
  • <U64 />
  • <I8 />
  • <I16 />
  • <I32 />
  • <I64 />
  • <FXP>...</FXP>
  • <Array>...</Array>
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いいえFXP0または1FXP信号のワード長を指定します。サポート範囲は[1, 64]です。
IntegerWordLengthいいえFXP0または1FXP信号の整数ワード長を指定します。サポート範囲は[-2048, 2047]です。
UnsignedいいえFXP0または1FXP信号が符号なしである場合、このタグを追加します。FXP信号が符号付きである場合、このタグを追加しません。
ArrayいいえDataType親タグを参照ブールデータタイプの配列を作成します。BooleanタグをArrayタグの中に含める必要があります。Arrayタグはソケット付きCLIPでのみ使用できます。
SizeはいArray1配列サイズを指定します。
DirectionいいえSignal0または1

CLIPが信号データを受信または送信するかを指定します。以下の値から選択できます。

  • ToCLIP: CLIPが信号データを受信するために使用。ToCLIPはデフォルト値です。
  • FromCLIP: CLIPが信号データを送信するために使用。
  • Bidirectional: 双方向ラインのために使用。Bidirectionalは、ソケット付きCLIPのみでサポートされています。
SignalTypeいいえSignal0または1

信号のタイプを示します。以下の値から選択できます。

  • data: 信号が標準I/Oデータ信号の場合に使用。SignalTypeタグに値を指定しないと、デフォルトはdataになります。
  • clock: 信号がクロックの場合に使用。clockを使用する場合は、<Boolean/>タグをDataTypeタグ内で使用する必要があります。
  • reset: 信号がFPGA VIのグローバル非同期リセット信号に接続するリセット信号である場合に使用。「IPを作成または取得する」トピックの「VHDLコードをリセットする」セクションを参照してください。FPGA VIのグローバル非同期リセット信号はアクティブHIGHです。InterfaceTypeタグがFabricに設定されている場合のみリセットを使用できます。リセット信号はToCLIP信号である必要があります。
  • clock status: クロックステータス信号には、SourceClockReadyおよびDerivedClocksValidの2つのタイプがあります。SupportDerivedClocksタグを持つ各FromCLIPクロックで、両方の信号が必要となります。これらの信号は、派生クロックを生成するLabVIEW FPGAクロック回路とのハンドシェイクインタフェースを一緒に実装します。
FreqInHertzいいえSignal1信号の周波数範囲を定義します。SignalTypeがclockに設定されている場合、FreqInHertzタグが必要です。
MaxはいFreqInHertz1SI表記でサポートされている最大を定義します。Maxタグは、FreqInHertzタグを含める場合に必要です。**
MinいいえFreqInHertz0または1SI表記でサポートされている最小を定義します。Minの値を指定しないと、Min値はMax値と等しくなります。**
ImplementationListはいCLIPDeclaration1含めるCLIPファイルを定義します。CLIPファイルが同じディレクトリにある必要はありません。ImplementationListタグは1つしか含めることができません。
PathはいImplementationList1以上

IPのコンパイルに必要な実装ファイルを含むパスまたはディレクトリを定義します。ディレクトリのパスを指定してもそのサブディレクトリは認識されません。サブディレクトリは別のタグで定義する必要があります。Pathタグは、XMLファイルの相対パスまたは絶対パスを使用してください。

サブディレクトリへの相対パスを定義する際、2つの連続するピリオド (..) を使用して現在作業中のディレクトリの親ディレクトリを示し、1つのピリオド (.) を使用して現在作業中のディレクトリを示し、スラッシュまたは円記号 (/または\) を使用して次のサブディレクトリを入力します。たとえば、../folderA/fileB.vhdは、ディスク上のXMLファイルと同じ階層レベルにある、folderAディレクトリ内のfileB.vhdファイルを指します。たとえば、/folderA/fileB.vhdは、ディスク上のXMLファイルと同じ階層レベルにあるfolderAディレクトリ内のfileB.vhdファイルを指します。LabVIEWは無効なパスに対してエラーを返します。LabVIEWは、他のファイルまたはディレクトリタグがXMLファイルに存在しない限り、空のディレクトリが指定されてもエラーを返しません。Nameはこのタグの必須の属性で、シンセシスファイル名と同じである必要があります。

MD5いいえPath1シンセシスファイルが修正されたかどうかを検出します。
TopLevelいいえPath0または1現在のシンセシスファイルがトップレベルファイルであるかどうかを示します。トップレベルシンセシスファイルに成り得るVHDLファイルは、1つのみです。
SimulationFileListいいえPath1特定のシンセシスファイルのシミュレーションファイルを定義します。1つのシンセシスファイルに追加できる<SimulationFileList>タグは、1つのみです。<SimulationModel>が存在している場合、このタグが必要となります。
PathいいえSimulationFileList1以上

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はいSimulationFileList1特定のシンセシスファイルのシミュレーションモデルタイプを定義します。オプションは、Same as synthesisUser-defined、およびExclude from simulation modelです。ネットリストファイル以外のファイルの場合、デフォルトのオプションはSame as synthesisです。ネットリストファイルの場合、デフォルトのオプションはExclude from simulationで、Same as synthesisはサポートされません。
NumberOfDCMsNeededいいえCLIPDeclaration0または1FPGAのデジタルクロックマネージャ (DCM) を特定の数だけ予約します。この数を使用して、コンパイル時にコードがインスタンス化できるDCMの数が決定されます。
NumberOfMMCMsNeededいいえCLIPDeclaration0または1FPGAのMixed-Mode Clock Managers (MMCM) を特定の数だけ予約します。この数を使用して、コンパイル時にコードがインスタンス化できるMMCMの数が決定されます。
NumberOfBufGsNeededいいえCLIPDeclaration0または1FPGAのBUFGを特定の数だけ予約します。この数を使用して、コンパイル時にコードがインスタンス化できるグローバルクロックネットの数が決定されます。
DutyCycleRangeいいえSignal0または1クロックがサポートする最大および最小デューティサイクルを定義します。デフォルト値は50%です。値の後に%シンボルを含みます。
PercentInHighMaxいいえDutyCycleRange0または1クロックがHIGHで維持される最大時間をパーセンテージで定義します。デフォルト値は50%です。値の後に%シンボルを含みます。**
PercentInHighMinいいえDutyCycleRange0または1クロックがHIGHで維持される最小時間をパーセンテージで定義します。デフォルト値は50%です。値の後に%シンボルを含みます。**
AccuracyInPPM

In ToCLIP: いいえ

In FromCLIP: はい

Signal0または1CLIPクロックの確度を100万分の1 (ppm) 単位で指定します。**
JitterInPicoSeconds

In ToCLIP: いいえ

In FromCLIP: はい

Signal0または1CLIPクロックのジッタをピコ秒単位で指定します。**
GenericListいいえCLIPDeclaration1VHDLジェネリックの情報を指定します。
GenericはいGenericList1以上このタグの属性としてジェネリック名を指定します。
DescriptionいいえGeneric1ジェネリックの詳細を指定します。コンポーネントレベルIPプロパティダイアログボックスのジェネリックと構文のチェックページのメッセージボックスに詳細が表示されます。
GenericTypeはいGeneric1トップレベルシンセシスファイルからのジェネリックタイプを指定します。
DefaultValueはいGeneric1ジェネリックのデフォルト値を指定します。この値はトップレベルシンセシスファイルからの値です。コンポーネントレベルIPプロパティダイアログボックスのジェネリックと構文のチェックページまたはCLIPウィザードでDefaultValueをオーバーライドするために、別の値を指定することができます。
SupportDerivedClocksいいえSignal1このタグは、派生クロックをサポートする各FromCLIPクロックで必要となります。このタグが存在する場合は、SourceClockReadyHDLNameおよびDerivedClocksValidHDLNameも必要となります。このタグは、FromCLIPクロック信号のみで有効です。
SourceClockReadyHDLNameいいえSignal1このタグは、SupportDerivedClocksタグを持つ各FromCLIPクロックで必要となります。これは、FromCLIP方向のクロックステータスタイプ信号のHDL名です。このHDL名が存在する場合、FromCLIPクロックが有効で自走であることを示します。一度アサートされると、この信号はDerivedClocksValid信号がアサートされるまでアサートされたままの状態になります。この信号のアサート解除は、FromCLIPクロックがもうすぐオフになることを示します。この信号のアサート解除後は、FromCLIPクロックをDerivedClocksValidHDLName信号がアサート解除になるまでオフにしてはいけません。
DerivedClocksValidHDLNameはいSignal1

このタグは、SupportDerivedClocksタグを持つ各FromCLIPクロックで必要となります。これは、ToCLIP方向のクロックステータスタイプ信号のHDL名です。このHDL名が存在する場合、LabVIEW FPGAクロック生成回路で生成され、このFromCLIPクロックから供給されるすべての派生クロックが有効で自走であることを示します。この信号には、以下の2つの目的があります。

  • この信号のアサート解除は、FromCLIPクロックを無効にしても安全なことをCLIPに示します。
  • この信号は、CLIPに生成された派生クロックが有効であることを示します。

このタグは、派生クロックをサポートする各外部クロックで必要となります。

SupportsGating

ToCLIP: はい

In FromCLIP: いいえ

Signal1シングルサイクルタイミングループから間接的な有効信号の削除をサポートするには、各ToCLIPゲートクロックでこのタグが必要です。
CyclesRequiredBeforeAsynchronousResetClears

ToCLIP: はい

In FromCLIP: いいえ

Signal1非同期リセットがアサート中に発生する必要がある、このクロックのクロックエッジ数を定義します。非同期リセットはクロックの実行が開始する前にアサートおよびアサート解除されるため、ビルド仕様が間接的な有効信号の解除を許可するように構成されている場合、このCLIPを使用するにはこの値を0にする必要があります。このクロックをリセット中に停止する可能性のある外部クロックと使用する場合は、この値も0にする必要があります。組込FIFOを使用するCLIPなど、CLIPが非同期リセット中に実行中のクロックが必要な場合、および設計で間接的な有効信号の削除が必要な場合は、ローカル非同期リセットを作成してこのローカルリセットがアサート中にダイアログがCLIPへのまたはCLIPからのアクセスを行うことを回避することを検討します。
ReadBeforePlaceいいえPath1このタグは、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宣言ファイルを作成する際に発生する構文およびフォーマットエラーを最小限に抑えることができます。

メモ CLIPDeclaration.xsdスキーマファイルはユーザ定義CLIPとの使用のみで利用可能です。ソケット付きCLIPのスキーマに関する詳細は、FPGAターゲットのハードウェアドキュメントを参照してください。
メモ 宣言XMLファイルでのエラーを回避するために、コンポーネントレベルIPを構成ウィザードを使用することを、NIは強く推奨します。

異なるディレクトリの複数の実装ファイルを処理する

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: インタフェースを定義する」を参照してください。