カーネルとメモリ コントローラー間の AXI トランザクションが無効であるため、カーネルがハングする可能性があります。これらの問題をデバッグするには、カーネルをインストルメント化する必要があります。
-
Vitis コア開発キットには、
v++
リンク (-l
) 時に適用可能なインストルメンテーション オプションが 2 つあります。これらのオプションは両方ともインプリメンテーションにハードウェアが追加されるので、リソース使用率に基づいてインストルメンテーションを制限する必要があることがあります。- 軽量 AXI プロトコル チェッカー (
lapc
) を追加します。これらのプロトコル チェッカーは、-–dk
オプションを使用して追加します。次の構文を使用します。--dk [protocol|list_ports]:<compute_unit_name>:<interface_name>
通常、<interface_name>
の使用はオプションです。指定しない場合、すべてのポートが解析されます。プロトコル チェッカーが挿入されるように定義するには、protocol
オプションを使用します。このオプションでは、<compute_unit_name>
および<interface_name>
のいずれかまたは両方に、キーワードall
を使用できます。list_ports
オプションは、現在のデザインの有効な計算ユニットとポート組み合わせのリストを生成します。注記: コマンド ライン 1 行に複数の--dk
オプションを含めて、インターフェイス モニター機能を追加できます。 - パフォーマンス モニター (
am, aim, asm
) を追加すると、詳細な通信統計 (カウンター) のリストがイネーブルになります。これはパフォーマンス解析に最も役立ち、未処理のポート アクティビティのデバッグにおいて有益な情報を得ることができます。パフォーマンス モニターを追加するには、profile_kernel
オプションを使用します。profile_kernel
オプションの基本的な構文は、次のとおりです。
パフォーマンス モニターを追加する正確なインターフェイスを指定するには、3 つのフィールドが必要ですが、リソース使用量が問題ではない場合は、--profile_kernel 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_kernel
オプションを含めて、パフォーマンス機能を追加できます。--profile_kernel data:kernel1:cu1:m_axi_gmem0 --profile_kernel data:kernel1:cu1:m_axi_gmem1 --profile_kernel data:kernel2:cu2:m_axi_gmem
- 軽量 AXI プロトコル チェッカー (
- アプリケーションをビルドし直したら、追加した AIM IP および LAPC IP を含め、
xclbin
を使用してホスト アプリケーションを実行し直します。 - アプリケーションがハングしたら、
xbutil status
を使用してエラーや異常を確認します。 - 次のように AIM 出力を確認します。
-
xbutil status --aim
を数回実行して、動いているカウンターがあるかを確認します。カウンターが動いている場合、カーネルはアクティブです。ヒント: AIM 出力のテストは、GDB デバッグでもxstatus spm
コマンドを使用してサポートされます。 - カウンターが止まっている場合、未処理のカウントが 0 より大きいということは、AXI トランザクションにハングしているものがある可能性があります。
-
- 次のように LAPC 出力を確認します。
-
xbutil status --lapc
を実行して、AXI 違反がないかどうかを確認します。ヒント: LAPC 出力のテストは、GDB デバッグでもxstatus lapc
コマンドを使用してサポートされます。 - AXI 違反がある場合は、カーネル インプリメンテーションに問題があることを意味します。
-