RTL カーネル
Vitis アプリケーション アクセラレーション開発フローでは、C++ ソース コードをザイリンクス オブジェクト (XO) ファイルにコンパイルして、ターゲット プラットフォームとリンクして FPGA 実行ファイル (XCLBIN) にできます。Vivado® Design Suite からの RTL IP も、Vivado IP パッケージング ガイドラインおよび Vitis コンパイラの要件に準拠している限り、XCLBIN にリンク可能な XO ファイルとしてパッケージ化できます。これらの要件については、次に説明します。
RTL カーネルの要件
RTL モジュールは、インターフェイスとソフトウェア要件の両方を満たしていないと、Vitis ツール内で RTL カーネルとして使用できません。カーネル プロパティの詳細は、カーネル プロパティ を参照してください。
RTL モジュールまたは Vivado IP パッケージを修正して、次のセクションで説明するカーネル要件を満たす必要があることもあります。
カーネルのインターフェイス要件
Vitis コード開発キットの実行モデルの要件を満たすには、RTL カーネルが カーネル プロパティ の要件に従っている必要があります。RTL カーネルには、カーネル ロジックにクロックを提供するために、少なくとも 1 つのクロック インターフェイス ポートが必要です。次の表に、さまざまなインターフェイスの要件を示します。
| ポートまたはインターフェイス | 説明 | コメント |
|---|---|---|
| ap_clk | プライマリ クロック入力ポート |
|
| ap_clk_2 | セカンダリ クロック入力ポート |
|
| ap_rst_n | プライマリ アクティブ Low リセット入力ポート |
|
| ap_rst_n_2 | オプションのセカンダリ アクティブ Low のリセット入力 |
|
| interrupt | アクティブ High の割り込み。 |
|
| s_axi_control | 唯一の AXI4-Lite スレーブ制御インターフェイス |
注記: * ポートは通常必須ですが、フリーランニング カーネル などの例外もあます。
|
| AXI4_MASTER | グローバルメモリにアクセスするための 1 つ以上の AXI4 マスター インターフェイス |
|
| AXI4_STREAM | カーネル間やホストアプリケーションとカーネル間で一方向のデータを転送するための 1 つまたは複数の AXI4-Stream インターフェイスです。 |
カーネルの制御
次の表に、カーネルを Vitis ツールと XRT 内で使用できるようにするのに必要なレジスタ マップを示します。制御レジスタは ap_ctrl_hs および ap_ctrl_chain 実行モデルを指定する RTL カーネルに必要ですが、割り込み関連のレジスタは割り込みを含むデザインにのみ必要です。すべてのユーザー定義のレジスタは、0x10 で開始する必要があります。これより下位の位置は予約されています。
RTL デザインに別の実行モデルがある場合は、デザインがこの方法で実行できるようにそれを適用する必要があります。
| オフセット | 名前 | 説明 |
|---|---|---|
| 0x0 | 制御 | カーネル ステータスを制御および示します。 |
| 0x4 | グローバル割り込みイネーブル | ホストへの割り込みをイネーブルにします。 |
| 0x8 | IP 割り込みイネーブル | 割り込みの生成に使用する IP で生成された信号を制御します。 |
| 0xC | IP 割り込みステータス | 割り込みステータスを示します。 |
| 0x10 | カーネル引数 | スカラーおよびグローバル メモリ引数などを含みます。 |
次の表は、制御レジスタ (offset 0x0) を介してアクセスされる制御信号を示しています。使用可能な信号は、XRT の資料の「サポートされるカーネル実行モデル」で説明されるように、さまざまな制御プロトコルで使用されます。たとえば、シーケンシャル実行モードの ap_ctrl_hs の場合、ホストは通常オフセット 0 の制御レジスタに 0x00000001 を書き込みます。これにより、ビット 0 がセットされ、ビット 1 および 2 がクリアされ、ap_done 信号の読み出しが 1 になるまでポーリングされます。
| ビット | 名前 | 説明 |
|---|---|---|
| 0 | ap_start | カーネルがデータ処理を開始するとアサートされます。ap_done がアサートされたハンドシェイクでクリア。 |
| 1 | ap_done | カーネルが処理を終了するとアサートされます。読み出しでクリアされます。 |
| 2 | ap_idle | カーネルがアイドルになるとアサートされます。 |
| 3 | ap_ready | カーネルが新しいデータを受け入れる準備ができたときにアサートされます。 |
| 4 | ap_continue | カーネルが実行され続けるように XRT によってアサートされます。 |
| 31:5 | 予約済み | 予約済み |
制御レジスタまたはその信号は、カーネル実行モード (ap_ctrl_hs または ap_ctrl_chain) によって決定されます。
次の割り込み関連のレジスタは、カーネルに割り込みがある場合にのみ必要です。
| ビット | 名前 | 説明 |
|---|---|---|
| 0 | グローバル割り込みイネーブル | IP 割り込みイネーブル ビットと共にアサートされると、割り込みがイネーブルになります。 |
| 31:1 | 予約済み | 予約済み |
| ビット | 名前 | 説明 |
|---|---|---|
| 0 | 割り込みイネーブル | グローバル割り込みイネーブル ビットと共にアサートされると、割り込みがイネーブルになります。 |
| 31:1 | 予約済み | 予約済み |
| ビット | 名前 | 説明 |
|---|---|---|
| 0 | 割り込みステータス | 書き込みでトグルされます。 |
| 31:1 | 予約済み | 予約済み |
割り込み
RTL カーネルには、1 つの割り込みがある interrupt 割り込みポートをオプションで含めることができます。ポート名は interrupt にして、アクティブ High にする必要があります。これは、制御レジスタ ブロックでグローバル割り込みイネーブル (GIE) および割り込みイネーブル レジスタ (IER) ビットの両方がアサートされるとイネーブルになります。
デフォルトでは、IER が内部 ap_done 信号を使用して、割り込みをトリガーします。さらに、割り込みは IP 割り込みステータス レジスタのビット 0 に 1 が書き込まれた場合にのみクリアされます。
このロジックは、RTL カーネル用の Verilog コードと、関連する component.xml および kernel.xml ファイルにも記述されます。kernel.xml ファイルは kernel.xo に含まれ、package_xo コマンドまたは RTL Kernel ウィザードを使用すると自動的に生成されます。
RTL カーネルの開発フロー
このセクションでは、Vitis コア開発キット用に RTL カーネルを作成する 2 段階の手順を説明します。
- RTL ブロックを標準的な Vivado IP としてパッケージします。
- RTL カーネルをザイリンクス オブジェクト (XO) ファイルにパッケージします。
パッケージされた XOファイルは、Vivado IP オブジェクト (ソース ファイルを含む) および関連付けられたカーネル XML ファイルを含むコンテナーです。Vitis コンパイラを使用すると、XO ファイルをほかのカーネルと組み合わせわせたり、ターゲット プラットフォームとリンクしたり、ハードウェアまたはハードウェア エミュレーション フロー用にビルドしたりできます。
RTL コードを Vivado IP としてパッケージ
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 バースト タイプは使用されず、サイズの満たない (サブサイズ) バーストも使用されないということです。 - AXI4-Stream インターフェイスをインプリメントすることもできます。
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 をクリックします。
- 制御レジスタおよびオフセットを追加します。
カーネルの制御 で説明されているように、カーネルには制御レジスタが必要です。次の表に、必要なレジスタを示します。
表 7. アドレス マップ レジスタ名 説明 アドレス オフセット サイズ 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 ビット幅です。- この表に説明されているアドレスを作成するには、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_property sdx_kernel true [ipx::current_core] set_property sdx_kernel_type rtl [ipx::current_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 ファイルで指定されている場合は、次のように
RTL カーネルからの XO ファイルの作成
最終段階では、カーネルを Vitis コア開発キットで使用できるように、RTL IP をザイリンクス オブジェクト ファイル (XO) にパッケージします。これには、Vivado Design Suite で Tcl コマンドの package_xo を使用します。
IP をパッケージしたら、Vivado ツールから package_xo コマンドを実行します。package_xo コマンドは、IP からの component.xml ファイルを使用して、可能な場合は必要な kernel.xml を作成します。Vivado ツールは、すべてのものが揃っていることを判断するため package_xo の前処理としてデザイン ルール チェックを実行し、IP を処理して XO ファイルを作成するか、問題が存在する場合はそれを示すエラーが返されます。
次の例では、指定された IP ディレクトリにある test_sincos という名前の RTL カーネル IP を、test.xo という名前のオブジェクト ファイルにパッケージし、必要な kernel.xml ファイルを作成し、ap_ctrl_chain プロトコルを使用します。
package_xo -xo_path ./test.xo -kernel_name test_sincos \
-ctrl_protocol ap_ctrl_chain -ip_directory ./ip/
package_xo コマンドの出力は test.xo ファイルで、アプリケーションのビルドおよび実行 で説明すようにソース ファイルとして v++ --link コマンドに追加したり、Vitis IDE の使用 で説明するようにアプリケーション プロジェクトに追加できます。
RTL カーネルの XML ファイル に説明されている要件で指定されているように、IP の kernel.xml ファイルが必要な場合があります。-kernel_xml オプションを使用すると、package_xo コマンドにファイルを指定できます。この場合、package_xo コマンドで指定された kernel.xml が使用されます。次の例に、このコマンドを示します。
package_xo -xo_path ./test.xo -kernel_name test_sincos \
-kernel_xml ./src/kernel.xml -ip_directory ./ip/
ソフトウェア エミュレーション中に RTL カーネルを使用するには、カーネルに C モデルを提供する必要があります。C モデルのハードウェアでコンパイルされる関数プロトタイプは、RTL カーネルで使用されているのと同じインターフェイスである必要があります。ただし、C モデルは HLS ツールで合成可能になっている必要はありません。
package_xo
-kernel_files オプションを使用すると、パッケージされた RTL カーネルに C モデルを追加できます。
package_xo -xo_path ./test.xo -kernel_name test_sincos -kernel_xml ./src/kernel.xml \
-ip_directory ./ip/ -kernel_files ./imports/sincos_cmodel.cpp
package_xo コマンドは、C モデル ファイルを XO 内の cpu_sources でパッケージ化します。次の C モデル ファイルの末尾が自動的に認識されます。
- .cl = OpenCL
- .c、.cpp、.cxx = C/C++
RTL カーネルの推奨事項
RTL Kernel ウィザードで Vitis コア開発キットで使用する RTL デザインのパッケージを実行できますが、RTL カーネルの設計時には『ザイリンクス FPGA および SoC 用 UltraFast 設計手法ガイド』 (UG949) の推奨事項に従う必要があります。
カーネルを設計する際は、インターフェイスおよびパッケージの要件に従うことに加え、次のパフォーマンス要件も念頭に置いておく必要があります。
AXI4 インターフェイスのメモリ パフォーマンスの最適化
AXI4 インターフェイスは通常、プラットフォームの DDR メモリ コントローラーに接続されます。
メモリ コントローラーからベスト パフォーマンスを得るには、次の AXI インターフェイス動作を推奨します。
- ネイティブのメモリ コントローラーの AXI データ幅と一致する AXI データ幅を使用します。通常は 512 ビットです。
WRAP、FIXED、またはサブサイズのバーストを使用しないでください。- できる限り大型のバースト転送を使用してください (最高 4 KB までの AXI4 プロトコル)。
- ディアサートされた書き込みストローブは使用しないようにします。ディアサートされたストローブは、読み出し-変更-書き込み操作を実行するため、DDR メモリ コントローラーにエラー訂正コード (ECC) ロジックを作成します。
- パイプライン処理された AXI トランザクションを使用します。
- AXI インターフェイスが 1 つの DDR コントローラーにのみ接続されている場合は、スレッドの使用を避けます。
- カーネルにフルの書き込みトランザクション (ノンブロッキング書き込み要求) を転送する機能がない場合は、書き込みアドレス コマンドの生成を避けます。
- カーネルにバック プレッシャーのない読み出しデータ (ノンブロッキング読み出し要求) すべてを受信する機能がない場合は、読み出しアドレス コマンドの生成を避けます。
- 読み出し専用または書き込み専用インターフェイスが必要な場合は、プロジェクトをカーネルにパッケージする前に、未使用チャネルのポートを最上位 RTL ファイルでコメントアウトできます。
- 複数のスレッドを使用すると、カーネルとメモリ コントローラーの間のインフラストラクチャ IP により多くのリソースが必要になります。
RTL カーネルでのクロックの管理
RTL カーネルには、プライマリ クロック (ap_clk) とオプションのセカンダリ ブロック (ap_clk_2) の 2 つの外部クロック インターフェイスを含めることができます。どちらのクロックも内部ロジックのクロッキングに使用できますが、すべての外部 RTL カーネル インターフェイスはプライマリ クロックを使用する必要があります。プライマリ クロックとセカンダリ クロックの両方で、独立した自動周波数スケーリングがサポートされます。
RTL カーネル内でさらにクロックが必要な場合は、Clocking Wizard IP または MMCM/PLL プリミティブなどの周波数シンセサイザーを RTL カーネル内にインスタンシエートできます。このため、RTL カーネルはプライマリ クロックだけを使用するか、プライマリ クロックとセカンダリ クロックの両方を使用するか、内部周波数シンセサイザーを使用してプライマリ クロックおよびセカンダリ クロックを使用できます。次は、これら 3 つの RTL カーネルのクロッキング手法を使用した場合の長所と短所を示しています。
- 1 つの入力クロック: ap_clk
- 外部インターフェイスおよび内部カーネル ロジックは同じ周波数で実行されます。
- クロック乗せ換え (CDC) 問題はありません。
- ap_clk の周波数は、カーネルがタイミングを満たせるように自動的にスケールできます。
- 2 つの入力クロック: ap_clk および ap_clk_2
- カーネル ロジックはいずれかのクロック周波数で実行できます。
- 周波数を移動するには、RTL カーネルで適切な CDC 手法を使用する必要があります。
- カーネルがタイミングを満たすため、ap_clk および ap_clk_2 の両方が自動的に周波数を個別にスケールできます。
- カーネル内で周波数シンセサイザーを使用:
- クロックを生成するためにデバイス リソースが追加で必要です。
- ap_clk および ap_clk_2 (オプション) インターフェイスが必要です。
- 生成されたクロックの周波数は、CU ごとに別の周波数にできます。
- カーネル ロジックは使用可能なクロック周波数のいずれかで実行できます。
- 周波数を移動するために適切な CDC 手法が必要です。
RTL カーネルで周波数シンセサイザーを使用する場合は、次の制約に注意が必要です。
- RTL 外部インターフェイスは ap_clk でクロック供給されます。
- 周波数シンセサイザーには、RTL カーネルへの内部クロックとして使用する出力クロックを複数含めることができます。
- DRC エラーが起こらないように、Vivado 配置のクロック リソース配置に関する DRC をダウングレードする Tcl スクリプトを提供する必要があります。詳細は、『Vivado Design Suite プロパティ リファレンス ガイド』 (UG912) の
CLOCK_DEDICATED_ROUTEの説明を参照してください。次は、Tcl スクリプトに追加する必須の Tcl コマンドの例です。set_property CLOCK_DEDICATED_ROUTE ANY_CMT_COLUMN [get_nets pfm_top_i/static_region/base_clocking/clkwiz_kernel/inst/CLK_CORE_DRP_I/clk_inst/clk_out1注記: この制約は、ターゲット プラットフォームのクロック構造に合わせて編集する必要があります。 - --vivado オプション の説明のように、
v++ --vivado.propを使用して、手順 3 の Tcl スクリプトを指定し、最適化後に Vivado インプリメンテーションで使用されるようにします。次のオプションでは、Tcl スクリプトを最適化後に Vivado インプリメンテーションで使用されるように指定しています。--vivado.prop:run.impl_1.STEPS.OPT_DESIGN.TCL.POST={<PATH>/<Script_Name>.tcl} - カーネル (RTL または HLS ベース) で使用可能な 2 つのグローバル クロック入力周波数を指定します。
v++ --kernel_frequencyオプションを使用して、カーネル入力クロック周波数が想定どおりになるようにします。たとえば、1 つのクロックを使用する場合は、次のように指定します。
2 つのクロックの場合、複数の周波数をクロック ID に基づいて指定できます。プライマリ クロックの ID は 0 で、セカンダリ クロックの ID は 1 です。v++ --kernel_frequency 250v++ --kernel_frequency 0:250|1:500ヒント: PLL または MMCM 出力クロックが RTL カーネルの演算前にロックされるようにします。RTL カーネルでロックされた信号を使用すると、クロックが正しく動作するようになります。
v++ で次のようなエラーが表示されます。ERROR: [VPL-1] design did not meet timing - Design did not meet timing. One
or more unscalable system clocks did not meet their required target
frequency. Please try specifying a clock frequency lower than 300 MHz using
the '--kernel_frequency' switch for the next compilation. For all system
clocks, this design is using 0 nanoseconds as the threshold worst negative
slack (WNS) value. List of system clocks with timing failure.この場合、内部クロック周波数を変更するか、タイミングを満たすようにカーネル ロジックを最適化する必要があります。
QoR (結果の品質) に関する注意事項
タイミングおよびエリアの結果を改善するには次の推奨事項に従ってください。
- すべてのリセット入力をパイプライン処理し、ファンアウトの大きなネットを避けるため、内部でリセットを分配します。
- 必要な制御ロジックのフリップフロップのみをリセットします。
- できる限り、入力および出力信号にレジスタを付けるようにしてください。
- 特に複数のカーネルがインスタンシエートされる場合は、確実にフィットするように、ターゲット プラットフォームのエリアに比例してカーネルのサイズを検討します。
- スタックド シリコン インターフェイス (SSI) テクノロジがプラットフォームには使用されていることに注意してください。これらのデバイスには複数のダイがあり、ダイ間をまたぐロジックはフリップフロップからフリップフロップへのタイミング パスである必要があります。
デバッグおよび検証での注意事項
- RTL カーネルは、検証コンポーネント、ランダム化、プロトコル チェッカーなどのアドバンス検証手法を使用して、独自のテストベンチで検証する必要があります。Vivado IP カタログに含まれる AXI Verification IP (VIP) を使用すると、AXI インターフェイスを検証するのに役立ちます。RTL カーネルのサンプル デザインには、サンプル スティミュラス ファイルを含む AXI VIP ベースのテストベンチが含まれています。
- ハードウェア エミュレーションは、ホスト コードのソフトウェア インテグレーションをテストしたり、複数カーネル間の通信を確認したりするために使用します。