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_aes
と krnl_cbc
) で構成されています。krnl_aes
カーネルは AXI ストリーム スレーブおよびマスター ポートを持つ Core AES 演算コアです。krnl_cbc
カーネルは、ホストとカーネル間のデータ交換、および krnl_aes モジュールを使用した AES-ECB モードと AES-CBD モードのインプリメンテーションを実行します。
Alveo™ データセンター アクセラレータ カードは、このチュートリアルのターゲット プラットフォームで、このチュートリアルでは、次のタスクについて説明します。
コマンド ライン インターフェイスを使用して、RTL デザインを Vitis 準拠の RTL カーネルにパッキングします
RTL カーネルでの MMCM/PLL の使用
Vivado XSim を使用したデザインのシミュレーション
ザイリンクス AXI VIP を使用した AXI インターフェイスを含む RTL デザインの検証
XRT を使用した 3 つの RTL カーネル制御モード (
ap_ctrl_none
、ap_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 つの部分に分かれており、順番に実行するようにしてください。
この部分では、AES アルゴリズムの簡単な概要と AES アクセラレーションのコア RTL モジュールについて簡単に説明します。RTL AES モジュールは、ネイティブ Verilog インターフェイスを使用します。RTL モジュールの機能を検証するために、簡単な Verilog テストベンチが提供されています。
この部分では、最初の部分で説明した RTL モジュールを krnl_aes
と呼ばれる Vitis カーネルにパッキングします。これは Vitis に統合できます。krnl_aes
カーネルには 4 つの内部 AES パイプラインがあり、AXI 制御スレーブと AXI ストリーム マスター/スレーブ ポートが含まれます。
krn_aes
カーネルには ap_ctrl_none
と ap_ctrl_hs
の混合制御モデルがあります。このカーネルでは MMCM IP が使用されて必要なコア クロックが生成されますが、AXI インターフェイスは標準プラットフォーム クロックを使用します。カーネルの機能を検証するため、ザイリンクス AXI VIP を使用した単純な Verilog テストベンチが提供されています。
この部分では、krnl_aes
カーネルをいくつかの HLS カーネルと統合して、使用可能な XCLBIN ファイルを生成します。XRT ネイティブ API を使用したホスト テスト プログラムは、krnl_aes
カーネルの機能をテストするために使用されます。
この部分では、AXI マスター インターフェイスと AXI ストリーム インターフェイスを持つ、krnl_cbc
という新しい RTL カーネルを紹します。このカーネルが krnl_aes
カーネルに接続されて、AES-ECB および AES-CBC モードの暗号化/復号化機能をインプリメントします。
krnl_cbc
カーネルは ap_ctrl_chain
制御モデルをサポートします。提供されている AXI VIP ベースのテストベンチ、ハードウェア エミュレーション、およびホスト プログラムを使用して、ap_ctrl_chain
と ap_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