はじめてのFPGAプログラミング

「価格性能比と消費電力効率を極限まで追求した超並列計算機システムの実用化に関する研究」第一回シンポジウムというのに行って、JavaRockという言語でFPGAプログラミングを学び、Pongみたいなゲームを作ってきました。

ソース: https://github.com/nushio3/practice/tree/master/JavaRock

回路記述は大変だ、というのはよく聞きます。で、解決策は大別して

  1. 好みのプログラミング言語内の操作できるデータ構造として回路を表す
  2. 好みのプログラミング言語のプログラムが回路に翻訳されるようにする
  3. 抽象化力の高い新しい回路記述言語を作る

らしく、JavaRockはこのうちJavaで書かれたプログラムをVHDLに翻訳するという第二のアプローチです。Javaのマルチスレッドプログラムを書くと、回路上の並列処理になるというすごい発想です。
史上初のJavaRockからFPGAプログラムに入った人類という称号を頂きました。普通のプログラミング言語を書いて回路を作れるのは確かに入りやすい道でした。逆にじゃあそれは回路作成経験を積んだといえるのかと突っ込まれると心許ないですが、ボタンが「押された瞬間」を検出するのが難しい(Java1行が1クロックなので、押された瞬間に検出ロジックのところに居るとは限らない)とか、2つのスレッドでデータをやりとりできるよう余裕を見るとか、ループの内容を充実させるほど1周するのが遅くなるとか、ビット演算重要とか・・・。

何の気なしに2の冪じゃない数で割り算するプログラムを書いて「ええ、最近はそんなのがコンパイル通って動くの?」と経験者を驚かせてしまったり、「ああ、そこはまだ作ってないからこう書いてね・・・」とか教えてもらったのが印象的で、先入観なしに普通のプログラムを書くことでフィードバックができたのが一番の貢献かと思います。


三好さん&セミナー参加者の皆様、ありがとうございました。