RTL コードを Vivado IP としてパッケージ - 2019.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese

RTL カーネルを IP インテグレーターで使用するには、Vivado IP としてパッケージする必要があります。Vivado ツールの IP パッケージの詳細は、 『Vivado Design Suite ユーザー ガイド: カスタム IP の作成とパッケージ』 (UG1118) を参照してください。

RTL カーネルに必要なインターフェイスは、次のようにパッケージする必要があります。

  • AXI4-Lite インターフェイスは、S_AXI_CONTROL という名前でパッケージする必要がありますが、その AXI ポートには異なる名前を指定できます。
  • AXI4 インターフェイスは、64 ビット アドレス サポートの AXI4 マスター エンドポイントとしてパッケージする必要があります。
  • ap_clk および ap_clk_2 は、クロック インターフェイスとしてパッケージする必要があります (ap_clk_2 は、RTL カーネルに 2 つのクロックがある場合にのみ必要です)。
  • ap_rst_n および ap_rst_n_2 は、アクティブ Low のリセット インターフェイスとしてパッケージする必要があります (RTL カーネルにリセットが含まれる場合)。
  • ap_clk は、AXI4-LiteAXI4、および 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 つの方法があります。

  1. 制約が .ttcl ファイルで指定されている場合は、次のように <: setFileProcessingOrder "late" :> をファイルの .ttcl 前文セクションに追加します。
    <: set ComponentName [getComponentNameString] :>
    <: setOutputDirectory "./" :>
    <: setFileName $ComponentName :>
    <: setFileExtension ".xdc" :>
    <: setFileProcessingOrder "late" :>
    
  2. 制約が .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>