RTL カーネルを IP インテグレーターで使用するには、Vivado IP としてパッケージする必要があります。Vivado ツールの IP パッケージの詳細は、 『Vivado Design Suite ユーザー ガイド: カスタム IP の作成とパッケージ』 (UG1118) を参照してください。
RTL カーネルに必要なインターフェイスは、次のようにパッケージする必要があります。
-
AXI4-Lite インターフェイスは、
S_AXI_CONTROL
という名前でパッケージする必要がありますが、その AXI ポートには異なる名前を指定できます。 -
AXI4 インターフェイスは、64 ビット アドレス サポートの AXI4 マスター エンドポイントとしてパッケージする必要があります。推奨: ザイリンクスでは、AXI4 インターフェイスは AXI メタ データ
HAS_BURST=0
およびSUPPORTS_NARROW_BURST=0
を含めてパッケージすることをお勧めします。これらのプロパティは、IP レベルの bd.tcl ファイルで設定できます。これは、WRAP および FIXED バースト タイプは使用されず、サイズの満たない (サブサイズ) バーストも使用されないということです。 -
ap_clk
およびap_clk_2
は、クロック インターフェイスとしてパッケージする必要があります (ap_clk_2
は、RTL カーネルに 2 つのクロックがある場合にのみ必要です)。 -
ap_rst_n
およびap_rst_n_2
は、アクティブ Low のリセット インターフェイスとしてパッケージする必要があります (RTL カーネルにリセットが含まれる場合)。 -
ap_clk
は、AXI4-Lite、AXI4、および AXI4-Stream インターフェイスすべてと関連付けてパッケージする必要があります。
RTL カーネルが IP インテグレーター用に正しくパッケージされていることをテストするには、パッケージ済みのカーネル IP を IP インテグレーターでブロック デザインにインスタンシエートしてみます。ツールの詳細は、 『Vivado Design Suite ユーザー ガイド: IP インテグレーターを使用した IP サブシステムの設計』 (UG994) を参照してください。
カーネル IP には、上記で説明したようなさまざまなインターフェイスが表示されるはずです。IP をキャンバスで確認します。AXI インターフェイスのプロパティは、キャンバスでインターフェイスを選択すると表示されます。[Block Interface Properties] ウィンドウで Properties タブをクリックし、CONFIG という表エントリを展開表示します。インターフェイスが読み出し専用または書き込み専用の場合は、未使用の AXI チャネルは削除され、READ_WRITE_MODE
が読み出し専用または書き込み専用に設定されます。
重要: RTL カーネルの制約がクロックなどのスタティック エリアにある制約を参照している場合、RTL カーネルの制約ファイルの処理順序を late に設定して、RTL カーネル制約が正しく適用されるようにする必要があります。
処理順序を late に設定するには、次の 2 つの方法があります。
- 制約が .ttcl ファイルで指定されている場合は、次のように
<: setFileProcessingOrder "late" :>
をファイルの .ttcl 前文セクションに追加します。<: set ComponentName [getComponentNameString] :> <: setOutputDirectory "./" :> <: setFileName $ComponentName :> <: setFileExtension ".xdc" :> <: setFileProcessingOrder "late" :>
- 制約が .xdc ファイルで指定されている場合、component.xml の
<spirit:define>
の下に次の 4 行を追加します。component.xml のこの 4 行は .xdc ファイルの呼び出されるエリアの次に記述する必要があります。次の例の場合、my_ip_constraint.xdc ファイルが呼び出され、その後に定義した late 処理順序が指定されています。<spirit:file> <spirit:name>ttcl/my_ip_constraint.xdc</spirit:name> <spirit:userFileType>ttcl</spirit:userFileType> <spirit:userFileType>USED_IN_implementation</spirit:userFileType> <spirit:userFileType>USED_IN_synthesis</spirit:userFileType> <spirit:define> <spirit:name>processing_order</spirit:name> <spirit:value>late</spirit:value> </spirit:define> </spirit:file>