System ILA
ハードウェア デバッグで重要なのは、カーネルに必要なデバッグ ロジックを挿入することです。次のトピックでは、使用可能なカーネル ポートをリストし、選択したポートで System Integrated Logic Analyzer (ILA) コアをイネーブルにし、プロトコル違反のチェック用に AXI Protocol Checker デバッグ コアをイネーブルにする v++
リンカー オプションを示します。
ILA コアを使用すると、ハードウェアで実行される計算ユニット (CU) のインスタンスのアクティビティをトランザクション レベルで表示できます。ILA コアを使用すると、特定の AXI トラフィックをキャプチャして表示することもできます。ILA を使用すると、1 つまたは複数の信号をトリガーするカスタム イベントを指定し、システム速度で波形をキャプチャすることが可能です。波形はビューアーで解析でき、ハードウェアのデバッグ、プロトコル違反の検出、またはパフォーマンスの問題に使用できます。また、アプリケーションのハングアップなどの困難な状況をデバッグする場合にも重要です。
キャプチャされたデータは、Vivado ツールを使用してザイリンクス仮想ケーブル (XVC) を介してアクセスできます。詳細は、 『Vivado Design Suite ユーザー ガイド: プログラムおよびデバッグ』 (UG908) を参照してください。
ILA コアは、既存の RTL カーネルに追加してデザイン内でデバッグ機能をイネーブルにするか、v++
コンパイラでリンク時に自動的に挿入されるようにできます。--debug オプション で説明するように、v++
コマンドには、デバッグおよびパフォーマンス監視用にカーネルへのインターフェイスに System ILA コアを接続する --debug
オプションがあります。
-–debug
オプションを使用して ILA IP コアの挿入をイネーブルにするには、次の構文を使用します。
--debug.chipscope <cu_name>[:<interface_name>]>
<interface_name>
はオプションです。指定しない場合は、CU のすべてのポートが解析されます。--debug.list_ports
オプションを使用すると、--debug
オプションと一緒に使用するカーネル上のインタフェース名が戻されます。フラット化されたデザイン、またはマスター モードで複数のデバッグ ブリッジが存在するデザインの場合、フローはデバッグ コアを結合するためのデバッグ ブリッジを選択しませんので、接続を定義する制約が必要です。たとえば、Samsung Smart SSD U.2 フラットシェルでは、デバッグ (ILA) オプションを有効にしてカーネルを生成している間、スタティック領域とダイナミック領域の間にパーティションは作成されません。デバッグ中のカーネル AXI ポートの接続を、ダイナミック領域のユーザー デバッグ ブリッジに指定する必要があります。
接続を指定するには、v++
コマンドラインで次のオプションを指定する必要があります。
--advanced.paramcompiler.userPostDebugProfileOverlayTcl=<path to post_dbg_profile_overlay.tcl >
post_dbg_profile_overlay.tcl 内では、ファイルが connect debug core コマンドを使用して XDC ファイルを呼び出し、その処理順序を記述する必要があります。
たとえば、post_dbg_profile_overlay.tcl ファイルの内容は次のようになります。
read_xdc < path to the connect_debug_core.xdc file>
set_property used_in_implementation TRUE [get_files <path to the connect_debug_core.xdc file>]
set_property PROCESSING_ORDER EARLY [get_files <path to the connect_debug_core.xdc file>]]
connect_debug_core.xdc ファイルでは、connect_debug_cores 制約を指定する必要があります。
次に例を示します。
connect_debug_cores -master [get_cells -hierarchical -filter {NAME =~ *debug_bridge_xsdbm/inst/xsdbm}]
-slaves [get_cells -hierarchical -filter {NAME =~ level0_i/ulp/system_ila_0}]
AXI Protocol Checker
AXI Protocol Checker コアは、AXI インターフェイスを監視します。インターフェイスに接続すると、プロトコル違反をアクティブにチェックし、違反が発生した場合にそれを通知します。デザインのすべての CU、または特定の CU およびポートに割り当てることができます。
AXI Protocol Checker の挿入をイネーブルにするには、-–debug
オプションを次の構文で使用します。
--debug.protocol all
プロトコル チェッカーを使用する場合は、キーワード all
または <cu_name>:<interface_name>
を指定します。
--debug.list_ports
オプションを使用すると、protocol
または chipscope
で使用するカーネル上の実際のポート名を取得できます。ILA またはプロトコル チェッカーをデザインに追加するフローの例を次に示します。
-
-g
オプションを使用してカーネル ソース ファイルを XO ファイルにコンパイルして、カーネルにデバッグ機能を追加します。v++ -c -g -k <kernel_name> --platform <platform> -o <kernel_xo_file>.xo <kernel_source_files>
- カーネルが XO ファイルにコンパイルされたら、
--debug.list_ports
を使用し、v++
コンパイラでカーネルで有効な計算ユニットとポートの組み合わせが表示されるようにします。v++ -l -g --platform <platform> --connectivity.nk <kernel_name>:<compute_units>:<kernel_nameN> --debug.list_ports <kernel_xo_file>.xo
-
list_ports
を--debug.chipscope
または--debug.protocol
コマンドに置き換え、ポートに ILA または AXI デバッグ コアを追加します。v++ -l -g --platform <platform> --connectivity.nk <kernel_name>:<compute_units>:<kernel_nameN> --debug.chipscope <compute_unit_name>:<interface_name> <kernel_xo_file>.xo
--debug
オプションを 1 つの v++
コマンド ラインまたはコンフィギュレーション ファイルで複数回指定すると、複数の CU およびインターフェイスを指定できます。デザインがビルドされたら、ChipScope を使用したデバッグ に示すように、Vivado ハードウェア マネージャーを使用してデザインをデバッグできます。