FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(6. Firesimで生成されたDCPをVivadoで表示する)

f:id:msyksphinz:20190405012417p:plain

FireSimのシミュレーションに使用する独自のAFIイメージを作成する。

AFIとは、Amazon FPGA Imageの略称で、AFIを作成しておけばすぐにAWS f1インスタンスにデザインをデプロイできる。

Amazon S3のアカウントをセットアップしていることを前提にする。 Amazon S3のコンソール上で[Create bucket]をクリックして新しいバケットをセットアップする。

[Bucket name]は"firesim-(アカウント名)"とする。 そうしないとfiresimがS3バケットを認識できない。 私の場合は、"firesim-msyksphinz"とした。次に[Next]をクリックする。

f:id:msyksphinz:20190506224239p:plain
FireSimで作成したFPGAイメージを格納するS3バケットを作成する。バケット名は”firesim-(アカウント名)”とすること。

そのまま[Next]をクリックし続け、[Create Bucket]をクリックして新しいバケットを生成する。

S3上でバケットの構築が完了すると、次にマネージャインスタンス上で作業する。firesim/deploy/config_build.iniを編集する。

[afibuild]

s3bucketname=firesim-msyksphinz

[builds]
# this section references builds defined in config_build_recipes.ini
# if you add a build here, it will be built when you run buildafi
firesim-singlecore-no-nic-lbp
# #firesim-singlecore-nic-lbp
# #firesim-quadcore-no-nic-lbp
# #firesim-quadcore-nic-lbp
# firesim-quadcore-no-nic-ddr3-llc4mb
# firesim-quadcore-nic-ddr3-llc4mb
# #fireboom-singlecore-no-nic-lbp
# fireboom-singlecore-no-nic-ddr3-llc4mb
# #fireboom-singlecore-nic-lbp
# fireboom-singlecore-nic-ddr3-llc4mb
# #firesim-supernode-singlecore-nic-ddr3-llc4mb
# #firesim-supernode-quadcore-nic-ddr3-llc4mb
# firesim-supernode-singlecore-nic-lbp


[agfistoshare]
firesim-singlecore-no-nic-lbp
# #firesim-singlecore-nic-lbp
# #firesim-quadcore-no-nic-lbp
# #firesim-quadcore-nic-lbp
# firesim-quadcore-no-nic-ddr3-llc4mb
# firesim-quadcore-nic-ddr3-llc4mb
# #fireboom-singlecore-no-nic-lbp
# fireboom-singlecore-no-nic-ddr3-llc4mb
# #fireboom-singlecore-nic-lbp
# fireboom-singlecore-nic-ddr3-llc4mb
# #firesim-supernode-singlecore-nic-ddr3-llc4mb
# #firesim-supernode-quadcore-nic-ddr3-llc4mb
# firesim-supernode-singlecore-nic-lbp

ターゲットとなるfiresim-singlecore-no-nic-lbpのみを残し、あとはコメントアウトする。 これをしっかり行わないと、ターゲットとなるイメージの数だけインスタンスが生成されてしまい、料金がかさむことになってしまう。

上記のように編集した後、firesim buildafiを実行する。処理が完了するのに、3~4時間程度かかる。 途中で以下のようなメッセージが連発されるが、辛抱強く待つこと(筆者は我慢できずGitHub Issueで質問したら、「我慢しろ」という回答が返ってきた)。

Current state: pending
Current state: pending
Current state: pending
Current state: pending
Current state: pending
...

辛抱強く待つと、

RTLの生成と、Vivadoでの論理合成とイメージの作成が行われ、その結果がS3に書き込まれる。 このイメージには、論理合成のログとVivadoのdcp(Design Check Point: プロジェクトファイルのようなもの)が格納されている。Vivadoでdcpファイルを開くと、どのようなデザインがどのようにFPGAマッピングされたのかチェックできる。

S3バケットを見てみる。"firesim-msyksphinz"バケットの中を覗いてみると、tarで圧縮されたファイルが格納されているのが分かると思う。

f:id:msyksphinz:20190506224319p:plain
FireSimで作成したFPGAイメージがS3バケットに格納されているか確認する。”firesim-msyksphinz”の中に入っているはず。
f:id:msyksphinz:20190506224341p:plain
FireSimで作成したFPGAイメージが、tarで圧縮されて格納されている。

FireSimのFPGAイメージはS3バケットに格納されているので、基本的にどのインスタンスを使ってVivadoを立ち上げても構わない(つまり、日本から遠いNorth Virginiaのインスタンスを使わなくても、TokyoのインスタンスFPGA Developer AMIを使ってインスタンスを立ち上げても問題ない)。しかし手っ取り早いのはFireSimのマネージャインスタンスを使う事だ。 AWSのコンフィグレーションも終わっているので、S3との連携も完了している。 なお、f1インスタンスで使用されているのは特殊なAWS用に開発された特殊なFPGAのようなので、FPGA Developer AMIに同梱されているVivado以外ではFPGAバイスを認識できなかった。 手元のローカルマシンでdcpを開こうと何度も挑戦したのだが、うまくいかなかった。 やはり、AMI上のVivadoを使うのが最も安心のようだ。

念のため、VivadoをオープンするためにはGUIを使用するので、f1インスタンスsshで接続している場合はX11フォワーディングの設定をしておく。 筆者は以下のパッケージを追加でインストールする必要があった。

sudo yum install xorg-x11-xauth.x86_64 xorg-x11-server-utils.x86_64 dbus-x11.x86_64

さて、以下のようにしてS3上に格納されているVivadoのDCPをマネージャインスタンスLinuxにダウンロードする。

aws s3 cp s3://firesim-msyksphinz/dcp/19_04_20-032417.Developer_CL.tar-192.168.4.9-VF6PT4V3DA.tar  .

tarを解凍し、dcpをオープンする。

tar xf 19_04_20-032417.Developer_CL.tar-192.168.4.9-VF6PT4V3DA.tar
cd to_aws
vivado 19_04_20-032417.SH_CL_routed.dcp

Vivadoがたちがあり、dcpをロードしている。 しばらくすると、以下のような画面になると思う。 FireSimが配置配線され、FPGA上にインスタンスされている様子が何となくだが分かると思う。

f:id:msyksphinz:20190506224550p:plain
FireSimで作成したFPGAイメージをVivadoでオープンする。FPGA上にインプリメントされている様子が、何となくだが分かる。

より詳細にブロックダイアグラムを見ていくと、どのようなモジュールがインスタンスされているのかわかると思う。FireSimはRISC-Vコアのほかに、PCI ExpressのモジュールやDDRのコントローラなどもインスタンスされていることが分かる。

f:id:msyksphinz:20190506224442p:plain
FireSimで作成したFPGAイメージを階層構造で確認してみる。RISC-Vコア以外に、DDRコントローラやPCI Expressなどがインスタンスされていることが分かる。
f:id:msyksphinz:20190506224522p:plain
FireSimで作成したFPGAイメージを階層構造で確認してみる。RISC-Vコア以外に、DDRコントローラやPCI Expressなどがインスタンスされていることが分かる。