Vitis™ アプリケーション アクセラレーション開発フロー チュートリアル |
アクセラレーション用に Vitis を使用したボトムアップ RTL カーネル フロー¶
バージョン: Vitis 2021.2
RTL デザインは、従来の FPGA のハードウェア アクセラレータ開発手法として重要なものです。RTL モジュールは柔軟性と効率性に優れていますが、設計工程は時間を要し、エラーが発生しやすくなっています。ザイリンクス Vitis™ ユニファイド ソフトウェア プラットフォームは、長年の実証済み RTL カーネル設計手法を提供します。Vitis と、付属の Vivado® Design Suite を使用すれば、統合、ホスト FPGA との通信、DMA、およびその他のサポート タスクに多くの時間をかけることなく、コア アクセラレーション モジュールに集中できます。
このチュートリアルについて¶
このチュートリアルでは、ボトムアップの Vitis ベース RTL カーネル構築とラップアップ プロセス、およびザイリンクス ランタイム ライブラリ (XRT) を使用したホストとカーネルの対話について説明します。このチュートリアルでは、波形やシステム図の確認に必要な手順をのぞく、すべての手順でコマンドライン インターフェイスを使用します。
このチュートリアルでは、関連するコンセプトと手順を説明するため、サンプル デザインを使用します。次の図は、このデザインのブロック図です。これは単純な AES アクセラレータ デザインで、krnl_aes
と krnl_cbc
の 2 つのカーネルで構成されています。krnl_aes
カーネルは、AXI ストリームのスレーブ ポートとマスター ポートを持つ AES 演算コアです。krnl_cbc
カーネルは、ホストとカーネルとの間のデータ交換、および AES-ECB と AES-CBD の 2 つのモードの実装を krnl_aes モジュールと共に処理します。
このチュートリアルでは、Alveo™ データセンター アクセラレータ カードをターゲット プラットフォームに設定し、次の作業について説明します。
RTL デザインを Vitis 準拠の RTL カーネルにコマンドライン インターフェイスを使用したパッキング
RTL カーネルでの MMCM/PLL の使用
Vivado XSIM を使用したデザインのシミュレーション
ザイリンクス AXI VIP を使用した AXI インターフェイスによる RTL デザインの検証
XRT を使用した、
ap_ctrl_none
、ap_ctrl_hs
、ap_ctrl_chain
の 3 つのカーネル制御モードの使用XRT ネイティブ API による RTL カーネル用ホスト プログラミング
Vitis ハードウェア エミュレーションを使用した RTL カーネル操作のインサイト ルックの取得
注記: これは詳細なツールの使用方法のガイドラインではないので、基本概念や手順のみを紹介しています。詳細は、ほかの資料を参照してください。
デバイスおよびソフトウェア要件¶
デザインは、次のソフトウェア/ハードウェア環境およびツール チェーン バージョンで検証されています。
オペレーティング システム:
Redhat/CentOS 7 (RedHat/CentOS の追加要件を参照)
Ubuntu 18.04/20.04 (Ubuntu の追加要件を参照)
Verilog シミュレーション用にインストールされた Perl パッケージ (必須)
ハードウェア出力の検証用にインストールされた OpenSSL ライブラリ (必須)
GCC 7
Vitis: 2021.2
XRT: 2.12.427
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 をインストールし、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
チュートリアルの内容¶
このチュートリアルは 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 インターフェイスには標準のプラットフォーム クロックが使用されます。カーネルの機能を検証するための簡単な Verilog テストベンチが、ザイリンクスの AXI VIP と共に提供されています。
また、このパートでは、krnl_aes
カーネルをいくつかの HLS カーネルと統合し、使用可能な XCLBIN ファイルを生成します。XRT ネイティブ API を使用したホスト テスト プログラムで、krnl_aes
カーネルの機能をテストできます。
このパートでは、AXI マスター インターフェイスだけでなく、AXI ストリーム インターフェイスも持っている、krnl_cbc
という新しい RTL カーネルを紹介します。このカーネルは、AES-ECB モードと AES-CBC モードの暗号化/復号化機能を実装するため、krnl_aes
カーネルと接続されます。
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