WebからFPGAの回路を記述できる簡易IDEを作った

これはAizu Advent Calender 2015の21日目の記事です。
前は@yutoppさんです
次は@about_hiroppyさんの予定です。

はじめに

会津大学の学生のishikuroです。こんにちは。

需要がありそうだったので(確信)、育毛のプレゼンを書くつもりでしたが、今日12月21日は私の0x1C回目の誕生日であり、この先の一年の悪い暗示になってしまいそうなのと、優先的に紹介しないといけないものを思い出したのでやめます。育毛について聞きたい方は直接ご連絡ください。ちなみに誕生日についてはささやかなアピールです。

今日は「WebからFPGAの回路を記述できる簡易IDE」をyattan氏をはじめとした研究室のメンバーと一緒に作った経緯をお話しようと思います。

f:id:ishn:20151221174158g:plain


youtu.be

Webインターフェイスから回路を記述し、サーバーに接続されたFPGAボードに書き込みができます。

経緯

私の研究室では毎年グループワークの訓練も兼ねて、研究とは別に組み込みっぽい工作をしており、オープンキャンパスの日に研究成果と一緒に展示しています。

f:id:ishn:20151221162012p:plain
画像の出典: 研究室のpublicなサイト

今年の私の班は「高校生向けにコンピュータハードウェアの設計体験ワークショップを開く」というのに挑戦しました。私含め院2年生2名, 学部3年生4人で実行。



画像の下の方に見えてる工作も、ものすごいプロジェクトではあるんですが今回はチラ見せだけです。

このワークショップのオマケとして、ハードウェア記述言語のことも知ってもらえるかもしれないと思って作っていたものがあります。それが、ハードウェア記述言語のコンパイラおよびFPGA書き込みツールの、簡易IDEです。Arduino, ProcessingのIDEからインスパイアを受けてます。教育用として作りましたが、これが応用次第で「リモートからFPGAの回路を記述できるシステム」になるんです。

ishikuro/asolide · GitHub

githubに反映されてない部分もありますが、班内で分担して学部生も平等にコードを書きました。

ワークショップ当日は、来場者に論理ゲートの工作で4bit adderを作ってもらい動作を確認してもらいます。その後、工作と同じ内容のハードウェア記述を本IDEで実演し、同様な動作をすることを見てもらうつもりでした。しかし、演習内容を吟味した結果、来場者にとって詰め込みすぎになって疲れてしまうんではないかということが分かってきました。結局このシステムは当日は展示だけに留まっています。

機能

できること

NSLで回路を記述できる

世界で初めてハードウェア記述言語を提案したのは実は日本のNTT研究所でした。それまでは模造紙に論理を描いていたそうです。

今回のシステムでは国産ハードウェア記述言語の末裔、NSLを使っています。業界標準のVerilogHDLよりも抽象的に書けるのが利点です。

ちなみに今回のシステムに似たアイディアとして、NSLのオンラインコンパイラがあります。
NSL CORE TRIAL USE

このハードウェア記述言語で、GPIOの動作を記述していくことになります。

書き込みボタン以外なにもついてない

Altera等のFPGAメーカが提供するIDEEclipseよりも巨大で、周辺ツールが膨大になっています。しかし、そこから回路の論理設計のエッセンスだけを抽出したいと思い、ArduinoやProcessingのIDEのようなものを提案しました。書き込みボタンを押すと、回路設計のための様々なステップを隠蔽して、FPGAに書き込みをします。

FPGAではGPIOを制御

GPGPUのようなアクセラレータとしてFPGAを使う場合はPCIeとかに接続するのですが、今回はGPIOの操作だけを行えます。オンラインのArduinoみたいな感じです。

仕組み

Node.jsがメインのフレームワークです。

フロントエンド

入力したソースをサーバー側にPOSTして、コンパイルのログをsocket.ioで受け取ります。

複数ウィンドウを開いた状態で書き込みボタンを押すと、古いほうを中断してくれます。

バックエンド

以下のフローを子プロセスで実行します。

逐一、ログをフロントエンド側にsocket.ioで送ります。

FPGAの書き込みが終わったら、GPIOと記述した回路の動作が始まります。

未実装

今後の展望

XeonFPGAが載るなんて夢のある話もありますよね。きっと将来、AWS上でFPGAアクセラレーションがかけられるインスタンスも登場するんじゃないかと予想しています。

今回作ったやつは、書き込みこそUSB Blasterですが、実行時のFPGAとのインターフェイスはGPIOしかありません。サーバーとFPGAボードをPCIeと接続して、FPGAのリソーススケジューラみたいなのを実装すれば、もしかしたらクラウドFPGAの簡易的な実現と言えるかもしれません。

また、現在の構成だけでも、ArduinoのようなIoT的な使い方はできそうです。

余談ですが、いつかgithubのような場で回路関連のツールがどんどん出てくる時代になってほしいです。gemとかnpmみたいなコミュニティベースのエコシステムは一切ありえない回路設計業界ですが、オープンソースハードウェアの潮流がこちらに目を向けてくれたらと思ってます。