カーネルのインターフェイス要件 で説明するように 、RTL カーネルは次の必須インターフェイスを含めてパッケージする必要があります。
-
AXI4-Lite インターフェイスは、
S_AXI_CONTROL
という名前でパッケージする必要がありますが、その AXI ポートには異なる名前を指定できます。 - メモリ マップド AXI4 インターフェイスは、64 ビット アドレス サポートの AXI4 マスター エンドポイントとしてパッケージする必要があります。推奨: ザイリンクスでは、AXI4 インターフェイスは AXI メタ データ
HAS_BURST=0
およびSUPPORTS_NARROW_BURST=0
を含めてパッケージすることをお勧めします。これらのプロパティは、IP レベルの bd.tcl ファイルで設定できます。これは、WRAP および FIXED バースト タイプは使用されず、サイズの満たない (サブサイズ) バーストも使用されないということです。 - AXI4-Stream インターフェイスをインプリメントすることもできます。
- カーネルは複数のクロックをサポートできますが、少なくとも 1 つのクロックを必要とします。
- 各クロックには、クロックとして識別されるバス インターフェイスが関連付けられる必要があります。
- 各クロックにはオプションでアクティブ Low リセットを含めることができます。これはクロックの ASSOCIATED_RESET プロパティで指定できます。
- クロックは、カーネルの各 AXI4-Lite、AXI4、および AXI4-Stream インターフェイスに関連付けられる必要があります。
IP をパッケージするには、次の手順に従います。
- 新規 IP を作成してパッケージします。
- RTL ソース ファイルを追加した Vivado プロジェクトで、 をクリックします。
- Package your current project をオンにして Next をクリックします。
- パッケージ IP のディレクトリを指定します。デフォルト ディレクトリを選択するか、別のディレクトリを選択できます。
- Summary ページを確認し、Finish をクリックして Package IP ウィンドウを開きます。
Package IP ウィンドウが開き、Identification ページが表示されます。Vivado ツールの IP パッケージャーの詳細は、 『Vivado Design Suite ユーザー ガイド: カスタム IP の作成とパッケージ』 (UG1118) を参照してください。
-
Packaging Steps の下の Compatibility を選択します。次の図のダイアログ ボックスが表示されます。
- Package for Vitis チェック ボックスをオンにして、RTL IP を XO としてパッケージするプロセスを有効にし、Vitis 環境で使用できるようにします。
- RTL カーネルの Control
Protocol を選択します。これにより、カーネルの動作に使用される制御メカニズムが決まります。選択肢は次のとおりです。
-
user_managed
: XRT で管理するのではなく、ユーザーが管理する、ソフトウェアで制御可能なカーネルを定義します。これは推奨されるオプションです。詳細は、ユーザー管理の RTL カーネルの作成を参照してください。 -
ap_ctrl_hs
: これはデフォルトで、ソフトウェア制御可能なカーネル で説明されるように、XRT 管理のカーネル用の単純なシーケンシャル実行モデルを指定します。 -
ap_ctrl_chain
: XRT 管理のカーネルのパイプライン実行モデルを指定します。 -
ap_ctrl_none
: ソフトウェアで制御されていないカーネル で説明するように、制御プロトコルがないことを示します。
-
- Package for IPI と Ignore Freq_Hz の両方がオンになっていることを確認します。
これらのチェック ボックスをオンにすると、IP をパッケージして XO を生成する前に
ipx::check_integrity
コマンドが実行するデザイン ルール チェック (DRC) が有効になります。DRC には、RTL カーネルの要件 で説明されるように、必要な信号のチェック、および XRT の管理するカーネルの制御プロトコルとレジスタのチェックが含まれます。上の図に示すように、問題が発生すると、Package IP ツールにレポートされます。 - クロックを AXI インターフェイスに関連付けます。
Package IP ウィンドウの Ports and Interfaces で、プライマリ カーネル クロックを AXI4 インターフェイスに、必要であればリセット信号にも関連付けることができます。
-
AXI4 インターフェイスを右クリックし、Associate
Clocks をクリックします。
Associate Clocks ダイアログ ボックスが表示され、見つかったクロック信号がリストされます。
- 適切なクロックを選択して OK をクリックし、インターフェイスに関連付けます。
- AXI インターフェイスごとにクロック信号に対してこの手順を繰り返します。
-
AXI4 インターフェイスを右クリックし、Associate
Clocks をクリックします。
-
Addressing and Memory をクリックして、制御レジスタとオフセットを追加します。
ap_ctrl_hs
またはap_ctrl_chain
制御プロトコルを使用する XRT 管理のカーネルには、XRT 管理のカーネルの制御要件 で説明するように、制御レジスタが必要です。次の表に、必要なレジスタを示します。ヒント:ap_ctrl_none
およびuser_managed
制御プロトコルは制御レジスタを必要としませんが、s_axilite
インターフェイスが RTL デザインの一部として含まれる場合は、これらを使用することができます。この場合、特定のレジスタは次の表と異なることがありますが、names
、offsets
、およびwidths
の割り当てプロセスは同じです。表 1. アドレス マップ レジスタ名 説明 アドレス オフセット サイズ CTRL 制御信号。 重要: CTRL レジスタおよび <kernel_args> は、すべてのカーネルに必要です。割り込み関連のレジスタは、割り込みを使用するデザインにのみ必要です。0x000 32 GIER グローバル割り込みイネーブル レジスタ。ホストへの割り込みをイネーブルにします。 0x004 32 IP_IER IP 割り込みイネーブル レジスタ。割り込みを生成するのに使用する IP 生成信号を制御します。 0x008 32 IP_ISR IP 割り込みステータス レジスタ。割り込みステータスを示します。 0x00C 32 <kernel_args> ソフトウェア関数インターフェイスでの必要に応じて、各カーネル引数に個別のエントリが含まれます。すべてのユーザー定義のレジスタは、 0x10
で開始する必要があります。これより下位の位置は予約されています。0x010 32/64 スカラー引数は 32 ビット幅で、
m_axi
およびaxis
インターフェイスは 64 ビット幅です。- この表で説明されるアドレス マップを作成するには、Address
Blocks を右クリックし、Add
Register をクリックします。
開いた Add Register ダイアログ ボックスで、上記の表にリストされているいずれかのレジスタの名前を入力します。
- 手順を繰り返して必要なすべてのレジスタを追加します。これで、Addressing and Memory セクションに Registers 表が作成されます。この表を編集して、各レジスタに説明 (Description)、アドレス オフセット (Address Offset)、およびサイズ (Size) を追加できます。Registers 表は、次の図に示すようになります。
ヒント: このプロセスの各ステップの Tcl コマンドは、[Tcl Console] に書き込まれます。この事実を使用してプロセスを実行した後、Tcl トランスクリプトを使用してスクリプトを作成すると、今後の反復処理のプロセスを自動化できます。 - 表で各ポインター引数のレジスタを右クリックし、Add Register Parameter をクリックします。開いたダイアログ ボックスに
ASSOCIATED_BUSIF
という名前を入力し、OK をクリックします。これにより、レジスタと AXI4 インターフェイスの関連性を定義できます。追加したパラメーターの値フィールドに、定義する引数に割り当てる
m_axi
インターフェイスの名前を入力します。上記の例では、引数A
はm00_axi
を使用し、引数B
はm01_axi
を使用します。
- この表で説明されるアドレス マップを作成するには、Address
Blocks を右クリックし、Add
Register をクリックします。
- これで、IP をパッケージする準備ができました。
-
Package IP ウィンドウの Review and
Package セクションを選択し、Summary and After
Packaging セクションを確認して、必要な変更を加えます。重要: IP アーカイブ ファイルの生成をイネーブルにする必要があります。After Packaging セクションに An archive will not be generated. (アーカイブは生成されません) と表示されている場合は、Edit packaging settings リンクをクリックして Create archive of IP をイネーブルにする必要があります。
- 準備ができたら、Package IP をクリックします。
Vivado ツールはカーネル IP をパッケージし、必要に応じて XO ファイルを生成するための
package_xo
コマンドを自動的に実行し、成功を知らせるダイアログボックスを開きます。RTL カーネル用に生成された XO ファイルは、リンク処理中に Vitis コンパイラがほかの HLS または RTL カーネルに接続したり、ターゲット プラットフォームとリンクしてシステムを完成させたりするために使用できます。詳細は、アプリケーションのビルドおよび実行を参照してください。
- RTL カーネルに、自動的に実行される
package_xo
コマンドに標準ではないカスタム機能がある場合は、手動でコマンドを実行して、カスタム設定を使用して XO ファイルとカーネルを生成し直すことができます。コマンドの詳細は、package_xo コマンド を参照してください。package_xo
コマンドを手動で実行する必要があるるのは、具体的には次のような場合です。- 別の IP ディレクトリまたは XO パスを指定します。
- kernel.xml ファイルのコピーを出力して、後で編集して再利用します。
- RTL カーネルのソフトウェア エミュレーションをイネーブルにする
package_xo -kernel_files
オプションを使用して、C モデルを含めます。
-
Package IP ウィンドウの Review and
Package セクションを選択し、Summary and After
Packaging セクションを確認して、必要な変更を加えます。
- オプション: Packaged IP をテストします。
RTL カーネルが IP インテグレーター用に正しくパッケージされていることをテストするには、パッケージ済みのカーネル IP を IP インテグレーターでブロック デザインにインスタンシエートしてみます。ツールの詳細は、 『Vivado Design Suite ユーザー ガイド: IP インテグレーターを使用した IP サブシステムの設計』 (UG994) を参照してください。
カーネル IP には、上記で説明したようなさまざまなインターフェイスが表示されるはずです。IP をキャンバスで確認します。AXI インターフェイスのプロパティは、キャンバスでインターフェイスを選択すると表示されます。Block Interface Properties ウィンドウで Properties タブをクリックし、CONFIG という表エントリを展開表示します。インターフェイスが読み出し専用または書き込み専用の場合は、未使用の AXI チャネルは削除され、
READ_WRITE_MODE
が読み出し専用または書き込み専用に設定されます。 - オプション: デザイン制約を設定します。
RTL カーネルに、クロックなどのプラットフォームのスタティック領域の要素を参照するデザイン制約 (.xdc) がある場合、RTL カーネル制約が正しく適用されるように、制約ファイルを late processing order としてマークする必要があります。
後で処理するように制約をマークするには、次の 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>
- 制約が .ttcl ファイルで指定されている場合は、次のように