2014年1月13日月曜日

Amazon EC2を使ってXilinx FPGAの合成用サーバを作ってみたときのメモ

自宅にあるPCでは遅くてイライラするかもしれないと思い、クラウドサーバの使用についても検討をしようとして実験した結果について記載。

インスタンスの作成や、起動用イメージAmazon Machine Image(AMI)の作成についてはたくさん記事があると思いますのですっ飛ばします。

今回やろうとしたことはサーバとしてスポットで演算能力を借りることです。
ここで必要になってくるのが、XilinxのツールがインストールされたPCですが、
AmazonのHow Toは正しいのだがいまいちピンと来なくって大変だった。
今回は持っているライセンスの関係上バージョン14.6をインストールしたのだが、
旧プロジェクトのアップコンバージョンがうまくいかなかったようでデータ自体は削除した。

行ったことは次の通り
 ・通常通りインスタンスを作成、とりあえずはm1.smallにて作成することに
 ・Elastic Block Storage(EBS)で作ったブート用ドライブにISEを頑張ってインストール
  (環境はWindows Server 2008 R2 SP1, EBSのサイズは40Gを用意、これだとぎりぎりすぎるからもう少し増やしてもいいかも)
 ・インスタンスを停止し、Create Imageを実行してブート用イメージを保存してAMIとして使えるようにした。
 ・インスタンスとAMI作成用EBSを削除

今後は以下の運用にすることに
 ・サーバで合成したい場合は適切な環境で先ほどのAMIからインスタンスを作成
 ・プロジェクトをサーバにアップデート
 ・合成を実行
 ・合成結果をダウンロード
 ・インスタンス削除

これで費用はざっくりとAMI用のスナップショットの保管分と、サーバマシンを駆動して実行した分だけで済む。ライセンスさえあれば複数のマシンを動かして結果を得ることができるだろう。

インスタンスは消えたりするので、
ライセンスの導入には注意が必要なのは言うまでもないが、気が付いたことをメモ。

 ・ネットワークカードのNICはインスタンスごとに生成される。(自分に割り当てられていれば変更は可能っぽいが、インスタンスをTerminateした際に消去されるともう二度と手に入らないと考えたほうがよい)
 ・Disk SerialはAMIでインスタンスを新たに生成しても同じっぽい。

以上からTerminateさえしなければNICでもDiskSerialでも構いはしないが、
EBSの保管容量までケチろうとするとDiskSerialにしておくとよいかもしれない。


ISE14.4をUbuntuにインストールした際にSDKでgmakeが無かったり、arm-xilinx-eabi-gccが無かったりで怒られた

遅まきながらZedboard上でUbuntuを動かそうとしてはまったところのメモ。

環境は以下の通り。
 ホスト:Windows8.1
 仮想環境:Vmware player + Ubuntu13.10
 ツール:ISE 14.4, EDK

Analog Devicesで配っているプロジェクトが14.4だったので、これをインストール
(14.6はコンバージョンしたけどうまく動かなかったので削除しました)
Xilinx Linux Wikiに記載の通りツールを導入して合成までいったがSDKでFSBLを作るところで躓いてしまった。
内容としてはタイトルにもあるように2点で、gmakeが見つからないのと、
arm-xilinx-eabi-gccが無いというものであった。

まず1点目、gmakeに関する解決策は次のページを参考にしました。

 http://www.bedesign.jp/modules/d3blog/tb.php/7

簡単に言えばmakeをgmakeとしてシンボリックリンクを貼ってあげればよいようです。

2点目はarm-xilinx-eabi-gccが見つからないという問題です。
解決策は下記ページに記載されていました。

 http://www.zedboard.org/content/arm-xilinx-eabi-gcc-seems-be-missin

私は以下の通りに実行することで正常にarmのコンパイラがインストールされて問題は解決しました。
1. sudo dpkg-reconfigure -plow dash
//set dash as default system shell. Choose "NO"
2. re-install xilinx ISE
3. sudo dpkg-reconfigure -plow dash
//set dash as default system shell. Choose "YES"