FPGAって何?
はじめに
初めての方は、初めまして。そうでない方はこんにちは。
どうも、11日目を担当するにしかわです。
今回僕が普段お世話になっているFPGAについてざっくりとまとめたいと思います。アドベントカレンダーに参加して投稿している皆々様は電気系の以外の人が多いと思うので、ハードウェア、その中でもFPGAについて少しでも知っていただければ幸いです。(かく言う僕もほぼ初心者ですが・・・)
【目次】
1. FPGAとは
2. ASICとの違い
3. FPGAメーカーの紹介
4. FPGAにおける開発フロー
5. FPGAの使用分野
1. FPGAとは
https://gyazo.com/6f5e041101b00ae820e57f1f0cca52e7
まずFPGA(Field Programmable Gate Array)とは何かというと、内部の論理回路の構造を何度も繰り返し書き換えることができる半導体デバイスのことを言います。製品を出荷した後でも回路としての機能をアップデートしたり、本来は良くないことですが後から回路のバグを修正したり、現場(Field)でプログラム可能な回路であることからそう呼ばれています。
回路がプログラム可能ってどういうこと?と思うかもしれません。それは所望の回路情報を持ったコンフィグレーションデータを外部のコンフィグレーションROMと呼ばれる不揮発性のメモリに書き込んでおき、FPGAの電源が投入されるとコンフィグレーションROMから回路情報がFPGAのRAMに転送され、FPGAの内部で所望の回路が構成されます。ユーザが作成した設計図がFPGA内部のLUT(Look Up Table)と呼ばれる真理値表みたいなものに反映されて、所望の動作が実現するイメージです(ざっくり)。よって、そのテーブル情報を書き換えれば、回路もそれに応じて変更されるというわけです。プログラム可能というとソフトウェアの感じがしますが、ユーザは欲しい機能を持った回路の設計図を作成して、それをFPGAがハードウェアとして実現していることに他なりません。
回路の設計の仕方としては、回路図による設計のほかに、HDL(Hardware Description Language)と呼ばれるハードウェア記述言語(VerilogやVHDL)による設計などがあり、これが今の一般的な手法かと思います。最近ではC/C++などの高級言語で設計してそのままハードウェア化するような方法もあるらしいです。
2. ASICとの違い
https://gyazo.com/8583e14e7bff4f41748e2ec3a3858366
ある機能を実現するための集積回路として、FPGA以外にもASICというものがあります。ASIC(Application-Specific Integrated Circuit )とは、特定用途向けに設計された集積回路のことで、製造時に回路が物理的に固定的に形成されます。ASICはFPGAと比べて実装面積が小さい、消費電力が低い、動作速度が高速、単価が安いなどのメリットがありますが、FPGAとは違って製造後に回路情報を書き換えることはできないので設計に何らかの変更が生じた場合はチップ自体を作り直す必要があったり、開発期間が長かったり、開発費が高かったりと、デメリットもあります。しかしながら、一個当たりの製造コストが低いメリットを生かしてコンスーマ向けの大量生産を行うような製品には向いていると言えます。
3. FPGAメーカーの紹介
https://gyazo.com/41f1611559c20863e06a390f58a6202c https://gyazo.com/65e51e7678d0d04bc57117c0f6f06d7e
FPGAメーカーの二大巨頭といえば、XilinxとIntel(旧Altera)です。旧Alteraとしているのは、もともとAlteraがFPGAを設計開発していましたが、2015年にIntelに買収されて現在はIntelのFPGA部門になっているからです。ちなみにXilinxが1985年に世界初のFPGA XC2064を製品化しています。2社だけでFPGAの市場シェアの80~90%を占めます。一応Lattice Semiconductorも知っておくと良いかもしれません。FPGAの市場シェアとしては10%ほどですが。
Xilinx、IntelそれぞれのFPGAの製品群を下記しておきます。上から高性能、高価格な順に並んでいます。それぞれのシリーズはさらに細分化されているため一概に順番通りではないかと思いますが、感覚的に捉えていただければと思います。
テストに出るので覚えておくように!
- Xilinx
Virtexシリーズ
Kintexシリーズ
Artixシリーズ
Spartanシリーズ
- Intel
Stratixシリーズ
Arriaシリーズ
Cycloneシリーズ
MAXシリーズ
また、各社はFPGAを販売しているだけでなく、それぞれのFPGA専用の統合開発環境も用意しています。XilinxだとVivado Design Suite、IntelだとQuartus Primeと呼ばれるツールがそれです。XilinxのFPGAを使う場合はツールもXilinxのVivadoを使う必要があります。Intelも同様です。
それらのツールを用いることによって、デザインの入力から論理合成、配置配線、シミュレーション、コンフィギュレーションデータの作成等の一連のフローを全て行えます。ライセンスが必要な有償版と無償版があり、無償版だと開発できるデバイスのラインナップや最適化オプションなどに一部使用制限があります。
4. FPGAにおける開発フロー
https://gyazo.com/eba4294dfc8838a48b43983c4733d3b3
ソフトウェアでの開発は、コーディングしてコンパイルしてデバッグするという一連のサイクルを回して行っていますが、FPGAも大体同じです。まず初めにデザインの入力、通常はHDLでガリガリコーディングしていきます。HDLである機能を持った回路をコーディングすることができたと思ったら、その回路を実機に移したときに本当に正しく動作するのかを、シミュレーションツールを使ってソフトウェアベースで検証します。ただし、面倒なことにデバッグする前に、実機の動作を想定したテストベンチと呼ばれるプログラムを自分で用意しなければなりません。シミュレーションでバグを取り除いて論理的に正しい動作であることが確認出来たら、VivadoやQuartusで論理合成(冗長な表現を無くすなどの回路の最適化)と、配置配線(論理合成した回路を実際のデバイス上でどのように配置し、どのように配線するかの決定)を行い、最終的にFPGA内部の回路を決定づけるデータであるコンフィグレーションデータが生成されます。これらはツールが自動でやってくれますが、例えばVirtex Ultrascale+のFPGAを使う必要があるようなプログラムの場合は、このコンパイルだけで10時間弱かかることもあります。。。
そしてコンフィグレーションデータをFPGAに書き込み、実機で正しく動作するかをさらに検証し、それがクリアしてFPGAとしての開発が終了します。
5. FPGAの使用分野
FPGAが実社会のどんなところで使われているのかざっとまとめてみました。
業務用放送機器
医療機器
航空宇宙/防衛機器
オートモーティブ
データセンター
通信
と、いろいろなところで活躍しているみたいです。
おわりに
いろいろと書いてきましたが、FPGAとはハードウェアを何度も書き変えられる集積回路ということです。汎用性を求めるならCPUやGPUを用いるのがベストなのでしょうが、レイテンシやエネルギー効率といった点ではFPGAに分があります。要するに何が言いたいかというと、ASICもFPGAもCPUやGPUもそれぞれメリットデメリットがあるので適材適所使い分けることが大切ということでしょうか。
ここまで読んでくれた人はきっとFPGAが欲しくなったはず。ぜひ下記のURLから購入をご検討ください。
最後まで読んでいただきありがとうございました。