FPGA AMIに入ってるvivadoのシミュレータをリモートからVNC経由で使ってみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWS EC2 F1インスタンスで使えるようになったFPGAですが、その中身の開発にはシミュレータの利用が必須です。本格的に開発ツールを使うにはGUIから使う必要があります。今回は、FPGA AMIから起動したAWSインスタンスにVNCサーバをセットアップし、sshのポートフォワード経由で、手元のMac OSXから利用して、vivadoのシミュレータを動かしてみました。

インスタンスを起動

まずはEC2インスタンスを起動します。これまではN.Virginia(us-east-1)リージョンを使っていましたが、FPGA AMIで開発ツールを動かすだけであれば、Tokyo(ap-northeast-1)リージョンでも利用可能なようです。GUIをリモートから使う場合には、少しでもRTT(Round Trip Time)が小さいほうが快適ですので、今回はこちらで試してみました。

AWSコンソールにログイン、EC2の画面を開き、Tokyoリージョンを選んでLaunch Instanceボタンを押します。AMIとしてAMI Marketplaceから"FPGA Developer AMI"を選択、インスタンスタイプには今回は少し小さめのt2.largeを選んでみました。あとはデフォルトのままでOKです。

launch-fpga-ami-tokyo

インスタンスが起動するまでしばらく待ちます。起動を確認したらConnectボタンを押し、ホスト名等を確認。SSHキーファイルを指定してSSHで接続します。FPGA AMI(中身はcentos)のユーザ名はrootではなくcentosですのでご注意ください。

fpga-ssh

VNCのセットアップと接続

FPGA AMIのホームディレクトリに置いてあるGUI_README.mdには、リモートからGUIを使用するために、いくつかの選択肢が記載されています。

         

  • X11 Forwarding over SSH
  • X2Go, Open NX
  • VNC
  • XRDP + VNC

XRDS(Windows Remote Desktop)については、詳しい手順の記載があるのですが、カーネルの再ビルドが必要云々と書いてあり面倒です。手っ取り早いのがX11を使う方法ですが、試してみたところ遅くて使いものになりませんでした。

そのため今回はVNCを試してみることにします。ところが、FPGA AMIには、VNCサーバやX-Window関連が入っておりませんので、まずはこれらのインストールから始めます。

インスタンスにSSHで接続したら、yumで必要なパッケージを入れていきます。VNCサーバとしてtigervncを使います。必要なパッケージが依存関係で自動インストールしてくれなかったため、個別に下記をインストールする必要がありました。それから、VNCサーバのデフォルト設定ではウインドウマネージャがtwmなのですが、すでにCentOS 7では削除されてしまっており、yumでインストールすることができませんでした。そのため、CentOS 6のパッケージをダウンロードして、rpmで直接インストールしました。OSのバージョンが違いますが、正常にインスールでき正常動作しました。

$ sudo yum install -y tigervnc-server.x86_64
$ sudo yum install -y libXext.x86_64 libXrender.x86_64 libXtst.x86_64 xorg-x11-xauth
$ sudo yum install -y xterm.x86_64 
$ wget http://mirror.centos.org/centos/6/os/x86_64/Packages/xorg-x11-twm-1.0.3-5.1.el6.x86_64.rpm
$ sudo rpm -ivh xorg-x11-twm-1.0.3-5.1.el6.x86_64.rpm

インストールできたら、VNCサーバを起動します。パスワード設定が要求されますので入力します(2回)。デフォルトではスクリーンサイズが小さいので、少し大きめを指定しています。

$ vncserver -geometry 1440x900

You will require a password to access your desktops.

Password: {enter new password}
Verify: {type again}
xauth:  file /home/centos/.Xauthority does not exist

New 'ip-172-31-XX-XX:1 (centos)' desktop is ip-172-31-XX-XX:1

Creating default startup script /home/centos/.vnc/xstartup
Starting applications specified in /home/centos/.vnc/xstartup
Log file is /home/centos/.vnc/ip-172-31-XX-XX:1.log

