Vitis IDE デバッグ フロー

Vitis™ IDEを使用すると、デバッグ機能に簡単にアクセスできます。手動で設定すると、デバッグの実行ファイルを設定するのに多くの手順が必要となります。デバッグ フローを使用すると、これらの手順が Vitis IDE で自動的に処理されます。

注記: Vitis IDE のデバッグ フローは、デバッグ中のシェル スクリプトに依存します。これには、.bashrc または .cshrc などの設定ファイルが LD_LIBRARY_PATH などの環境設定と競合しないようにする必要があります。

デバッグ用に実行ファイルを準備するには、ビルド コンフィギュレーションを変更して Host debug および Kernel debug を適用できるようにする必要があります。これらのオプションは、Vitis IDE の Project Editor ビューから設定できます。Options セクションに 2 つのチェック ボックスがあります。

  • [Host debug] は、ホスト コンパイルのデバッグ構文を有効にし、すべてのビルド タイプで使用できます。
  • [Kernel debug] はカーネルのデバッグを有効にしますが、ソフトウェアおよびハードウェア エミュレーション ビルドでのみ使用できます。ハードウェア ビルドでのデバッグを有効にするには、Vitis のハードウェア関数設定 に示すように Chipscope Debug 設定を使用します。

これらのチェック ボックスをオンにすると、-g、または g++ および Vitis コンパイラの --debug オプションがイネーブルになります。

1: [Project Editor] ビューのデバッグ オプション

デバッグ機能は、Vitis ビルド コンィギュレーション設定 に示す Build Configuration Settings ダイアログ ボックスからもイネーブルにできるほか、Assistant ビューでビルド コンフィギュレーションを選択して Settings ボタンをクリックしても有効にできます。または、ビルド コンフィギュレーションをダブルクリックします。同じ 2 つのチェック ボックスが表示されます。ホスト デバッグはすべてのターゲットで有効にできますが、カーネル デバッグはソフトウェア エミュレーションおよびハードウェア エミュレーション ビルド ターゲットでしかサポートされません。

Vitis IDE から GDB セッションを実行すると、必要なものがすべて設定され、ハードウェアまたはソフトウェア エミュレーションの環境設定が自動的に管理されます。xrt.ini ファイル に説明するように、アプリケーションが実行されるときにデバッグがサポートされるように XRT が設定され、ホスト コード、カーネル コード、およびデバッグ サーバーの実行に必要なさまざまなコンソールが管理されます。

エンベデッド プラットフォームで実行する際、Vitis IDE は QEMU システム モード、PL カーネルのロジック シミュレータも設定および起動し、それらの同期を管理します。詳細は、launch_emulator ユーティリティ を参照してください。

デバッグし、ビルド ディレクトリをクリーンアップしてアプリケーションをビルドし直すビルド コンフィギュレーションを設定すると、GDB デバッグ環境でプロジェクトを実行する準備が整います。

デバッグ セッションを開始するには、[Assistant] ビューのビルド コンフィギュレーションを選択し、Debug () ボタンをクリックします。Vitis IDE でデバッグ セッションを開始すると、パースペクティブが Debug に切り替わり、さまざまなデバッグ ビューおよびソース コード ウィンドウなどを管理するウィンドウが追加で表示されるようになります。次の図に、Debug パースペクティブを示します。

2: [Debug] パースペクティブ

デバッグ環境を起動すると、デフォルトではホスト コードの main 関数本体の開始部分でアプリケーションが停止します。ほかの GDB グラフィカル フロントエンドと同様、ブレークポイントを設定し、変数を検証できます。Vitis IDE では、アクセラレーションされたカーネル インプリメンテーションに対しても同じ機能を使用できます。詳細は、アプリケーションおよびカーネルのデバッグ を参照してください。

注記: ハードウェア エミュレーションでは、効率の良いインプリメンテーションのため C/C++/OpenCL™ カーネル コードが変換されるので、すべての文にブレークポイントを配置できるわけはありません。ほとんどの場合、未処理のループおよび関数には配置できます。また、保持されている変数しかアクセスできません。

スタンドアロン デバッグ フローの使用

Vitis IDE では、コマンド ライン フローを使用してビルドしたプロジェクトをデバッグ ツールを開くことができます。

エンベデッド プラットフォームのスタンドアロン デバッグの起動

スタンドアロン デバッグ フローでは、エンベデッド プロセッサ アプリケーション アクセラレーション フロー (embedded_accel) またはエンベデッド プロセッサ ソフトウェア開発フロー (embedded) の両方がサポートされます。エンベデッド プラットフォームの場合、アプリケーションはデバイスの Arm プロセッサで実行され、システムを起動してアプリケーションおよびカーネルを読み込むのに必要なファイルはリモート システムに含まれますが、デバッグ ツールはローカル システムで実行されるので、生成されるデータとレポートをエンベデッド システムからローカル システムに移動する必要があります。その環境でのデバッグのプロセスには、さらに設定およびコンフィギュレーションが必要です。

