2021.1 Vitis™ アプリケーション アクセラレーション開発フロー チュートリアル

2020.1 Vitis アプリケーション アクセラレーション開発フロー チュートリアル

Vitis を使用したボトムアップ RTL カーネル フローでのアクセラレーション

RTL デザインは、FPGA 向けの従来の重要なハードウェア アクセラレータ開発手法です。RTL モジュールは柔軟性と効率性には優れていますが、時間がかかり、エラーの発生しやすいプロセスです。ザイリンクス Vitis™ 統合ソフトウェア プラットフォームは、実証済みの RTL カーネル設計手法を提供します。Vitis と含まれている Vivado ® Design Suite を使用すると、統合、ホストと FPGA 間の通信、DMA、およびその他のサポート タスクに多くの時間を費やすことなく、コア アクセラレーション モジュールに集中できます。

このチュートリアルの概要

このチュートリアルでは、ボトムアップの Vitis ベースの RTL カーネル構築および最終プロセス、およびザイリンクス ランタイム ライブラリ (XRT) とのホストとカーネルの相互作用について説明します。このチュートリアルのすべての手順では、波形やシステム ダイアグラムの表示に必要なものを除き、コマンド ライン インターフェイスを使用します。

このチュートリアルでは、デザイン例を使用して、関連する概念と手順を説明します。次の図は、このデザインのブロック図を示しています。これは単純な AES アクセラレータ デザインで、2 つのカーネル (krnl_aeskrnl_cbc) で構成されています。krnl_aes カーネルは AXI ストリーム スレーブおよびマスター ポートを持つ Core AES 演算コアです。krnl_cbc カーネルは、ホストとカーネル間のデータ交換、および krnl_aes モジュールを使用した AES-ECB モードと AES-CBD モードのインプリメンテーションを実行します。

top block diagram

Alveo™ データセンター アクセラレータ カードは、このチュートリアルのターゲット プラットフォームで、このチュートリアルでは、次のタスクについて説明します。

  • コマンド ライン インターフェイスを使用して、RTL デザインを Vitis 準拠の RTL カーネルにパッキングします

  • RTL カーネルでの MMCM/PLL の使用

  • Vivado XSim を使用したデザインのシミュレーション

  • ザイリンクス AXI VIP を使用した AXI インターフェイスを含む RTL デザインの検証

  • XRT を使用した 3 つの RTL カーネル制御モード (ap_ctrl_noneap_ctrl_hs および ap_ctrl_chain)

  • XRT ネイティブ API を使用した RTL カーネルのホスト プログラミング

  • Vitis ハードウェア エミュレーションを使用した RTL カーネル動作の詳細

注記: これはツールの使用に関する詳細なガイドラインではないため、基本的な理念と手順のみが表示されます。詳細は、ほかの資料を参照する必要があります。

デバイスおよびソフトウェア要件

デザインは、次のソフトウェア/ハードウェア環境およびツール チェーン バージョンで検証されています。

  • オペレーティング システム:

    • RedHat/CentOS 7 (RedHat/CentOS の追加要件を参照)

    • Ubuntu 18.04/20.04 (Ubuntu の追加要件を参照)

    • Verilog シミュレーション用にインストールされた Perl パッケージ (必須)

    • ハードウェア出力検証用にインストールされた OpenSSL ライブラリ (必須)

    • GCC 7

  • Vitis: 2021.1

  • XRT: 2.11.634

  • Alveo カード用のハードウェアとプラットフォーム (運用プラットフォームと開発プラットフォームの両方が必要):

    • Alveo U200: xilinx_u200_xdma_201830_2

    • Alveo U250: xilinx_u250_xdma_201830_2

    • Alveo U50: xilinx_u50_gen3x16_xdma_201920_3

    • Alveo U280: xilinx_u280_xdma_201920_3

RedHat/CentOS の追加要件

RedHat/CentOS 7 を使用している場合、デフォルトでインストールされる GCC バージョンは 4.x.x ですホスト プログラムをコンパイルする前に、次のコマンドを使用して GCC 7 をインストールする必要があります。

sudo yum install centos-release-scl sudo yum install devtoolset-7-gcc-c++ scl enable devtoolset-7 bash

CentOS/Redhat 用の OpenSSL ライブラリをインストールするには、次のコマンドを使用します。

sudo yum install openssl-devel

Ubuntu の追加要件

Ubuntu 用の OpenSSL ライブラリをインストールするには、次のコマンドを使用します。

sudo apt install libssl-dev

チュートリアルの内容

このチュートリアルは 3 つの部分に分かれており、順番に実行するようにしてください。

  1. AES の概要と Core AES 演算 RTL モジュール