この状態でバックグラウンドでディスプレイ番号1のVNCサーバが起動しました。このVNCサーバへはTCPポート5901で接続が可能です。直接接続することも可能ですが、セキュリティの点からもSSHポートフォワーディングを使うことにします。(ポートフォワードを使わず直接VNCで開くには、セキュリティグループの設定が必要です)

ポートフォワードの指定として -L 5901:127.0.0.1:5901 をSSHコマンドのオプションに追加するために、一度インスタンスからログアウトして再接続します。

$ ssh -i your-key.pem centos@ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com -L 5901:127.0.0.1:5901

ログインしたら接続したままにしておきます。この状態でローカルの127.0.0.1:5901への接続が、リモートの5901への接続として転送される状態となります。

この状態で適当なVNCクライアントで接続します。ここではMac OSXにデフォルトで入っているVNC機能を使います。ファインダのメニューから、Go > Connect To Server... を選びます(またはコマンドKを押す)。接続先を聞かれるので、"vnc://127.0.0.1:5901/"を入力します。

make-vnc-connection-via-ssh

ポートフォワードがうまくいっていれば、パスワードを聞かれるので、さきほどのパスワードを入力します。そうすると、VNCのスクリーンが現れます。ウインドウマネージャがTWMなので見かけが素っ気ないです。

vnc-initial-view

Vivadoを起動する

ようやく用意が整ったので、開発ツールであるvivadoを起動します。VNCのスクリーンにあるxtermから、vivadoと入力して起動します。起動にしばらく(2分くらい)時間がかかりますが、成功するとこのようにプロジェクト選択画面が現れます。

vivado-greeting

簡単なサンプルプロジェクトとして、FPGA AMIのホームディレクトリに用意されているsrc/test/counterを開いてみます。以前ビルドを試したものと同じです。前回はコマンドラインでビルドしましたが、今回はGUIツールで開きます。Open Projectをクリックして、src/test/counterのディレクトリを開き、counter.xpr プロジェクトファイルを選択して開きます。

vivado-open-project

ところが、開発ツールのバージョンが違うというウォーニングが出ます。使っているのは2017.1最新バージョンですが、FPGA AMIに含まれていたテスト用プロジェクトは2016.4版で制作されたもののようです。そのためか「プロジェクトをアップデート」「リードオンリーで開く」の選択を要求されます。ここではアップデートすることにします。

vivado-old-version-warning

とりあえずプロジェクトを開くことができたようです。が、しかし必要なHDL(Hardware Description Language)ファイルが見えていないようです。バージョン違いのせいか、ディレクトリ構成が期待しているものと違うのかもしれません。

左側にある「Add Source」をクリックして、Sourceディレクトリにある、counter.vtb.v ファイルを追加します。追加したら、中身を見ることができます。

counter.vは、8ビットカウンタの実装で、tb.vは、カウンタを動かすためのテストベンチ(Test Bench)です。

verilog-source

テストベンチがあるので、そのままシミュレーションを実行することができます。左側にある「Run Simulation」をクリックします。そうするとtb.vに記述されたシミュレーションが行われます。

結果は右側に波形のウィンドウとして表示されます。波形の表示位置を先頭にずらし、また時間スケールを縮小してみると、意味のある波形が出てきます。リセット、そしてクロックでカウントアップしている様子がわかります。

vivado-simulation

まとめ

FPGA AMIを使って、簡単なサンプルのシミュレーションを試してみました。バージョンの不一致などトラップもあり、またVNC環境の構築が少し手探りでしたが、無事にツールが使えることを確認することができました。また、FPGA AMIがTokyoリージョンでも使えることがわかりました。地理的に近いので快適です。ぜひお試しください。

今回基本的なところが確認できました。他にもSDAccelやOpenCLなどツールやSDKがいろいろありますので、引き続き試してみたいと思います。

注意:FPGA AMIでGUIを利用することはサポートしないとGUI_README.mdに明記されています。了解のうえご利用ください。

参考