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 インターフェイスすべてと、使用されている場合はap_rst_n
と関連付ける必要があります。
IP をパッケージするには、次の手順に従います。
- 新規 IP を作成してパッケージします。
- RTL ソース ファイルを追加した Vivado プロジェクトで、 をクリックします。
-
Package your current
project をオンにして Next をクリックします。
IP のデフォルト ディレクトリを選択するか、または別のディレクトリを選択できます。
- Finish をクリックして Package IP ウィンドウを開きます。
- クロックを AXI インターフェイスに関連付けます。
Package IP ウィンドウの Ports and Interfaces セクションで、
ap_clk
を AXI4 インターフェイスおよび必要であればリセット信号と関連付けることができます。- インターフェイスを右クリックし、Associate Clocks をクリックします。
Associate Clocks ダイアログ ボックスが表示されます。
ap_clk
と場合によってap_clk_2
がリストされています。 -
ap_clk
を選択して OK をクリックし、インターフェイスに関連付けます。 - この手順を繰り返して
ap_clk
を各 AXI インターフェイスおよびリセットに関連付けます。
- インターフェイスを右クリックし、Associate Clocks をクリックします。
- FREQ_HZ を
ap_clk
に追加します。-
Ports and
Interfaces セクションで ap_clk ポートを右クリックして Edit Interface をクリックし、次の図に示す [Edit Interface] ダイアログ ボックスを開きます。
- 左側のペインで FREQ_HZ パラメーターを選択し、右方向矢印 (→) をクリックして右側に移動します。
- FREQ_HZ パラメーターの値は、ダイアログ ボックスの右側をスクロールして Value フィールドに値を Hz で入力 (例: 250000000) しても定義できます。
- OK をクリックしてパラメーターを追加します。
- RTL カーネルには、値の競合の解決方法を指定するため、FREQ_HZ パラメーターに
value_resolve_type
プロパティも必要です。次の Tcl コマンドを使用して、このプロパティ値をuser
に設定します。set_property value_resolve_type user [ipx::get_bus_parameters -of [::ipx::get_bus_interfaces -of [ipx::current_core] *clk*] "
-
Ports and
Interfaces セクションで ap_clk ポートを右クリックして Edit Interface をクリックし、次の図に示す [Edit Interface] ダイアログ ボックスを開きます。
- 制御レジスタおよびオフセットを追加します。
カーネルのソフトウェア要件 で説明されているように、カーネルには制御レジスタが必要です。次の表に、必要なレジスタを示します。
表 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 ビット幅です。
インターフェイスは 64 ビット幅です。m_axi
- この表に説明されているアドレスを作成するには、Package
IP ウィンドウで Addressing and Memory セクションを選択します。Address Blocks を右クリックし、Add Register をクリックします。
開いた Add Register ダイアログ ボックスで、上記の表にリストされているいずれかのレジスタの名前を入力します。
- 手順を繰り返して必要なすべてのレジスタを追加します。
これで、Addressing and Memory セクションに Registers 表が作成されます。この表を編集して、各レジスタに説明 (Description)、アドレス オフセット ( Address Offset)、およびサイズ (Size) を追加できます。Registers 表は、次の図に示すようになります。
- 表で各ポインター引数のレジスタを右クリックし、Add Register Parameter をクリックします。開いたダイアログ ボックスに
ASSOCIATED_BUSIF
という名前を入力し、OK をクリックします。これにより、レジスタと AXI4 インターフェイスの関連性を定義できます。追加したパラメーターの値フィールドに、定義する引数に割り当てる
m_axi
インターフェイスの名前を入力します。上記の例では、引数A
はm00_axi
を使用し、引数B
はm01_axi
を使用します。
- この表に説明されているアドレスを作成するには、Package
IP ウィンドウで Addressing and Memory セクションを選択します。Address Blocks を右クリックし、Add Register をクリックします。
- IP に必要なプロパティを追加します。 IP には、コアに追加可能ないくつかの標準プロパティが必要です。これには、Vivado の [Tcl Console] ウィンドウで次のコマンドを使用するのが最も簡単です。
set core [ipx::current_core] set_property xpm_libraries {XPM_CDC XPM_MEMORY XPM_FIFO} $core set_property sdx_kernel true $core set_property sdx_kernel_type rtl $core
- これで、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 がパッケージされ、問題なく終了したことを示すダイアログ ボックスが表示されます。RTL カーネルからの .xo ファイルの作成 に説明されているように、
package_xo
コマンドを使用してカーネルをパッケージします。
-
Package IP ウィンドウの Review
and Package セクションを選択し、Summary and After
Packaging セクションを確認して、必要な変更を加えます。
- 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>
- 制約が .ttcl ファイルで指定されている場合は、次のように