要約
Googleクラウド上の仮想マシンでAltera Quartus PrimeによるFPGA開発&ビルドを行い、手元のFPGAボードとVPN経由でUSB接続して動かした話。4コア+15GBメモリの開発環境を1時間あたり50円以下で使え、使わないときはOFFにしておけて便利。
DE0-Nano-SoCにブレッドボードと7セグ乗せたところ
3/11追記
keiさん情報によると、Xilinx Vivadoだとちょっと工夫するだけで同様のことができるらしい。最初っからX使っとけって話か。。
いきさつ
ひさびさにFPGAをさわりたくなってDE0-Nano-SoCを買ったのだけど、開発環境であるQuartusを動かすマシンをどうしようかと考えた。FPGAのビルドっておそろしく重いので、最低でも4コア+8GBメモリ程度のマシンが必要となる。
とはいえ、土日にちょろっと使う程度だし、もはや物理マシンを買って自宅に置いたりしたくない。クラウドの仮想マシンでQuartus動かしたい! というのがきっかけ。
GCEインスタンスの用意
まずはクラウド上に仮想マシン(インスタンス)を作成する。今回はGoogle Cloud PlatformのGoogle Compute Engine (GCE)を使った。GCEのインスタンス作成方法についてはこちらを見ていただくとして、今回は以下のような構成のインスタンスを作った。
- Windows Server 2012 R2 Datacenter Edition
- CPU: 4コア
- メモリ: 15GB
- ストレージ: 100GB SSD
- ゾーン: asia-east1-c
これまでずっとWindows環境でQuartusを使ってきたのと、リモートデスクトップ接続が簡単なので、今回はWindowsを選んだ。ただし、OSライセンスが月額$116.8かかるので、Linuxを選べばもっと安くなる(ただし、VNCによるリモートデスクトップ設定がちょっと面倒)。
Quartus Prime Lite Editionのインストール
GCE上のWindows環境とRDPでリモートデスクトップ接続を行い、デスクトップを開く。つづいてAlteraのダウンロードサイトからQuartus Prime Lite(無償版)をダウンロードしてインストール。これ、5GBあるので、2時間くらいかかった。
Atlas SoCを試すも、断念
さて問題は、手元のFPGAとクラウド上のQuartusをどうやってつなぐかだ。普通はFPGAボードのUSBポートとPCをつないで、QuartusのProgrammerから設定データを流す。これをクラウド経由で実現したい。
Alteraが最近出している新しいSoC開発環境、Atlas SoCでは、FPGAの設定データをSDカードイメージとしてビルドできるので、クラウドでビルド→手元のFPGAにSDカードを挿して動かす、って流れが可能なはず。そこでちょっと試してみたけど、ビルドのエラーをどうしても解消できない。あきらめた。
USBデバイスサーバー+VPNで行くことにした
そこで今回は手っ取り早く、バッファローのUSBデバイスサーバーをポチって、FPGAボードにつないだ。あとは、クラウド上のGCEインスタンスと自宅LANの間をVPNで結ぶというもくろみ。
もしくは、RasPiにVirtualHereとVPNを乗せる方法を使えばさらに安く上げられるかも。
SoftEtherでVPN構築
VPNの構築にはこれまで何回か使ったことのあるSoftEtherを使用することに。
GCE上にSoftEther VPN ServerとClientを作成
SoftEtherでVPNを構築するには、VPN Server上に仮想ハブを作成して、そこへVPN ClientやVPN Bridgeを接続してネットワークを構成する。まずは、GCE上にVPN Serverをインストール、仮想ハブを作成する。
さらに、GCPの管理コンソールでNetwork
- Firewall rules
を選択し、SoftEtherが使うTCPポートの穴を開けておく。
さらに、GCEにはVPN Clientもインストールする。これで、GCE自体も仮想ハブに1台のマシンとして接続できる。
これでクラウド側のVPN設定はOK。
自宅のWindowsマシンにVPN Bridgeをインストール
一方、自宅側にはUSBデバイスサーバーとVPN間を中継するVPN Bridgeを用意する。そのためにはVPN Bridgeをインストールできる適当なマシンが1台必要となるのだけど、今回は手っ取り早く安いスティック型のWindows PCをポチることにした。LinuxやMacでも行けるはずだ。
このWindows PCにVPN Bridgeをインストールして、先ほどの仮想ハブに接続する設定を行う。
自宅からGCE、およびGCEから自宅へpingしてみて、VPNが開通していることを確認。
QuartusのProgrammerから使ってみる
GCE上でUSBデバイスサーバーの管理ツールを起動すると、DE0が認識された!
さっそく使ってみよう。QuartusでLチカのコードを書いてビルドする。ちなみにQuartus Prime Liteでは3コアしか使えない制限があるらしい。有償版なら、もっと多くのコアを使ったビルドもできるはず。
ProgrammerでAuto Detect
をクリックしてデバイスが認識されるのを待つ。出てきた出てきた。
Start
ボタンをクリックすると、Successful
と表示され、手元のFPGAのLEDがチカチカした。やったぜ!
クラウドでFPGA開発しようぜ!
クラウドならば、1時間あたり50円以下で快適なFPGA開発環境を利用できる。プロフェッショナルな方はビルドに一晩かけたりされてるので、例えば16コア+50GBくらいの大きなインスタンスタイプを使えばビルド時間を短縮できるはず。使わないときは仮想マシンを止めておけばほとんどコストはかからないし。クラウドでFPGA開発やりましょう。
Disclaimer この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。