カーネル開始前に ILA トリガーを追加 - 2023.2 日本語

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

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語

ホスト プログラムを一時停止するには、GitHub の RTL カーネル例で使用されている wait_for_enter 関数など、コードに一時停止または待機ステップを追加します。この関数は、src/host.cpp コードで次のように定義します。

void wait_for_enter(const std::string &msg) {
    std::cout << msg << std::endl;
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

wait_for_enter 関数は、main 関数内で次のように使用します。

....
    std::string binaryFile = xcl::find_binary_file(device_name,"vadd");
	
    cl::Program::Binaries bins = xcl::import_binary_file(binaryFile);
    devices.resize(1);
    cl::Program program(context, devices, bins);
    cl::Kernel krnl_vadd(program,"krnl_vadd_rtl");


     wait_for_enter("\nPress ENTER to continue after setting up ILA trigger...");

    //Allocate Buffer in Global Memory
    std::vector<cl::Memory> inBufVec, outBufVec;
    cl::Buffer buffer_r1(context,CL_MEM_USE_HOST_PTR | CL_MEM_READ_ONLY, 
            vector_size_bytes, source_input1.data());
    ...

    //Copy input data to device global memory
    q.enqueueMigrateMemObjects(inBufVec,0/* 0 means from host*/);

    //Set the Kernel Arguments
    ...

    //Launch the Kernel
    q.enqueueTask(krnl_vadd);

wait_for_enter 関数を使用すると、ホスト プログラムが一時停止し、必要な ILA トリガーを設定して、カーネルからのデータを収集する準備をするための時間が与えられます。Vivado ハードウェア マネージャーを設定したら、Enter キーを押してホスト アプリケーションの実行を続行します。

  • C ホスト コードでは、上記の例に示すように、cl::Kernel オブジェクトの作成後に一時停止を追加します。
  • C ホスト コードでは、clCreateKernel() 関数呼び出しの後に一時停止を追加します。