はじめに
FPGAは、CPU や GPU などとは異なり、計算機そのものをプログラミングできます。したがって CPU や GPU には演算命令として存在しないような演算でも、自由に計算ロジックとしてプログラミングして、コンパイル(合成)して、プログラムをロードして実行できるデバイスです。
計算機の構造そのものを弄れますので、CPUやGPUのような横並びの並列演算だけではなく、パイプライン並列という縦並びの並列演算も得意です。
複雑な演算を深いパイプライン演算で高スループットで計算するのも得意ですし、逆にシンプルな演算を何万並列で実装するなんてことも得意です。
さらには I/O のプログラミング能力も高く、多くのセンサーやアクチュエーターを並列に、高いリアルタイム性で制御することも出来ます。
こんな面白デバイスのプログラミングに興味を持って下さる方も増えてきてはいるのですが、まだまだ環境面が弱く、興味を持って少し手を出してみたけど、どうにもうまく扱えずに引き返してしまう人も少なくありません。
以前、「FPGAを始めるときの壁」という記事を書きました。 当時は、せっかく RTL を覚えて計算ロジックを書いても、そこに自由にデータを出し入れするのに一苦労するという話を書きました。
一方で最近少し思うところも出てきたので、あらためて別の角度から考察してみようと思います。
私はしばし、FPGA に Arduino や Raspberry PI や M5Stack のような、初心者が Hello world から始められる、お手軽なボードが無いことを課題に挙げていたのですが、昨今 Tang Nano のような、三千円ぐらいでお手軽に LEDチカチカから始められるボードはあるわけで、原因はそこではない気がしています。
GPU を始めるのと比べてどうなのか?
FPGAとの対比として「GPUプログラミングを始めてみよう」とした場合はどうでしょうか。
FPGA に Verilog や VHDL や HLS があるように、CUDA や GLSL や OpenCL などいろいろプログラミング方法はあるわけですが、まずはGPUボードを買ってきてデスクトップPCの PCIe スロットに挿したり、Jetson を買ってきて LAN 経由で ssh 等で繋いだり、はたまたクラウドの GPU を借りてプログラミングすることになるかと思います。
初期費用の話
まずGPUプログラミングを覚える場合も、最初にGPUを用意する段階で数万円台の出費からスタートすることにはなるかと思います。
ところが、CUDA を 覚えるために 10万円のGPUボードを買ってくるのは許容できるが、Verilogを覚えるために5万円もするFPGAボードを買うなんて躊躇してしまうというのは少なからずあるわけです。
この原因はおそらく簡単で、GPUなら挫折しても別の使い道がある というのが大きいかと思います。
別に自分で CUDA 書かなくても、PyTorch 経由で cuDNN 呼ぶだけで、DL は加速し、cuBLAS呼ぶだけで算術演算が加速し、ローカルLLM もサクサク動き、 Steam でゲームを楽しめます。
一方、FPGA は使いこなせないと、部屋の棚の飾りにしかなりません。
そうなると、試すにしても最初は1万円以下ぐらいのFPGAから試して、使いものになると分かってからでないと怖くて投資できないというのもよくわかります。
通信帯域の話
また、GPU は、クラウドのものを使うにせよ、自分の手元に用意するにせよ、どうやっても 1G-Ether 程度の通信路はある上で使う事になるかと思います。
ところが困ったことに、1万円以下のFPGAボードの多くはスタンドアロンでしか動かないものが大半です。
今のご時世 IoT 機能がない というのはどうかと思いますが、Jetson とか RaspberryPI とかと同レベルの 「買ってきてOSイメージをSDカードに書き込めば Ubuntuが起動する」ようなボードはだいたい 5万円以上してしまいます。それ以外でもいろいろ手はあるのですが初心者の手には余る手段ばかりになってくるかと思います。
そうすると、安いボードでは LEDチカチカのあとは UART 作って遊ぶぐらいのところで終わってしまいます。
想像してみてください。Jetson と PC が UART でしか繋がらなかったら使いものに出来るでしょうか? クラウドの高火力GPU を使うのにインターネットの通信速度がパソコン通信時代並みの 115.2kbps だったら。
結局、ここで 通信帯域の壁で、「FPGA使えねー」となってしまって引き返す羽目になる人は多い気はします。
逆に言えば、みんな 1G-Ether 程度のLAN経由で GPU サーバー使っているわけですから、1Gbps を超える速度でPCと簡単に繋がる安いFPGAボードというのは一つの損益分岐点な気がしております。
プログラミング環境の話
個人的な意見ですが、あるべきプログラミング環境として、
- ボードを買ってきてパソコンに繋ぐ
- VS-Code で Verilog などの RTL や HLS(高位合成言語)で計算ロジックを書く
- ボタン一個でコンパイル&ロード
- Python などから send_data() するとデータが送り込まれて即座に計算される
- 計算結果は やはり Python などから recv_data() すると受け取れる
- ちゃんとFPGAの特性を活かせばCPUで計算するより速い
- printf デバッグばりに簡単に埋め込みロジアナで波形とかも取れる
- LEDチカチカとか、デバイス制御とかも RTL プログラミングでお手の物
ぐらいのものを用意しないとダメなんじゃないかなと思っているわけです。
以前、脱サラした際に、「いろいろ挑戦してみたいこと」というブログを書き、その中で「Arduino 的に使える FPGA ボード」というのを書いています。
もうちょっとだけ具体化したのが下記です。
現状 KV260 などを使っていますが、PC と KV260 間の帯域は 1G-Ether で十分非圧縮画像処理回路の評価が出来てますので、USB3.0(5Gbps) あればまあ十分だろうという目算です。



