FC2カウンター FPGAの部屋 Vitis 2019.2 アプリケーション・プロジェクトのホスト・コード作成手順
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vitis 2019.2 アプリケーション・プロジェクトのホスト・コード作成手順

Vitis 2019.2 アプリケーション・プロジェクトのホスト・コードの作成手順をまとめてみよう。

参考にするのは、
Vitis 統合ソフトウェア プラットフォームの資料 アプリケーション アクセラレーション開発 UG1393 (v2019.2) 2019 年 11 月 11 日” 52 ページ、第6章 ホスト アプリケーション
Vitis Unified Software Development Platform Documentation”、”
Developing Applications”、”Host Application
The OpenCL C++ Wrapper API Version: 1.2.6 Document Revision: 02

Vitis 統合ソフトウェア プラットフォームの資料 アプリケーション アクセラレーション開発 UG1393 (v2019.2) 2019 年 11 月 11 日”と”Host Application”は C 言語でのホストアプリケーションの解説、”The OpenCL C++ Wrapper API Version: 1.2.6 Document Revision: 02”は C++ でのホストアプリケーションの解説だ。

次に、OpenCL でカーネルを起動して、アプリケーションを起動する手順を示す。
なお、Vitis-Tutorials の mixing-c-rtl-kernels の host_step1.cpp のコードを一部引用する。

1. std::vector<int,aligned_allocator<int>> で 4096 バイトに境界を揃えたバッファを用意する
std::vector<int,aligned_allocator<int>> source_a(DATA_SIZE, 10);

2. ザイリンクス社のプラットフォームを特定する
xcl::get_xil_devices() の中にコードが含まれている(platform.getInfo<CL_PLATFORM_NAME>(&err))

3. プラットフォームのデバイスを特定する
std::vector<cl::Device> devices = xcl::get_xil_devices();

4. デバイスのIDを使ってコンテキストを作成する
cl::Context context(device);

5. コマンドキューを作成する
cl::CommandQueue q(context, device, CL_QUEUE_PROFILING_ENABLE);

6. ハードウェア .xclbin を読み込む。
std::ifstream bin_file(xclbinFilename, std::ifstream::binary);

7. ".xclbin"ファイルからプログラムをビルドする
cl::Program program(context, devices, bins);

8. プログラムからカーネル・オブジェクトを取得する(カーネルをFPGA で実行する)
cl::Kernel krnl_vector_add(program,"krnl_vadd");

9. cl::Buffer オブジェクトを使用してデバイスにメモリを割り当てる
cl::Buffer buffer_a(context, CL_MEM_USE_HOST_PTR | CL_MEM_READ_ONLY, size_in_bytes, source_a.data());

10. 入力データをFPGA用のメモリに転送する(組み込みの場合はメモリのアドレスを用意しているだけなのか?)
q.enqueueMigrateMemObjects({buffer_a,buffer_b},0/* 0 means from host*/);

11. カーネルの引数を用意する
krnl_vector_add.setArg(0,buffer_a);

12. カーネルを起動する
q.enqueueTask(krnl_vector_add);

13. カーネル実行の結果を取り出す
q.enqueueMigrateMemObjects({buffer_result},CL_MIGRATE_MEM_OBJECT_HOST);

14. 終了
q.finish();

  1. 2019年12月12日 21:28 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/4728-6cfd17f4
この記事にトラックバックする(FC2ブログユーザー)