AWS F1インスタンス向けのFPGA Developer AMIで開発ツールvivadoを動かしてみました #awssummit

aws1

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を選択します。

EC2_Management_Console

インスタンスタイプとしてt2.2xlargeを選んで、あとはデフォルトのままでOKです。(よく見るとインスタンスタイプは c4.4xlarge がRecommendedになっていました)。

ec2-instance-type

ちなみに価格表はこんな感じでした。FPGA Developper AMIはF1インスタンスでも動かせますが、価格はそれなりにします。開発ツールを動かすだけなら、FPGA無しのインスタンスでOKです。

fpga-ec2-instance-type-list

インスタンスが起動したらsshでログインします。秘密鍵を指定、そしてユーザとしてcentosを指定します。

ログインに成功すると、こんなグリーティングメッセージが表示されます。

$ ssh -i your-private-key.pem centos@ec2-XX-XXX-XX-XXX.compute-1.amazonaws.com
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インスタンスを実際に使って見る方法などを探ってみたいです。

参考