ソフトウェア エミュレーションでは、ハードウェア アクセラレータをよりよくモデリングできるように、FPGA バイナリの実行は別のプロセスとして実行されます。ホスト コードのデバッグに GDB を使用している場合は、カーネル コードはホスト コード プロセス内で実行されるわけではないので、カーネル コードで設定されているブレークポイントは発生しません。ホスト コードおよびカーネル コードの同時デバッグをサポートするため、Vitis デバッガーには、デバッグ サーバー (
xrt_server
) を使用して実行されるカーネルに接続するシステムがメカニズムがあります。ホスト コードおよびカーネル コードをデバッグ サーバーに接続するには、次の手順を使用して 3 つのターミナル ウィンドウを開く必要があります。 ヒント: このフローは、GNU から入手可能な DDD (Data Display Debugger) などの GDB 用のグラフィカル フロントエンドを使用した場合でも使用できます。GDB を起動するには、次の手順に従います。
- 3 つのターミナル ウィンドウを開き、各ウィンドウを Vitis 環境の設定 で説明されるように設定します。3 つのウィンドウは、次のように使用します。
-
xrt_server
を実行 - ホスト コードで GDB (
xgdb
) を実行 - カーネル コードで GDB (
xgdb
) を実行
-
- 最初のターミナルの環境を設定したら、次のコマンドを実行して Vitis デバッグ サーバーを起動します。
xrt_server --sdx-url
デバッグ サーバーは、ホストおよびカーネルからのデバッグ コマンドをリッスンし、2 つのプロセスを接続して 1 つのデバッグ環境を作成します。
xrt_server
から標準出力にlistener port <num>
と返されます。カーネル プロセスのデバッグに GDB でこのリスナー ポートが使用されるので、リスナー ポートの番号を継続的にチェックします。このプロセスを制御するには、新しい GDB インスタンスを開始し、xrt_server
に接続する必要があります。これは、次の手順で実行します。重要:xrt_server
の実行中は、実行されるすべての GDB プロセスはユーザーからの指示を待機します。GDB がxrt_server
に接続されない場合、またはコマンドを供給しない場合は、カーネル コードがハングしているように見えます。 - 2 番目のターミナルの環境を設定したら、次の手順に従って、ホスト コード用に GDB を起動します。
-
ENABLE_KERNEL_DEBUG
環境変数を設定します。たとえば、C シェルに次のように入力します。setenv ENABLE_KERNEL_DEBUG true
-
アプリケーション ハードウェア ビルドの実行 の手順に従って、
XCL_EMULATION_MODE
環境変数をsw_emu
モードに設定します。たとえば、C シェルに次のように入力します。setenv XCL_EMULATION_MODE sw_emu
-
xrt.ini ファイル で説明されるように、ランタイム デバッグ機能を xrt.ini ファイルのエントリを使用してイネーブルにする必要があります。ホスト実行ファイルと同じディレクトリに xrt.ini ファイルを作成し、次の行を含めます。
[Debug] app_debug=true
これにより、カーネルがデバッグ用にコンパイルされていることと、XRT ライブラリでデバッグ機能をイネーブルにする必要があることが、ランタイム ライブラリに通知されます。
-
ザイリンクス ラッパーから
gdb
を起動します。xgdb --args <host> <xclbin>
<host>
はホスト実行ファイルの名前、<xclbin>
は FPGA バイナリの名前です。次に例を示します。xgdb --args host.exe vadd.xclbin
xgdb
ラッパーから GDB を起動すると、Vitis デバッガー用に次の手順が実行されます。- GDB に指定のホスト プログラムを読み込みます。
- GDB コマンド プロンプトで source コマンドを使用して Python スクリプトを読み込み、Vitis デバッガー拡張機能をイネーブルにします。
gdb> source ${XILINX_XRT}/share/appdebug/appdebug.py
-
- 3 番目のターミナルの環境を設定したら、
xgdb
コマンドを実行し、gdb
プロンプトで次のコマンドを実行します。- ソフトウェア エミュレーションの場合:
file <Vitis_path>/data/emulation/unified/cpu_em/generic_pcie/model/genericpciemodel
<Vitis_path> は Vitis コア開発キットのインストール パスです。
$XILINX_VITIS
環境変数の使用は、GDB 内では機能しません。 - カーネル プロセスに接続します。
target remote :<num>
<num>
は、xrt_server
から返されるリスナー ポート番号です。
- ソフトウェア エミュレーションの場合:
3 つのターミナル ウィンドウで xrt_server
、ホスト用の GDB、カーネル用の GDB を実行すると、必要に応じてホストまたはカーネルにブレークポイントを設定し、continue
コマンドを実行してアプリケーションをデバッグできます。すべてのカーネル実行が終了すると、ホスト コードは続行し、xrt_server
接続が解除されます。