FPGAとは何か
フィールドプログラマブルゲートアレイは、論理の配線を自分で決めるチップです。本レッスンではその意味、マイコン・ASIC・GPUとの違い、そしてFPGAが真価を発揮する場面を説明します
このレッスンで学ぶこと
- FPGAがマイコン、ASIC、GPUとどう違うかを説明できる
- FPGAファブリックの主な構成要素を挙げ、それぞれの役割を述べられる
- FPGAにおける「プログラマブル」の意味と、意味しないことを説明できる
- FPGAが適切な選択となる現実的な用途を3つ、適さない用途を1つ挙げられる
本レッスンは、FPGAという言葉を聞いたことはあるが、ツールやHDLに触れる前に明確なメンタルモデルを持ちたい人向けです。読み終えるころには、FPGAとは何か、何ではないのか、そして現場のエンジニアがマイコンやカスタムチップではなくFPGAを選ぶのはなぜかを説明できるようになります。
自分で配線するチップ
フィールドプログラマブルゲートアレイ(FPGA)は、多数の小さな論理ブロック、それらをつなぐ大量の設定可能な配線、そしてどの配線とどの配線を接続するかを決めるスイッチ群を内蔵した集積回路です。FPGAを「プログラムする」とき、プロセッサが実行する命令を読み込んでいるわけではありません。チップが記述どおりの回路になるように、それらのスイッチを設定しているのです。
この違いがすべてです。マイコンは、プログラムを読む固定された回路です。FPGAは、設計者の回路そのものになる白紙の論理です。「フィールド」という語は、工場ではなく、チップが使われる場所、つまり作業机の上や製品の中でコンフィギュレーションが行われることを意味します。
今日の典型的なミッドレンジデバイスは、20,000から1,000,000の論理セル、数メガビットのオンチップメモリ、数百個のハードウェア乗算器、数百本の入出力ピンを備えています。低消費電力向けの小型デバイスなら、論理セル1,280個とメモリ80 kbといったところです。幅は広いですが、構造は同じです。
FPGA、マイコン、ASIC、GPU
よく比較される4種類のチップがあり、それぞれ異なる問題を解決します。表に要点をまとめます。
| マイコン(MCU) | FPGA | ASIC | GPU | |
|---|---|---|---|---|
| 何が動くか | 命令の列 | 記述した回路 | 設計者がシリコンに固定した回路 | 同じ命令列を実行する数千の小さなプロセッサ |
| 並列度 | 1個または数個のコア | 設計次第(1クロックあたり数千の独立した演算) | 作り込んだとおり | 超並列だがロックステップのグループ単位 |
| 後から機能を変更 | 可(ファームウェアを再ロード) | 可(ビットストリームを再ロード) | 不可 | 可(ソフトウェアを再ロード) |
| 応答のレイテンシ | マイクロ秒、ソフトウェア次第 | 数十ナノ秒、決定的 | ナノ秒 | マイクロ秒からミリ秒 |
| 少量生産時の単価 | 数ペンスから数ポンド | 数ポンドから数千ポンド | 初期費用は数百万ポンド、その後は1個あたり数ペンス | 数十ポンドから数千ポンド |
| 同じ仕事に対する消費電力 | 単純な処理では低い | 中程度 | 最も低い | 高い |
| 必要なスキル | CまたはPython | ハードウェア記述言語とタイミング | チップ設計チーム一式 | CUDA、OpenCL、またはフレームワーク |
マイコンは、ほとんどの組み込み作業における妥当なデフォルトです。安価で、よく理解されており、大半のタスクにはそれ以上は必要ありません。FPGAに手を伸ばすのは、多くのことを同時に、正確なタイミングで行う必要があるとき、またはデータレートがプロセッサの処理能力を超えるときです。ASIC(特定用途向け集積回路)は、カスタムシリコンの費用を賄えるだけの数量があるときに作るもので、最新プロセスでは数千万ポンドかかることも珍しくありません。多くのASICはFPGAプロトタイプとして生まれます。GPUは大きな配列に対する算術演算向けに作られたプロセッサで、厳しいレイテンシ上限のない幅広い算術演算が問題であるときに勝ちます。
FPGAが使われる場所
FPGAが登場するのは、次の3条件のいずれかが成り立つ場面です。インターフェースがソフトウェアには速すぎる、タイミングが正確でなければならない、または製品出荷後に機能を変更しなければならない。具体例をいくつか挙げます。いずれも後のトラックで再び出会うものです。
- 有線・無線通信機器。レーンあたり10 Gb/sから400 Gb/sでデータを受信し、1ビットも落とさずに処理しなければなりません。
- オシロスコープやロジックアナライザなどの計測器。フロントエンドがギガヘルツのレートでサンプリングし、ロジックがハードウェアで捕捉、トリガ、フィルタ処理を行う必要があります。
- モーター制御とパワーエレクトロニクス。制御ループが1マイクロ秒未満で閉じ、数ナノ秒のジッタが問題になります。
- 映像・画像パイプライン。複数のカメラストリームをリアルタイムで補正、スケーリング、圧縮する必要があります。
- データセンターのアクセラレーション。FPGAがサーバーCPUの隣に置かれ、ネットワークパケット処理、圧縮、暗号化、データベースのフィルタリングを担当します。
- 宇宙、防衛、高信頼性システム。打ち上げ後に設計を修正できること、耐放射線部品を選べることが、コストを上回ります。
- ASICのプロトタイピング。マスクセットに費用を払う前に、1個または複数の大型FPGA上で設計を検証します。
ユーザーインターフェース、Webサーバー、ファイルシステムなど、主に逐次的な判断からなるものには、FPGAはたいてい不向きです。それらはプロセッサの仕事です。最近のFPGAの多くは同じダイ上にハードプロセッサを内蔵しており(SoC FPGA)、逐次的な部分をプロセッサに、並列的な部分をファブリックに置けるようになっています。SoC FPGAのトピックでこのファミリーを扱います。
ファブリックの概観
ベンダーはチップのプログラマブルな部分をファブリックと呼びます。図は、ほぼすべてのデバイスに見られる構成要素を示しています。比率はさまざまで、名称もベンダーごとに異なりますが、ブロックの種類は安定しています。
論理ブロック
面積の大半は、小さく同一の論理ブロックの格子です。AMDはこれをコンフィギュラブルロジックブロック(CLB)、Alteraはロジックアレイブロック、Latticeはプログラマブルロジックブロックと呼びます。それぞれが数個のルックアップテーブル(LUT)とフリップフロップを含みます。LUTは入力の任意のブール関数を実装する小さなメモリで、フリップフロップはクロックエッジ間で1ビットを保持します。6入力LUTは64ビットの構成情報を保持し、1,800京通りある6入力関数のどれにでもなれます。レッスン03でLUTを詳しく、レッスン04でフリップフロップを扱います。
配線
論理ブロックの間には、交差点にプログラマブルなスイッチを持つ高密度の配線網が走っています。ほとんどのデバイスで、配線は論理よりも多くのシリコン面積を占めます。あるLUTの出力が別のLUTの入力に届くようにどのスイッチを閉じるかはツールが決め、選ばれた経路が設計の動作速度を決めます。配線はソースコードには現れませんが、タイミングを支配し、配置配線に数分から数時間かかる理由でもあります。
ブロックRAM
専用メモリブロックの列が高速なオンチップ記憶を提供します。1ブロックは通常、AMDで18 kbまたは36 kb、Alteraで20 kb、Latticeで4 kb以上です。ミッドレンジのデバイスは合計で数メガビットを搭載します。各ブロックはシングルポートまたはデュアルポートのRAM、ROM、FIFOとして構成できます。メモリはレッスン09で扱います。
DSPブロック
専用の乗算累算ユニットが独自の列に並んでいます。典型的なブロックは、18ビット×25ビット(AMD)または18ビット×18ビット(Altera、Lattice)の乗算を行い、その結果を48ビットのアキュムレータに毎クロック加算します。400 MHzで240個のDSPブロックを持つデバイスは、毎秒960億回の乗算累算を実行します。同じ乗算器をLUTで組むと、はるかに遅く大きくなります。
I/Oとトランシーバー
周縁を囲む入出力ブロックのリングは、1.2 Vから3.3 Vまでの設定可能な電圧規格で、シングルエンドまたは差動の信号を駆動・受信します。大型デバイスは、PCIe、Ethernetなどの10 Gb/s以上のリンク向けに高速シリアルトランシーバーも備えています。
クロックとコンフィギュレーション
クロック管理ブロック(PLLなど)は、入力クロックを逓倍、分周、位相シフトし、専用の低スキューネットワークで分配します。小さなコンフィギュレーション論理ブロックが、電源投入時にビットストリームをコンフィギュレーションメモリに読み込みます。その仕組みはレッスン02で説明します。
「プログラマブル」の本当の意味
この言葉は初心者の混乱の大半を生むので、丁寧に述べておく価値があります。
FPGAでは、すべてのLUTの真理値表、すべてのフリップフロップのモード、すべての配線スイッチ、すべてのI/O設定がコンフィギュレーションメモリに保持されています。ほとんどのデバイスではこのメモリはスタティックRAMで、スイッチ1つにつき1ビットです。数百万ビットのコンフィギュレーションビットを持つデバイスは珍しくありません。このメモリを埋めるファイルがビットストリームです。
ビットストリームが読み込まれると、チップはその回路になります。何も実行されていません。命令ポインタもなく、フェッチ・デコード・実行のサイクルもありません。設計に2,000個の加算器があれば、ファブリックには2,000個の物理的な加算器が同時に存在し、結果が使われるかどうかにかかわらず、すべてがクロックエッジごとに加算を行います。ビットストリームを変えれば、チップは別の回路になります。
3つの帰結が導かれます。
- 設計における時間はクロックサイクルで測られ、回路のあらゆる部分が各サイクルで一斉に進みます。プロセッサの「これをやってから、あれをやる」という考え方は、ステートマシンを作ってそれを実現しない限り存在しません。レッスン07でその方法を示します。
- リソースは物理的です。より多くの論理を使うことは、チップをより多く使うことです。チップが一杯になれば、それまでです。プロセッサは同じメモリでより長いプログラムを実行できますが、FPGAは同じファブリックでより大きな回路を動かすことはできません。
- 書く記述はハードウェアの記述であり、手順の列ではありません。VerilogとVHDLという言語はソフトウェアのように見え、そこが落とし穴です。レッスン05で、正しいイメージを持って書き始めます。
規模の感覚
いくつかの数字が抽象を具体にします。いずれも正確な値ではなく典型値で、時間とともに変わります。
- 小型のLattice iCE40 UltraPlusは、5,280個のLUT、1 Mbのシングルポートメモリに加えて120 kbのブロックRAM、8個の乗算器ブロックを持ち、スタンバイ時の消費電流は約75 µAです。約2.1 mm×2.5 mmのパッケージに収まります。
- Basys 3のような学生向けボードに載るミッドレンジのAMD Artix 7は、33,280個の論理セル、1.8 MbのブロックRAM、90個のDSPスライスを持ち、ほとんどの入門設計を100 MHzで動かせます。
- 大型のAMD VersalやAltera Agilexデバイスは、数百万の論理セル、数百メガビットのメモリ、数千のDSPエンジンを持ち、小型車より高価です。
入門トラックでは小型とミッドレンジの部品を使います。概念はそのまま上位にも通用します。
演習
何も調べずに、次の各項目がマイコン、FPGA、ASIC、GPUのどれに最も適しているかを分類し、それぞれ理由を一文で書いてください。その後、上の表と照らし合わせて答えを確認してください。
- 洗濯機の中のコントローラ。
- 8本の4K映像ストリームを取り込み、1枚のパノラマに合成し、10 ms未満の遅延で出力する装置。
- 5,000万台出荷されるスマートフォンに内蔵される無線ベースバンドチップ。
- 1,000万枚の画像データセットから大規模な画像認識モデルを学習させる処理。
- 2つのレーザーパルスの間隔を100 psの分解能で測定する回路。
2つ目の演習として、聞いたことのある任意のFPGAのデータシート概要ページを探し、4つの数字を見つけてください。論理セルまたはLUTの数、ブロックRAMの合計、DSPブロックの数、ユーザーI/Oピンの数です。単位を付けて書き留めてください。この表を読む習慣は、このトラックの残りの部分で必要になります。
まとめ
- FPGAは、論理ブロックと配線がコンフィギュレーションファイルで設定されるチップで、命令を実行するのではなく、記述した回路そのものになります。
- マイコン(逐次的、安価、容易)、ASIC(固定、大量生産で最安、最速)、GPU(幅広い算術演算、高消費電力)との違いは、決定的なタイミングを持つ再プログラム可能な並列ハードウェアを提供する点にあります。
- ファブリックは、LUTとフリップフロップからなる論理ブロック、プログラマブル配線、ブロックRAM、DSPブロック、I/Oブロック、クロック管理で構成されます。
- 「プログラマブル」とは、コンフィギュレーションメモリが現場で読み込まれることを意味します。何も実行されません。設計のすべてが同時に存在し、クロックサイクルごとに進みます。
- FPGAは高データレート、正確なタイミング、出荷後に変更が必要な機能に向いています。逐次的で判断の多いタスクには不向きです。
さらに読む
- AMD UG474, 7 Series FPGAs Configurable Logic Block User Guide: あるベンダーの論理ブロックに関する決定版の解説。レッスン03を終えれば読めます。
- AMD UG470, 7 Series FPGAs Configuration User Guide: ビットストリームがチップに入る仕組み。レッスン02で要約します。
- Lattice iCE40 family page: 多くのオープンソースプロジェクトで使われる小型デバイスのデータシート。
- Yosys manual: オープンソースの合成ツール。そのドキュメントは、合成が記述から何を生成するかを説明しています。