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

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

バージョン: Vitis 2022.1

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

このチュートリアルについて

このチュートリアルでは、ボトムアップの Vitis ベース RTL カーネル構築とラップアップ プロセス、およびザイリンクス ランタイム ライブラリ (XRT) を使用したホストとカーネルの対話について説明します。このチュートリアルでは、波形やシステム図の確認に必要な手順をのぞく、すべての手順でコマンドライン インターフェイスを使用します。

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

top block diagram

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

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

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

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

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

  • XRT を使用した、ap_ctrl_noneap_ctrl_hsap_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: 2022.1

  • XRT: 2.13.466

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

    • Alveo U200: xilinx_u200_gen3x16_xdma_2_202110_1

    • Alveo U250: xilinx_u250_gen3x16_xdma_4_1_202210_1

    • Alveo U50: xilinx_u50_gen3x16_xdma_5_202210_1

    • Alveo U55C: xilinx_u55c_gen3x16_xdma_3_202210_1

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 の概要および主な 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 インターフェイスには標準のプラットフォーム クロックが使用されます。カーネルの機能を検証するための簡単な Verilog テストベンチが、ザイリンクスの AXI VIP と共に提供されています。

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

  1. Vitis と互換性のある RTL カーネル krnl_cbc の作成およびパッケージ

このパートでは、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.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
│   ├── 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

改訂履歴

2022.1
  • Vitis のターゲット プラットフォームのサポートを更新

  • Vivado クロック配線の XDC を削除

2020.2
  • 初版

Copyright© 2022 Xilinx