Vitis IDE で embedded_accel フローのスタンドアロン デバッグを実行する手順は、次のとおりです。
  1. まず、launch_sw_emu.sh または launch_hw_emu.sh スクリプト (--package プロセスで生成) を使用して QEMU エミュレーター環境を起動します。
  2. -debug オプションを使用して Vitis IDE をスタンドアロン デバッグ モードで起動します。

Vitis IDE で embedded フローのスタンドアロン デバッグを実行するには、まず --package プロセスで生成される launch_hw_emu.sh スクリプトを使用して QEMU エミュレーター環境を起動します。

システムのエミュレーションに必要なファイルは、--package コマンドでも定義されます。つまり、エンベデッド プラットフォームのスタンドアロン デバッグ プロセスの起動は、エミュレーション スクリプトを含めたパッケージ プロセスの出力に依存します。次は、エミュレーション環境を起動するコマンド例です。

launch_hw_emu.sh -pid-file emulation.pid -no-reboot -forward-port 1440 1534 \
-enable-debug

説明:

-enable-debug
QEMU と XSIM を起動する 2 つのコマンド シェルを開き、GDB から QEMU シェルへの接続をイネーブルにします。
-forward-port
ターゲットからホストまで TCP ポートを転送して、QEMU シェルに接続します。QEMU ポートのデフォルトは 1440 です。必要であれば、たとえば 1446 などに変更できますが、launch_emulation コマンドまたはスクリプトと、vitis -debug コマンド ラインの両方で指定する必要があります。
-no-reboot
完了したら QEMU 環境を終了します。
-pid-file
プロセス ID を指定ファイルに書き込みます。必要であればプロセスを停止するためにも使用できます。

ハードウェア エミュレーションの場合は、QEMU システム モードを実行するターミナル ウィンドウ 2 つと、カーネルをシミュレーションする Vivado シミュレータが起動されます。

ターミナルとエミュレーションが起動されて実行されたら、別のコマンド シェルでスタンドアロン デバッグ モードで Vitis IDE が起動できます。

vitis -debug -flow embedded_accel -target hw_emu -exe vadd.elf \
-program-args vadd.xclbin -kernels vadd

説明:

vitis -debug
Vitis IDE をスタンドアロン デバッグ モードで起動します。
-flow embedded_accel
エンベデッド プロセッサ プラットフォームでアプリケーション アクセラレーション フローを指定します。
-target hw_emu
デバッグされるターゲット ビルドを指定します。
-exe vadd.elf
実行してデバッグする実行アプリケーションを指定します。
-program-args vadd.xclbin
実行ファイルへの引数として読み込む .xclbin ファイルを指定します。
vitis -debug コマンド ライン に示すように、さらに指定可能なオプションがあり、アプリケーションの設定およびビルド環境によっては必要となるものもあります。

エンベデッド システムの場合、デフォルトでエミュレーション環境またはエンベデッド システムのフォルダーから /mntの実行ファイルと .xclbin ファイルおよびその他の必要な入力ファイルが検索されます。これは、ツールを起動するときに -target-work-dir を指定すると変更できます。Debug パースペクティブが開いた状態で Vitis IDE で起動され、指定した実行アプリケーションとカーネル コードでデバッグ コンフィギュレーションが実行されます。この段階からは、GUI ベースのデバッグ環境内からステップイン、ステップオーバー、変数表示、ブレークポイントの追加などのすべてのデバッグ操作を実行できます。

データセンター プラットフォームのスタンドアロン デバッグの起動

データセンター プラットフォームのスタンドアロン デバッグの起動方法は、もう少し簡潔です。この場合、実行してデバッグするビルド ターゲットと実行ファイルを識別しておく必要があります。データセンター プラットフォームには、エミュレーション環境は必要ありません。

次の例では、ソフトウェア エミュレーション ビルドをターゲットにする data_center フローの Vitis スタンドアロン デバッグを起動します。現在のディレクトリで探される host.exe 実行ファイルが指定され、デバッグするカーネルが指定されます。

vitis -debug -flow data_center -target sw_emu -exe host.exe -kernels krnl_vadd

デフォルトでは、スタンドアロン デバッグ フローで現在のディレクトリから指定したファイルが探され、結果が書き出されます。-work-dir オプションを指定すると、デフォルトとは別の作業ディレクトリを指定できます。これは、.xclbin ファイルが別のディレクトリでビルドされる場合に必要なことがあります。

これで Vitis IDE で Debug パースペクティブが開き、GUI ベースのデバッグ環境内からステップイン、ステップオーバー、変数表示、ブレークポイントの追加などのすべてのデバッグ操作を実行できるようになります。

vitis -debug コマンド ライン

コマンド ラインの使用方法

