IPを作成または取得する
- 更新日2025-03-06
- 10分で読める
コンポーネントレベルIP (CLIP) をFPGAターゲットに追加するには、FPGAターゲットにコンパイルするためにIPをVHDLコードとして用意する必要があります。VHDLコードを指定するには、以下の手順に従ってください。
- VHDLを作成する。
- Xilinx IPジェネレータでIPコアを生成する。
- Xilinxまたはパートナー会社からIPを購入する。
サポートされているIPファイルタイプ
VHDL、Verilog、またはXilinx IPジェネレータを使用して定義されたIPを使用できます。Verilogを使用して定義されたIPを使用する場合、最初にこのIPをネットリストファイルにコンパイルしてから、VHDLファイルにネットリストファイルをラップします。Xilinx IPジェネレータで定義されたIPを使用する場合、制約ファイルを直接CLIP信号にインポートすることができます。特定のFPGAターゲットによっては、制約ファイルを使用して制約を指定することができます。ただし、CLIP信号に制約を適用すると、LabVIEWのブロックダイアグラムはその信号を使用する必要があり、そうでない場合はVIのコンパイル時にXilinxのエラーが返されます。
カスタムユーザライブラリ
CLIPは、VHDLでのカスタムユーザライブラリをサポートしません。使用するVHDLがカスタムユーザライブラリを使用する場合、以下の対策をとってください。
- VHDLからネットリストを作成し、CLIPを使用してネットリストを統合する。
- カスタムユーザライブラリの代わりにデフォルトのリファレンスライブラリを参照する。
IP設計基準
VHDLコードをFPGAターゲットに適切に収め、LabVIEW FPGAモジュールと適切に接続させるためには、VHDLコードはいくつかの規則に従う必要があります。これらの規則は、VHDLコードのリセット動作、クロック、およびI/Oポートを管理します。
I/Oデータタイプ
LabVIEWに接続されるすべてのI/Oは、LabVIEWでサポートされているデータタイプである必要があります。下記の表には、FPGAモジュールがサポートするデータタイプ、そしてIPインタフェースに使用する必要のある対応するVHDLデータタイプが記載されています。
FPGAモジュールデータタイプ | VHDLデータタイプ |
---|---|
ブール | std_logic |
U8/I8 | std_logic_vector(7 downto 0) |
U16/I16 | std_logic_vector(15 downto 0) |
U32およびI32 | std_logic_vector(31 downto 0) |
U64およびI64 | std_logic_vector(63 downto 0) |
固定小数点 | std_logic_vector(x downto 0) (ここで、xは [0,63] の範囲内)。 |
たとえば、FPGAモジュールは、タイプstd_logic_vector(31 downto 0)のIP入力ポートを、32ビット符号なし整数 (U32) で扱います。VHDLコードで、std_logic_vector(65 downto 0)などのサポートされていない幅のポートが必要な場合、ラッパーVHDLファイルを作成して、このポートをFPGAモジュールがサポートするデータタイプに適応させる必要があります。この適応の例については、NI Webサイトを参照してください。
CLIPクロック
すべてのベースおよび派生FPGAクロックは、XMLファイルで宣言されたReset信号がアサート解除された直後に安定状態になり自走を開始します。ただし、外部クロックは停止したり、グリッチが起こる場合があります。可能であれば、停止したり、グリッチが発生する可能性のあるクロックの使用を避けてください。クロックをリセットするようなコードを使用する場合、他のコードが安定を保ち自走する上でそのクロックに依存していないことを確認してください。
CLIP I/Oにアクセスする場合は、CLIPクロックの使用を検討してください。CLIP I/OタイミングはIPに依存するため、IPによるCLIP I/Oへの読み書きは適切なクロックで行われる必要があります。異なるクロック領域でCLIP I/Oへの読み書きを行う場合は、FPGA I/Oプロパティダイアログボックスの上級コード生成ページ、FPGA I/Oノードプロパティダイアログボックスの上級コード生成ページ、またはCLIPのVHDLコードに同期レジスタを含める必要があります。ただし、CLIPから同じI/Oにアクセスする場合、そして同じクロック領域でVIにアクセスする場合、同期レジスタの数を0に設定することにより、レイテンシを最小に抑えることができます。
また、CLIPではFPGA VIで使用可能なクロックを宣言することもできます。CLIPクロックは、トップレベルクロックに設定できない点を除いては、ターゲットのFPGAクロックと同様に使用できます。
VHDLコードをリセットする
すべてのVHDLコードには、1つの非同期リセット入力を含めることができるため、リセットメソッドを使用すると、VHDLコードはFPGA VIと一緒にリセットできます。NIは、1つの非同期リセットを含めることを推奨します。非同期リセットに対する応答を含めない場合、代替のリセット機能を使用して、非同期リセットが発生する前後でもVHDLコードが正しく機能するように開発する必要があります。
制約および階層
特定のFPGAターゲットによっては、制約ファイルを使用して、CLIP固有のユーザ制約をコンパイルに含めることができます。このメカニズムはピン配置制約以外のすべての制約で使用できます。たとえば、ソケット付きCLIPのグローバルバッファを介して、グローバルクロックの入力ピンからクロックを直接アクセスできます。このクロックの周期を制約する必要があります。
CLIP内の特定のコンポーネントの制約を行うためには、VHDL全体の階層内のコンポーネントの位置を指定してください。この場合、以下のマクロを制約の頭に追加することを検討してください。これにより、VHDL階層内のコンポーネントの位置に関係なく制約が適用されます。このサンプルコードを使用する場合は、コードをテキストファイルにコピーして、ファイルをDemoClipAdder.ucf (Xilinx ISE) またはDemoClipAdder.xdc (Xilinx Vivado) という名前で保存します。この制約を行うには、CLIPを構成ウィザードのシンセシスファイルとしてVHDファイルと一緒にこの制約ファイルを追加します。
(Xilinx ISE)
NET "%ClipInstancePath%/myCLIPIO*" TNM_NET = %ClipInstanceName%myCLIPIO; TIMESPEC TS_%ClipInstanceName%ThruMyCLIP = TO "%ClipInstanceName%myCLIPIO" 10 ns;
(Xilinx Vivado)
create_clock -period 10.000 -name %ClipInstanceName%Clk -waveform {0.000 5.000} -add [get_pins %ClipInstancePath%/clk] set_clock_latency -clock [get_clocks {%ClipInstanceName%Clk}] 10.0 [get_pins {%ClipInstancePath%/cAddOut[0]}]
複数のCLIPインスタンスが必要な場合、各CLIPインスタンスはVHDL命名規約に従った固有の名前を持つ必要があります。各CLIP定数に固有の名前を付け、CLIP定数名にkを接頭辞として付けないでください。これらのマクロを含める際は、それぞれのインスタンス用に別々の制約ファイルを用意する必要はありません。FPGAモジュールが固有のインスタンス名を作成します。
CLIP信号が使用しない場合、Xilinxのコンパイルツールによりビットストリームから信号が除去される場合があります。この場合、コンパイル中にNGBuildエラーが発生する場合があります。この問題を解決するには、FPGA VIで信号を使用するか、制約を取り除きます。
(Xilinx Vivado) 各コンパイルで、FPGAモジュールはunapplied_constraints.xdcという名前のファイルを生成し、適用されていないすべての制約をリストします。コンパイルで制約が適用されているかどうかを確認するには、次の手順を実行します。
- 以下のデフォルトディレクトリ (C:\NIFPGA) に移動します。
- コンパイル特有のフォルダを開きます。
- output_files.zipファイルを解凍し、簡単にアクセスできる場所にunapplied_constraints.xdcファイルを保存します。
- unapplied_constraints.xdcファイルを開き、制約を検索します。
VHDLコード作成の例については、CLIPチュートリアル パート1: VHDLコードを作成するを参照してください。
![]() | 注意 データの完全性とタイミングの終了を確実に保証するために、CLIPのI/OノードがLabVIEWダイアグラム上で読み取られるのと同じクロック領域に書き込まれること、またCLIPからI/Oノードへの読み取りが、LabVIEWダイアグラム上に書き込まれるのと同じクロック領域で読み取られることを確認してください。 |