Deep learningなどへの応用で注目されているFPGAを体験しよう

FPGAとは

FPGAとは、製造後、ユーザーが回路を書き換えられる集積回路の一種です。一般の方にもなじみがあるCPUは、集積回路内部の回路構成が製造時に決められているのに対し、FPGAは後から使う人自身で回路を構成するという点が決定的に異なります。

一般のパソコンに搭載されているCPUは、あらかじめ製造時に設計された回路構成から変更できないので、用途によっては性能を発揮できないことがあります。FPGAは使い道に合わせて回路を設計し直すことで、高性能で省電力な回路を実現できる可能性があります(うまく設計できないと性能が劣ることもありますが……⁠⁠。近年、IoTやビッグデータ、ディープラーニングなど、膨大なデータをいかに早く省電力に処理をするかという点でFPGAに注目が集まっています。2015年には、FPGAの2大メーカーの一つであるAltera社が、半導体の雄であるIntel社によって買収されたことでも話題となりました。

FPGAで回路設計するのに必要なもの

さっそくFPGAを試してみたいところですが、そのためにはFPGAボードと開発ソフトウェアが必要です。

一般の方がFPGAを扱う場合には、FPGA単体ではなくFPGAボードを利用します。これは、たとえFPGA単体を入手できたとしても、スイッチやLED、外部端子や回路情報を書き込むための回路などを用意する必要があり、基板設計の知識や経験が必要になってしまうからです。本書で紹介しているFPGAボードは、始めから必要な回路が組み込まれており、FPGAの知識だけで動かせるので、これから学習を始める方に最適です。

Intel FPGAを用いた回路設計では、Quartus Primeという開発ソフトウェアを利用します。これはソフトウェア開発における統合開発環境(IDE)のようなもので、このソフトウェア上でハードウェア記述言語(HDL)を用いて回路を設計すると、自動で実際の回路構成に変換しFPGAに書き込みを行ってくれます。学習用途に個人で使う範囲であれば、無償で使うことができます。

ソフトウェア開発と異なるところ

開発環境の上で言語を用いて記述するという点では、FPGAを用いた開発とソフトウェア開発は似ていますが、FPGAがハードウェアであるためハードウェア固有のポイントもあります。

ピンアサイン(配線)が必要

たとえばFPGAとLEDを使って時計を作ってみたとしましょう。FPGAの内部で時間を刻み、その結果をLEDに出力して現在の時刻を表示します。時計の機能を持った回路を設計してFPGAに書き込むのですがそれだけではありません。FPGAから信号を出力するピンとLEDの対応関係を設定する必要があります。正しく設定されていないと信号がうまく伝わらず動作しないばかりか、回路に負荷がかかり壊れてしまう可能性もあります。

ノイズやレイテンシ対策が必要

間違いのないプログラムを書けば、意図通りに動作するソフトウェアと異なり、ハードウェアは論理的に正しい回路構成を書いても思ったように動作してくれるとは限らないという特徴があります。身近な例では、マウスが壊れたときに1回だけクリックしたはずなのにダブルクリックになってしまう現象(チャタリング)があります。これは、スイッチを切り替えた場合、しばらくオンとオフを激しく繰り返すノイズが発生した後、オン(またはオフ)に落ち着くという特徴があるからです。誤作動させないためにはこのノイズを取り除いてやる必要があります。

 チャタリングの除去
図 チャタリングの除去

また、順番に命令を実行していくソフトウェアと異なり、ハードウェアはすべての回路が同時に作動するため、動作のタイミングや信号の遅れなどを考慮して回路設計を進める必要があります。信号の届くタイミングなどは開発ソフトウェアから分析できます。

まとめ

FPGAを用いた開発はソフトウェア開発と似ているところもありますが、ハードウェア特有の難しさもあります。その分、FPGAの容量が許す限り複数の処理を展開したり、必要に応じて回路を変更できる魅力があります。春から新しいことにチャレンジしたい方、これを機会にFPGAを始めてみませんか?