コマンド ライン デバッグの例 - 2023.2 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語
コマンド ライン フローを使用したデバッグ方法の理解を助けるため、この例ではザイリンクス GitHub の hello_world 例をビルドしてデバッグします。
  1. ターミナルで、Vitis 環境の設定 で説明されるように環境を設定します。
  2. Vitis Examples GitHub リポジトリ全体をクローンして、すべての Vitis 例を入手します。
    git clone https://github.com/Xilinx/Vitis_Accel_Examples.git

    これにより、IDCT 例を含む Vitis_Examples ディレクトリが作成されます。

  3. cd コマンドを使用して IDCT 例のディレクトリに移動します。
    cd Vitis_Accel_Examples/hello_world/

    ホスト コードは src/host.cpp に含まれており、カーネル コードは src/vadd.cpp の一部です。

  4. デバイス バイナリのビルド の手順に従って、ソフトウェア エミュレーション用にカーネル ソフトウェアをビルドします。
    1. -g を使用して v++ コンパイラを実行し、カーネル オブジェクト ファイルをデバッグ用にコンパイルします。
      v++ -t sw_emu --platform <DEVICE> -g -c -k vadd \
      -o vadd.xo ./src/vadd.cpp
    2. -g を指定してカーネル オブジェクト ファイルをリンクします。
      v++ -g -l -t sw_emu --platform <DEVICE> -o vadd.xclbin vadd.xo
  5. ソフトウェア アプリケーションのビルド の手順に従って、GNU コンパイラ チェーン g++ を使用してホスト コードをデバッグ用にコンパイルします。
    注記: エンベデッド プロセッサ ターゲット プラットフォームでは、ホスト アプリケーションのコンパイルおよびリンク で説明するように、GNU Arm クロス コンパイラを使用します。
    1. -g オプションを使用してホスト コード C++ ファイルをデバッグ用にコンパイルします。
      g++ -c -I${XILINX_XRT}/include -g -o host.o src/host.cpp 
    2. -g を使用してオブジェクト ファイルをデバッグ用にリンクします。
      g++ -g -lOpenCL -lpthread -lrt -lstdc++ -L${XILINX_XRT}/lib/ -o host host.o
  6. emconfigutil ユーティリティ で説明されるように、次のコマンドを使用してエミュレーション環境を設定します。
    emconfigutil --platform <device>
    エミュレーション モード (sw_emu または hw_emu) は、XCL_EMULATION_MODE 環境変数で設定します。これは、C シェルでは次のように指定します。
    setenv XCL_EMULATION_MODE sw_emu
  7. xrt.ini ファイル で説明されるように、ランタイムをデバッグ用に設定する必要があります。ホスト アプリケーションをコンパイルしたディレクトリで、次の内容の xrt.ini ファイルを作成します。
    [Debug]
    app_debug=true
    
  8. ホストおよびカーネルで GDB を実行します。次の手順に従うと、コマンド ラインでのデバッグ プロセスを実行できます。これには、Vitis 環境の設定 で説明されるように、3 つのコマンド ターミナルが必要です。
    1. 最初のターミナルでは、XRT デバッグ サーバーを開始します。XRT デバッグ サーバーは、ホスト コードとカーネル コードの間のトランザクションを処理します。
      ${XILINX_VITIS}/bin/xrt_server --sdx-url
    2. 2 つ目のターミナルで、エミュレーション モードを設定します。
      setenv XCL_EMULATION_MODE sw_emu
      次のコマンドを使用して GDB を実行します。
      xgdb –-args host vadd.xclbin
      gdb プロンプトに次のコマンドを入力します。
      run
    3. 3 つ目のターミナルで、ソフトウェア エミュレーション モデルを GDB に接続し、デザインをステップ実行できるようにします。別の xgdb を開始します。
      xgdb
      • ソフトウェア エミュレーションでのデバッグの場合:
        • gdb プロンプトに次のコマンドを入力します。
          file <XILINX_VITIS>/data/emulation/unified/cpu_em/generic_pcie/model/genericpciemodel
          注記: GDB では環境変数は展開されないので、<XILINX_VITIS>Vitis ソフトウェア プラットフォームのインストールへのパスに置き換える必要があります。
      • カーネル プロセスに接続します。
        target remote :NUM

        NUM は、GDB リスナー ポートとして xrt_server から返される値です。

      この時点で、ホスト コードとカーネル コードが 2 つの異なる GDB セッションで実行され、GDB でデバッグを通常どおり実行できるようになります。これは、異なるプロセスを処理する場合は一般的です。

      重要: 1 つのプロセスが次のブレークポイントに達する前に、もう 1 つのプロセスがブレークポイントに達することがあるということに注意してください。この場合、2 つ目のターミナルで入力を待つ間、1 つ目のターミナルでのデバッグ セッションがハングしているように見えます。