カーネルとメモリ コントローラー間の AXI トランザクションが無効であるため、カーネルがハングする可能性があります。これらの問題をデバッグするには、カーネルをインストルメント化する必要があります。
-
Vitis コア開発キットには、
v++
リンク (--link
) 時に適用可能なインストルメンテーション オプションが 2 つあります。これらのオプションは両方ともインプリメンテーションにハードウェアが追加されるので、リソース使用率に基づいてインストルメンテーションを制限する必要があることがあります。- 軽量 AXI プロトコル チェッカー (
lapc
) を追加します。これらのプロトコル チェッカーは、--debug オプション で説明するように、-–debug.protocol
オプションで追加されます。次の構文を使用します。--debug.protocol <compute_unit_name>:<interface_name>
通常、<interface_name>
の使用はオプションです。指定しない場合、CU のすべてのポートが解析されます。プロトコル チェッカーが挿入されるように定義するには、--debug.protocol
オプションを使用します。このオプションでは、<compute_unit_name>
および<interface_name>
のいずれかまたは両方に、キーワードall
を使用できます。注記: 1 つのコマンド ラインまたはコンフィギュレーション ファイルに複数の--debug.xxx
オプションを指定できます。 - パフォーマンス モニター (
am, aim, asm
) を追加すると、詳細な通信統計 (カウンター) のリストがイネーブルになります。これはパフォーマンス解析に最も役立ち、未処理のポート アクティビティのデバッグにおいて有益な情報を得ることができます。パフォーマンス モニターを追加するには、--profile オプション で説明するように、--profile
オプションを使用します。--profile
オプションの基本的な構文は、次のとおりです。
パフォーマンス モニターを接続する特定のインターフェイスを決定するには、3 つのフィールドが必要ですが、リソース消費が問題ではない場合は、--profile.data <krnl_name>|all:<cu_name>|all:<intrfc_name>|all:<counters>|all
all
キーワードを使用すると、1 つのオプションで既存のカーネル、演算ユニット、インターフェイスすべてを監視できるよう設定できます。または、kernel_name
、cu_name
、およびinterface_name
を明示的に指定してインストルメンテーションを制限します。最後のオプション<counters>|all
は、大型デザインで情報の収集をcounters
に制限するか、all
(デフォルト) を指定して実際のトレース情報が収集されるようにします。注記: 1 つのコマンド ラインまたはコンフィギュレーション ファイルに複数の--profile
オプションを指定できます。[profile] dataernel1:cu1:m_axi_gmem0 dataernel1:cu1:m_axi_gmem1 dataernel2:cu2:m_axi_gmem
- 軽量 AXI プロトコル チェッカー (
- アプリケーションをビルドし直したら、追加した AIM IP および LAPC IP を含め、
xclbin
を使用してホスト アプリケーションを実行し直します。 - アプリケーションがハングしたら、
xbutil examine
を使用してエラーや異常を確認します。 - 次のように AIM 出力を確認します。
- 次のコマンドを数回実行して、動いているカウンターがあるかを確認します。カウンターが動いている場合、カーネルはアクティブです。
xbutil examine -d <bdf> -r debug-ip-status -e aim
ヒント: AIM 出力のテストは、GDB デバッグでもxstatus aim
コマンドを使用してサポートされます。 - カウンターが止まっている場合、未処理のカウントが 0 より大きいということは、AXI トランザクションにハングしているものがある可能性があります。
- 次のコマンドを数回実行して、動いているカウンターがあるかを確認します。カウンターが動いている場合、カーネルはアクティブです。
- 次のように LAPC 出力を確認します。
- 次のコマンドを実行して、AXI 違反がないかどうかを確認します。
xbutil examine -d <bdf> -r debug-ip-status -e lapc
ヒント: LAPC 出力のテストは、GDB デバッグでもxstatus lapc
コマンドを使用してサポートされます。 - AXI 違反がある場合は、カーネル インプリメンテーションに問題があることを意味します。
- 次のコマンドを実行して、AXI 違反がないかどうかを確認します。