ホスト プログラムを一時停止するには、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()
関数呼び出しの後に一時停止を追加します。