バージョン: Vitis 2024.1
目次
概要
Versal™ アダプティブ SoC は、プログラマブル ロジック (PL)、プロセッシング システム (PS)、そして AI エンジンを兼ね備え、最新のメモリとインターフェイス技術を統合して、あらゆるアプリケーションで強力なヘテロジニアス アクセラレーションを実現します。ハードウェアとソフトウェアは、データ サイエンティスト、ソフトウェア開発者、ハードウェア開発者がプログラムおよび最適化できるよう設計されています。Versal アダプティブ SoC は、さまざまなツール、ソフトウェア、ライブラリ、IP、ミドルウェア、およびフレームワークでサポートされ、業界標準のあらゆるデザイン フローを利用できます。
このチュートリアルでは、LeNet アルゴリズムを使用し、AI エンジンとブロック RAM を含む PL を使用して画像を識別するシステム レベルのデザインを実装します。このデザインは、AI エンジンと PL との機能をどのようにパーティションできるのかを紹介するためのものです。また、DDR メモリ、PL (ブロック RAM)、AI エンジン メモリ間のメモリ パーティショニングと階層も強調して説明します。
このチュートリアルでは、Versal アダプティブ SoC システムの完全統合という観点から、ハードウェア エミュレーションとハードウェア フローを説明します。各ユーザーのニーズに合わせて変更できるように、Makefile が提供されています。
目標
目標
このチュートリアルを終了すると、次ができるようになります。
Vitis™ 統合ソフトウェア プラットフォーム フローでのさまざまなステップを介して、完全なシステム デザインを構築します。たとえば、AI エンジン適応型データフロー (ADF) での API グラフ作成、A72 ホストアプリケーションのコンパイルと PL カーネルのコンパイル、Vitis コンパイラ (V++) を使用した AI エンジンおよび HLS カーネルのプラットフォームとのリンク、デザインのパッケージなどです。また、System C/RTL サイクル精度/QEMU ベースの混合シミュレータで、ハードウェア エミュレーションとハードウェア フローを介して、デザインを実行することもできます。
LeNet アルゴリズムを用いた CNN (たたみ込みニューラル ネットワーク) 層の詳細と、これらの層がどのようにデータ処理ブロックと計算ブロックにマッピングされるのかを理解できるようになります。
完全結合されたたたみ込み層を処理する AI エンジン カーネル、入力を配列し直し、最大値をプールして、また入力を配置し直す関数を処理する PL カーネルなど、デザイン内で開発したさまざまなカーネルを理解できるようになります。
AXI4-Stream インターフェイスを使用した AI エンジンの IP インターフェイスを理解できるようになります。
システム レベル デザインのメモリ階層 (DDR メモリ、PL ブロック RAM、AI エンジン メモリを含む) を理解できるようになります。
ランタイム パラメーター (RTP) インターフェイスを使用したランタイム更新を可能にするための、グラフ制御 API を理解できるようになります。
アプリケーション レベルでのパフォーマンス測定と、機能/スループット デバッグを理解できるようになります。
チュートリアルの概要
チュートリアルの概要
このアプリケーション チュートリアルでは、5 つの AI エンジンのタイルと、ブロック RAM を含む PL リソースを使い、LeNet アルゴリズムで入力画像を識別します。次の図は最上位のブロック図です。画像はネットワーク オン チップ (NoC) を介して DDR メモリからまずブロック RAM へ、次に AI エンジンへと読み込まれます。PL 入力のプリプロセッシング ユニットが入力画像を受け取り、その出力を 1 つ目の AI エンジン タイルに送り、行列乗算を実行します。1 番目の AI エンジン タイルからの出力は PL ユニットに送られ、1 層目の最大値のプールとデータの再配列 (M1R1) が実行されます。その出力は 2 番目の AI エンジン タイルに供給され、そのタイルの出力は PL に送られ、2 層目の最大値のプールとデータ再配列 (M2R2) が実行されます。次にその出力は、2 つの AI エンジン タイルで実装された完全連結層 (FC1) に送られ、活性化関数として正規化線形ユニット (ReLu) を使用します。この 2 つの AI エンジン タイルの出力は、core04
AI エンジン タイルに実装された 2 番目の完全連結層に送られます。この出力は PL 内のデータ変換ユニットに送られ、NoC を経由して DDR メモリに送られます。AI エンジンと PL ユニットの間には、次のカーネルを含む datamover モジュール (次の図の LeNet Controller を参照) があります。
mm2s
: DDR メモリから NoC を経由して AI エンジン アレイにデータを供給するためのメモリ マップド ストリーム カーネル。s2mm
: AI エンジン アレイから NoC を経由して DDR メモリにデータを供給するメモリ マップド カーネルへのストリーム。
このデザインには、2 つの主な PL カーネルがあります。入力プリプロセス ユニットである M1R1 と M2R2 は、既にザイリンクス オブジェクト .xo
(XO) ファイルとしてパッケージされている lenet_kernel
RTL カーネルに含まれています。datamover カーネルの dma_hls
は、AI エンジンと DDR メモリの間のインターフェイスを提供します。この 5 つの AI エンジンのカーネルはみな行列乗算を実装します。行列の次元は、画像の次元、重みの次元、機能の数に依存します。
ディレクトリ構造
ディレクトリ構造
lenet
|____design......................contains AI Engine kernel, HLS kernel source files, and input data files
| |___aie_src.................contains all the aie source files
| |___pl_src..................contains all the data mover source files
| |___host_app_src............contains host application source files
| |___directives..............contains directives for various vitis compilation stages
| |___exec_scripts............contains run commands
| |___profiling_configs.......contains xrt.ini file
| |___system_configs..........contains all system configuration files
| |___vivado_metrics_scripts..contains scripts to get vivado metric reports
|____images......................contains images that appear in the README.md
|____Makefile....................with recipes for each step of the design compilation
|____description.json............for XOAH
|____sample_env_setup.sh.........required to setup Vitis environment variables and Libraries