- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!Axonerve/AWS-F1
[AWS-F1ふたたび|http://www.wasamon.net/miyo/index.cgi?page=Diary%2F2019-4-28]を参考に.
:: S3バケットの用意
* S3バケットを作成.名前はaws-f1-axonerve-kvs
* フォルダを作成.名前はaxonerve-kvs-20190503
:: F1インスタンスの用意
* c4.4xlargeで作成.$0.796/時間
* ストレージはルートを100GB程度あると安心.二つ目のストレージは不要.
* キーペアは既存のキーペアを選択(以前つくったaws-f1-test-key)
:: F1インスタンス起動後の設定
* aws configure を 忘れない
* /home/centos の下で git clone https://github.com/aws/aws-fpga.git $AWS_FPGA_REPO_DIR をする
* /home/centos の下で git clone https://github.com/miyo/axonerve_util.git を する
* AXONERVE_all.vpをアップロードする
** scp -i pemファイル AXONERVE_all.vp centos@AWSインスタンスのIP
:: 作業ディレクトリに移動して環境設定
** cd $AWS_FPGA_REPO_DIR
** source sdaccel_setup.sh
:: SDxプロジェクトを作成
* cd ~/
* sdx -workspace build
* "Create a Xilinx(R) SDx(TM) Application projectをクリック
* プロジェクト名を axonerve_kvs としてプロジェクト作成
* Platformは,aws-vu9p-f1...を選択
** 候補がでないときは,Platformで Add Custom Platform... から,/home/centos/src/project_data/aws-fpga/SDAccel/aws_platform を追加
* Empty Applicationを選択
:: RTLカーネルの用意
* Kernel Wizardで雛形を作成
** メニューのXilinxからRTL Kernel Wizardを選択
** General Settings
*** kernel name を axonerve_kvs_rtl,kernel vendor を wasalabo と設定してNext.
*** クロック数を2,Has Resetを1に設定
** Scalars
*** 数は1のまま.Argument nameをdata_numに変更して,Next.
** Global Memory
*** そのままNext
* ファイルの置換と追加
** 取り除く: axonerve_kvs_rtl_example.sv,axonerve_kvs_rtl_example_vadd.sv,axonerve_kvs_rtl_ooc.xdc と axonerve_kvs_rtl_user.xdc
** 追加(1): /home/centos/axonerve_util/kvs/sdaccel/src/hdl の 下の axonerve_kvs_rtl_example.sv,axonerve_kvs_rtl_example_vadd.sv,user_logic.sv
** 追加(2): /home/centos/axonerve_util/kvs/hdl/sources の 下の axonerve_kvs_kernel.sv
** 追加(3): /home/centos/axonerve_util/kvs/sdaccel/src/xilinx-ip/aws-f1-vu9p の 下の xciファイル.これはプロジェクトにコピー
** 追加(4): アップロードした Axonerve_all.vp
** 追加(5): /home/centos/axonerve_util/kvs/sdaccel/src/xdc/vu9p の 下の axonerve_kvs_rtl_ooc.xdc と axonerve_kvs_rtl_user.xdc
*** SourecesペインのLibrariesタブに切り替えると作業しやすい
***- Design Sources → SystemVerilog → xil_defaultlib の axonerve_kvs_rtl_example.sv と axonerve_kvs_rtl_example_vadd.sv を取り除く
***- Design Sourcesで右クリックして,コンテクステメニューからAdd Sourcesを選択."Add or create design sources"を選択してNext
***- /home/centos/axonerve_util/kvs/sdaccel/src/hdl の 下の axonerve_kvs_rtl_example.sv,axonerve_kvs_rtl_example_vadd.sv,user_logic.sv を 追加
***- /home/centos/axonerve_util/kvs/hdl/sources の 下の axonerve_kvs_kernel.sv を 追加
***- /home/centos/axonerve_util/kvs/sdaccel/src/xilinx-ip/aws-f1-vu9p の 下の xciファイルを追加(これはプロジェクトにコピーする - Copy sources into projectへのチェックを忘れない)
***- アップロードした Axonerve_all.vp を 追加
***- Constraints → constrs_1 の axonerve_kvs_rtl_ooc.xdc と axonerve_kvs_rtl_user.xdc を 取り除く
***- "Add or create constraints"を選択してNext
***- /home/centos/axonerve_util/kvs/sdaccel/src/xdc/vu9p の 下の axonerve_kvs_rtl_ooc.xdc と axonerve_kvs_rtl_user.xdc を 追加
* Generate RTL Kernelを実行
** source-only kernel を 選択
:: SDxでシステム全体のビルド
* ファイルの削除と追加
** host_example.cppを削除.axonerve_kvs.cpp,axonerve_kvs.hpp,host.cpp,xcl2.cpp,xcl2.hppを追加
*** Project Explorer の src → sdx_rtl_kernel → axonerve_kvs_rtl の 下の host_example.cpp (2018.2以前のバージョンなら main.c だった) は 削除
*** Project Explorer の トップ の axonerve_kvsで右クリック.コンテクストメニューからImport Sources...を選択
*** Browse...で/home/centos/axonerve_util/kvs/sdaccel/src を 選択
*** axonerve_kvs.cpp,axonerve_kvs.hpp,host.cpp,xcl2.cpp,xcl2.hppを選択してFinish
* ターゲットをSystemに変更
** 右ペイン,右上のActive build configurationでSystemを選択
* コンパイルオプションに--kernel_frequncy "0:60|1:120"を追加.
** Project Explorer の トップ の axonerve_kvsで右クリック.コンテクストメニューから,C/C++ Build Settingsを選択.
** 左ペインのSettingsをクリック
** Configuration タブ を System にセット(この手順ならセットされているはず)
** Tool Settingsタブを開く
** SDx XOCC Kernel Compiler → Miscellaneos で --kernel_frequency "0:60|1:120" を追加
** SDx XOCC Kernel Linker → Miscellaneos で --kernel_frequency "0:60|1:120" を追加
** Apply and Closeで閉じる
* Hardware Functions(ハードウェア側の関数)としてaxonerve_kvs_rtlを設定
** 右ペインの Hardware Functions の右にある Add Hardware Function...ボタン(稲妻みたいなアイコン)をクリック
** axonerve_kvs_rtlを選択してOK
* メニューの Project → Build Project で ビルド
** ツールバーのハンマーみたいなアイコンをクリックしてもいい
::AFIイメージを作る
* cd /home/centos/build/axonerve_kvs/System で移動して binary_container_1.xclbin があるのを確認
* binary_container_1 フォルダが邪魔になるので mv binary_container_1 binary_container_1.o で リネーム
* AFIイメージ作る↓で binary_container_1.awsxclbin が できる
$SDACCEL_DIR/tools/create_sdaccel_afi.sh \
-xclbin=<xclbin file name>.xclbin \
-s3_bucket=<bucket-name> \
-s3_dcp_key=<dcp-folder-name> \
-s3_logs_key=<logs-folder-name>
** 今回の例だと
$SDACCEL_DIR/tools/create_sdaccel_afi.sh \
-xclbin=binary_container_1.xclbin \
-s3_bucket=aws-f1-axonerve-kvs \
-s3_dcp_key=axonerve-kvs-20190503 \
-s3_logs_key=axonerve-kvs-20190503
* *_afi_id.txtを開いてFpgaImageIdを確認
* AFIイメージの作成をまつ(↓コマンドを実行してStateがavailableになるのを待つ)
aws ec2 describe-fpga-images --fpga-image-ids 確認したFpgaImageId
* axonerve_kvs.exeとbinary_container_1.awsxclbinを手元にコピーする
* オプション: ビルドディレクトリ (/home/centos/build 以下) をダウンロード
** たとえば,↓とか
ssh -i pemファイル centos@リモートIP tar zcpvf - build | tar zxpvf -
::AWS-F1で実行
* AWS-F1インスタンスを作成
** AMIでFPGAを検索.今度はf1.2xlargeで作成.
** 起動したら aws configure を 実行
** /home/centos の下で git clone https://github.com/aws/aws-fpga.git $AWS_FPGA_REPO_DIR
** cd $AWS_FPGA_REPO_DIR; source sdaccel_setup.sh
* axonerve_kvs.exeとbinary_container_1.awsxclbinをアップロードする
* 実行する
** sudo -s
** source $AWS_FPGA_REPO_DIR/sdaccel_runtime_setup.sh
** ./axonerve_kvs.exe binary_container_1.awsxclbin