AWS F1インスタンス向けのFPGA Developer AMIで開発ツールvivadoを動かしてみました #awssummit
AWS Summit 2017 San Franciscoにて、FPGAが使えるF1インスタンスが一般提供開始との発表がありました。これと同時に、FPGA開発ツールが含まれているFPGA Developer AMIも利用可能になりましたので、まずは開発ツールが実際にどんな感じに使えるのか試してみました。(今回はツールの一つvivadoを動かしただけで、F1インスタンスそのものはまだ動かせていません!)
FPGA Developer AMI
今回AWS Marketplaceで使えるようになったFPGA Developer AMIには、F1インスタンスのFPGA開発に必要な下記のツールが含まれているとのことです。
- Xilinx Vivado Design Suite 2017.1
- Xilinx SDAccel Environment 2016.4
- Xilinx License Features included:
- Partial Reconfig, Encrypted Writer, XHMC, VU9P-ES2, VU9P-ES2_bitgen, Vivado System Edition, ap_opencl
- AWS CLI
- AWS EC2 FPGA SDK & HDK available from the github repository: `https://github.com/aws/aws-fpga`
リージョンはN.Virginiaのみの提供となっています。OSはCentOS 7.3とのことです。
EC2のインスタンスを起動する
このAMIを動かすのに必要なEC2のインスタンスですが、今回はt2.2xlargeを選びました。FPGAの開発ツールはとてもメモリを要求するため30G以上である必要があるとのことです。リージョンはAMIに合わせて"US East (N.Virginia)"を選択しておく必要があります。
AWS Marketplaceから、キーワード「FPGA」で検索して、FPGA Developper AMIを選択します。
インスタンスタイプとしてt2.2xlargeを選んで、あとはデフォルトのままでOKです。(よく見るとインスタンスタイプは c4.4xlarge がRecommendedになっていました)。
ちなみに価格表はこんな感じでした。FPGA Developper AMIはF1インスタンスでも動かせますが、価格はそれなりにします。開発ツールを動かすだけなら、FPGA無しのインスタンスでOKです。
インスタンスが起動したらsshでログインします。秘密鍵を指定、そしてユーザとしてcentosを指定します。
ログインに成功すると、こんなグリーティングメッセージが表示されます。
$ ssh -i your-private-key.pem [email protected] X11 forwarding request failed on channel 0 Last login: Tue Apr 18 16:18:46 2017 from 72-21-196-67.amazon.com ___ ___ ___ _ ___ _____ __ _ __ __ ___ | __| _ \/ __| /_\ | \| __\ \ / / /_\ | \/ |_ _| | _|| _/ (_ |/ _ \ | |) | _| \ V / / _ \| |\/| || | |_| |_| \___/_/ \_\ |___/|___| \_/ /_/ \_\_| |_|___| AMI Version: 1.2.0 Readme: /home/centos/src/README.md GUI Setup Steps: /home/centos/src/GUI_README.md AMI Release Notes: /home/centos/src/RELEASE_NOTES.md Xilinx Tools: /opt/Xilinx/ Developer Support: https://github.com/aws/aws-fpga/blob/master/README.md#developer-support [centos@ip-172-31-37-240 ~]$
開発ツールの構成
開発ツールは /opt/Xilinx にあります。ここにVivadoやSDKが含まれています。ディレクトリ構成は通常のXilinxのツールと全く同じようです。開発ツール内に含まれているサンプルプロジェクトには、F1インスタンス固有のものは見当たりませんでした。
[centos@ip-172-31-40-145 ~]$ cd /opt/Xilinx [centos@ip-172-31-40-145 Xilinx]$ ls -l total 4 drwxr-xr-x. 4 root root 4096 Apr 17 04:19 DocNav drwxr-xr-x. 3 root root 19 Apr 17 04:18 SDK drwxr-xr-x. 3 root root 19 Apr 17 04:06 SDx drwxr-xr-x. 3 root root 19 Apr 17 04:18 Vivado drwxr-xr-x. 3 root root 19 Apr 17 04:18 Vivado_HLS
環境変数PATHを確認すると、Vivadoだけにパスが通っていました。
[centos@ip-172-31-40-145 Xilinx]$ echo $PATH /opt/Xilinx/Vivado/2017.1/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/centos/.local/bin:/home/centos/bin
その他のツールについては、パスを設定するためのスクリプトが用意されており、それをsourceで読み込むと、他のツールにもパスが通るようになっているようです。
[centos@ip-172-31-40-145 ~]$ source /opt/Xilinx/Vivado/2017.1/settings64.sh [centos@ip-172-31-40-145 ~]$ echo $PATH /opt/Xilinx/Vivado/2017.1/bin:/opt/Xilinx/Vivado_HLS/2017.1/bin:/opt/Xilinx/DocNav:/opt/Xilinx/SDK/2017.1/bin:/opt/Xilinx/SDK/2017.1/gnu/microblaze/lin/bin:/opt/Xilinx/SDK/2017.1/gnu/arm/lin/bin:/opt/Xilinx/SDK/2017.1/gnu/microblaze/linux_toolchain/lin64_be/bin:/opt/Xilinx/SDK/2017.1/gnu/microblaze/linux_toolchain/lin64_le/bin:/opt/Xilinx/SDK/2017.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin:/opt/Xilinx/SDK/2017.1/gnu/aarch32/lin/gcc-arm-none-eabi/bin:/opt/Xilinx/SDK/2017.1/gnu/aarch64/lin/aarch64-linux/bin:/opt/Xilinx/SDK/2017.1/gnu/aarch64/lin/aarch64-none/bin:/opt/Xilinx/SDK/2017.1/gnu/armr5/lin/gcc-arm-none-eabi/bin:/opt/Xilinx/SDK/2017.1/tps/lnx64/cmake-3.3.2/bin:/opt/Xilinx/Vivado/2017.1/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/centos/.local/bin:/home/centos/bin
~/src/project_data に別ディスクとしてEBSがマウントされています。必要なプロジェクトファイルやデータはこの中に置いておくことで、EC2インスタンスを止めた後でもデータが消えないように維持できるよう配慮されているようです。
サンプルプロジェクトをビルドしてみる
ホームディレクトリにはsrcというディレクトリが一つだけ置いてあり、その中に各種READMEや、テスト用のサンプルプロジェクト counter がsrc/testに含まれています。
今回はコマンドラインからvivadoを使ってcounterをビルドしてみます(FPGAの世界では合成と呼ぶそうです)。src/README.md に記載があるとおりの手順です。すでにパスが通されているので、コマンドラインから下記を入力するだけでOKです。終わるまでしばらく時間がかかります。
[centos@ip-172-31-37-240 ~]$ vivado -mode batch -source /home/centos/src/test/counter/gen_bitstream.tcl ****** Vivado v2017.1 (64-bit) **** SW Build 1846317 on Fri Apr 14 18:54:47 MDT 2017 **** IP Build 1846188 on Fri Apr 14 20:52:08 MDT 2017 ** Copyright 1986-2017 Xilinx, Inc. All Rights Reserved. Sourcing tcl script '/opt/Xilinx/Vivado/2017.1/scripts/Vivado_init.tcl' source /home/centos/src/test/counter/gen_bitstream.tcl # set currentDir [file dirname $::argv0] # set outputDir $currentDir/counter_output # file mkdir $outputDir ...途中省略... Creating bitmap... Creating bitstream... Writing bitstream /home/centos/src/test/counter/counter_output/up_counter.bit... INFO: [Vivado 12-1842] Bitgen Completed Successfully. 7 Infos, 2 Warnings, 0 Critical Warnings and 0 Errors encountered. write_bitstream completed successfully write_bitstream: Time (s): cpu = 00:01:07 ; elapsed = 00:00:50 . Memory (MB): peak = 5179.320 ; gain = 181.871 ; free physical = 27016 ; free virtual = 64295 INFO: [Common 17-206] Exiting Vivado at Thu Apr 20 03:23:10 2017...
しばらく待っていると、無事合成に成功しました。up_counter.bitファイルが生成されています。時間は20分程度を要しました。
[centos@ip-172-31-37-240 ~]$ ls -l ~/src/test/counter/counter_output/ total 79104 -rw-rw-r-- 1 centos centos 50048 Apr 20 03:22 clock_util.rpt -rw-rw-r-- 1 centos centos 3355 Apr 20 03:22 post_imp_drc.rpt -rw-rw-r-- 1 centos centos 240608 Apr 20 03:15 post_place.dcp -rw-rw-r-- 1 centos centos 7151 Apr 20 03:15 post_place_timing_summary.rpt -rw-rw-r-- 1 centos centos 243115 Apr 20 03:22 post_route.dcp -rw-rw-r-- 1 centos centos 7561 Apr 20 03:22 post_route_power.rpt -rw-rw-r-- 1 centos centos 3539 Apr 20 03:22 post_route_timing.rpt -rw-rw-r-- 1 centos centos 7151 Apr 20 03:22 post_route_timing_summary.rpt -rw-rw-r-- 1 centos centos 13164 Apr 20 03:22 post_route_util.rpt -rw-rw-r-- 1 centos centos 10326 Apr 20 03:09 post_synth.dcp -rw-rw-r-- 1 centos centos 7566 Apr 20 03:15 post_synth_power.rpt -rw-rw-r-- 1 centos centos 7151 Apr 20 03:14 post_synth_timing_summary.rpt -rw-rw-r-- 1 centos centos 80159222 Apr 20 03:23 up_counter.bit -rw-rw-r-- 1 centos centos 5210 Apr 20 03:22 up_counter_impl_netlist.v
おわりに
今回は手始めに開発ツールを試してみました。引き続きF1インスタンスを実際に使って見る方法などを探ってみたいです。