Vitis ソフトウェア プラットフォームのスタンドアロン デバッグ機能を使用すると、Vitis IDE を起動して既存のコマンド ライン プロジェクトをデバッグできます。次のセクションでは、各コマンド ライン オプションの説明のほか、さまざまなプラットフォームおよびターゲット ビルドのスタンドアロン デバッグ環境の起動例を示します。

-debug

vitis -debug

Vitis IDE をスタンドアロン デバッグ モードで起動します。

-flow

-flow [ data_center | embedded_accel | embedded ]

デバッグされるアプリケーション プロジェクトのタイプを指定します。これにより、たとえば zcu104_base などのエンベデッド プラットフォームで実行されるアプリケーション アクセラレーション プロジェクトやエンベデッド ソフトウェア プロジェクトなど、Vitis IDE が Alveo で実行されるデータセンター アプリケーションのデバッグ用に設定されます。

重要: embedded および embedded_accel フローの場合、--package 段階 (エンベデッド プラットフォームのパッケージ を参照) で生成される launch_hw_emu.sh または launch_sw_emu.sh スクリプト、または launch_emulator コマンドを使用して QEMU システム エミュレーターを起動する必要があります。

-workspace

-workspace <workspace>

アプリケーション プロジェクトをデバッグ モードで開いたときに使用する Vitis IDE ワークスペースを指定します。このオプションを指定しない場合、現在の作業ディレクトリに workspace という名前のディレクトリが作成されます。workspace という名前のディレクトリが既にある場合は、それがワークスペースとして使用されます。

-exe

-exe <path_to_executable>

アプリケーション実行ファイルのファイル名とパスを指定します。

次に例を示します。

vitis -debug -exe ./host.elf

-target

-target [ sw_emu | hw_emu | hw ]
デバッグに使用するビルド ターゲットを指定します。
ヒント: これは data_center および embedded_accel フローにのみ適用されます。

次に例を示します。

vitis -debug -target hw_emu

-program-args

-program-args <program arguments>

ランタイム時にホスト アプリケーションに渡すコマンド ライン引数を指定します。指定しない場合に data_center または embedded_accel フローが選択されていると、.xclbin が引数として渡されます。

次に例を示します。

vitis -debug -program-args ./xclbin in.dat

-kernels

-kernels <list of kernels>

デバッグするカーネルのリストを指定します。複数のカーネル名は、カンマで区切って指定できます。リストされるカーネルは関数レベルのブレークポイントとして定義されるので、デバッガーはカーネル実行が開始されると停止します。カーネルを指定しない場合、関数レベルのデバッグは提供されません。

これは data_center フローにのみ使用できます。embedded または embedded_accel フローの場合はサポートされません。

次に例を示します。

vitis -debug -kernels mmult madd

-work-dir

-work-dir <path_to_working_directory>

生成された出力ファイルとレポートを保存する作業ディレクトリを指定します。これは data_center および embedded_accel フローにのみ使用できます。

data_center フローの場合、これが指定した .exe の起動されるディレクトリです。embedded_accel フローの場合、起動ディレクトリは -target-work-dir で定義されます。

ヒント: 指定しない場合、現在の作業ディレクトリが作業ディレクトリとして使用されます。

-target-work-dir

-target-work-dir <Target working directory>

ターゲット ボード OS のディレクトリ、実行ファイルが起動される QEMU 環境を指定します。これは embedded_accel に使用できるほか、Linux OS を使用した embedded フローにも使用できます。

ヒント: 指定しない場合、ターゲット作業ディレクトリは /mnt です。

-xrt-ini

-xrt-ini <path_to_xrt.ini>

xrt.ini ファイルのディレクトリを指定します。data_center および embedded_accel フローにのみ使用できます。

ディレクトリを指定すると、アプリケーションの .exe ファイルと同じディレクトリまたは作業ディレクトリが検索されます。

-os

-os [ linux | baremetal ]

ターゲット ボード上で実行される OS を指定します。これは embedded フローにのみ使用できます。

-host

-host <host_name or ip_address>

TCF エージェントまたは hw_server が実行されるホスト システムの名前または IP アドレスを指定します。embedded_accel および embedded フローにのみ使用できます。指定しない場合、デフォルトのホスト名はベアメタルの場合 localhost に、デフォルトの IP アドレスは Linux ターゲット OS の場合 192.168.0.1 になります。

-port

-port <port number>

ターゲット Linux で実行される TCF エージェントのポート、またはベアメタルの場合はローカル ホストで実行される hw_server のポートを指定します。指定しない場合、ポートは TCF エージェントで 1534、hw_server で 3121 になります。

-launch-script

-launch-script <path_to_tcl_script>

アプリケーションをデバッガーに接続する前に読み込む Tcl スクリプトを指定します。これは、ベアメタル OS を使用した embedded フローにのみ使用できます。Tcl スクリプトには、ボードを初期化し、アプリケーションをダウンロードし、ブレークポイントを追加し、デバッガーでターゲットを接続できるようにするコマンドが含まれます。