当方、現実世界と超リアルタイムでインタラクションするのが目的のエッジ屋なので、まあ最終的には Zynq などの IoT環境になると思うのですが、そこに投入する要素技術の開発はお手軽な環境でやりたいわけです。
道半ばの中間成果物(Coming soon?)
で、上の妄想は K26SoM 向けの回路が作れる程度の大規模なボードを想定しているのですが、それだとまあ 5~10万円ぐらいするボードになりそうな気はしているので、Tang Primer 25k で、予備実験的な事をしようとしているのが下記です。
しかしながら、予備的と言いつつも逆に、今回書いたような内容に対する丁度良いツボを押さえられた気もしております。
- Primer25k の コアモジュール別に買ってもギリ1万円ぐらいに収まる?
- FT601で USB3.0 で高速にPCと繋がっている
- バイナリ画像処理などで Core-i5 などミドルエンドのPC の CPUに性能で勝てた
- カメラ画像も非圧縮でキャプチャできた
- LEDチカチカやPMODでのUARTなど入門にも使える
というところで、本記事で述べてきた FPGA の壁を幾つか打破できるのではないかともくろんでおります。
一方で
- JTAGが別に必要で USBケーブル2本差す開発スタイル
- 言っても安価なFPGAなのでそこまで凄い事は出来ない
- ボードも環境も全然枯れていない
- VS-Codeでのお気軽な環境開発などまだ全くの手つかず
という状況ではあります。
正直、FPGA初学者の方に今の時点はまだお勧めできませんが、今後、いろいろな環境整備が進めば、これから FPGA を始めようとする人達にも使い易いものに育っていく可能性はあるのではないかとは思います。
また、少し余分に製造した分を製造原価程度で BOOTH などで販売しておりますので、腕に覚えのある方は、是非デバッグにご協力いただけると有難いです。
特にPC側の環境面においては 「AI に作ってもらう」 という事ができる昨今、ますます期待が持てるところです。
おわりに
個人的には FPGA はとても面白いプログラミング環境だと思っております。
せっかく興味を持って下さった方が、がっかりして引き返していかなくていい様に、今後とも面白みの体感できるものが作れるといいなと考えております。

