この部分では、AES アルゴリズムの簡単な概要と AES アクセラレーションのコア RTL モジュールについて簡単に説明します。RTL AES モジュールは、ネイティブ Verilog インターフェイスを使用します。RTL モジュールの機能を検証するために、簡単な Verilog テストベンチが提供されています。

  1. Vitis 対応の RTL カーネル (krnl_aes) の作成とパッキング

この部分では、最初の部分で説明した RTL モジュールを krnl_aes と呼ばれる Vitis カーネルにパッキングします。これは Vitis に統合できます。krnl_aes カーネルには 4 つの内部 AES パイプラインがあり、AXI 制御スレーブと AXI ストリーム マスター/スレーブ ポートが含まれます。

krn_aes カーネルには ap_ctrl_noneap_ctrl_hs の混合制御モデルがあります。このカーネルでは MMCM IP が使用されて必要なコア クロックが生成されますが、AXI インターフェイスは標準プラットフォーム クロックを使用します。カーネルの機能を検証するため、ザイリンクス AXI VIP を使用した単純な Verilog テストベンチが提供されています。

この部分では、krnl_aes カーネルをいくつかの HLS カーネルと統合して、使用可能な XCLBIN ファイルを生成します。XRT ネイティブ API を使用したホスト テスト プログラムは、krnl_aes カーネルの機能をテストするために使用されます。

  1. Vitis 対応 RTL カーネル (krnl_cbc) の作成とパッキング

この部分では、AXI マスター インターフェイスと AXI ストリーム インターフェイスを持つ、krnl_cbc という新しい RTL カーネルを紹します。このカーネルが krnl_aes カーネルに接続されて、AES-ECB および AES-CBC モードの暗号化/復号化機能をインプリメントします。

krnl_cbc カーネルは ap_ctrl_chain 制御モデルをサポートします。提供されている AXI VIP ベースのテストベンチ、ハードウェア エミュレーション、およびホスト プログラムを使用して、ap_ctrl_chainap_ctrl_hs モデル間の動作およびパフォーマンスの違いを確認および比較できます。

デザイン リポジトリのディレクトリ構造と簡単な説明は次のとおりです。

├── aes # Directory for first part: aes │   ├── rtl/ # Verilog sources │   ├── tbench/ # Verilog/SystemVerilog testbench files │   ├── filelist_aes.f # file list file for xsim simulation │   ├── Makefile # Makefile for all operation │   ├── runsim_aes_xsim.sh # shell script to run the simulation with xsim │   └── xsim.tcl # xsim tcl script for simulation │ ├── common # common resources │   └── plain_gen.pl # Perl script to generate input data for RTL simulation │ ├── doc # documents │ ├── krnl_aes # Directory for second part: krnl_aes │   ├── hls # HLS sources │   ├── host/ # Host test program │   ├── rtl/ # Verilog sources │   ├── tbench/ # Verilog/SystemVerilog testbench files │   ├── filelist_krnl_cbc.f # xsim simulation command file │   ├── gen_ip.tcl # Vivado tcl script to generate required IPs │   ├── krnl_aes_test.cfg # Vitis v++ link config file │   ├── krnl_aes_test.xdc # Vitis v++ link constraint │   ├── krnl_aes.xdc # constraint for kernel krnl_aes │   ├── Makefile # Makefile for all operation │   ├── pack_kernel.tcl # Vivado tcl script to pack the kernel │   ├── runsim_krnl_aes_xsim.sh # shell script to run the simulation with xsim │   ├── setup_emu.sh # shell script to enable/disable hw_emu emulation mode │   └── xrt.ini # XRT config file for emulation/profiling │ ├── krnl_cbc # Directory for third pard: krnl_cbc │   ├── host/ # Host test program │   ├── rtl/ # Verilog sources │   ├── tbench/ # Verilog/SystemVerilog testbench files │   ├── filelist_krnl_cbc.f # xsim simulation command file │   ├── gen_ip.tcl # Vivado tcl script to generate required IPs │   ├── krnl_cbc_test.cfg # Vitis v++ link config file │   ├── krnl_cbc_test.xdc # Vitis v++ link constraint │   ├── Makefile # Makefile for all operation │   ├── pack_kernel.tcl # Vivado tcl script to pack the kernel │   ├── runsim_krnl_cbc_xsim.sh # shell script to run the simulation with xsim │   ├── setup_emu.sh # shell script to enable/disable hw_emu emulation mode │   ├── xrt.ini # XRT config file for emulation/profiling │   └── xsim.tcl # xsim tcl script to set hw_emu simulation options │ └── README.md