フィールド プログラマブル ゲート アレイ (FPGA) は、特定のアプリケーションの動作をカスタマイズするためにユーザーがプログラム可能な相互接続を備えた内部ハードウェア ブロックで構成された集積回路です。
FPGAとは何ですか?
フィールド プログラマブル ゲート アレイ (FPGA) は、特定のアプリケーションの動作をカスタマイズするためにユーザーがプログラム可能な相互接続を備えた内部ハードウェア ブロックで構成された集積回路です。相互接続は簡単に再プログラムできるため、FPGAは部品の寿命中に設計の変更に対応したり、新しいアプリケーションをサポートしたりすることができます。
FPGAは、プログラマブル読み取り専用メモリ (PROM) やプログラマブル ロジック デバイス (PLD) などの初期のデバイスにルーツがあります。これらのデバイスは工場でも現場でもプログラムできますが、ヒューズ技術 (「PROMを焼き付ける」という表現の由来) が使用されており、一度プログラムすると変更できません。対照的に、FPGAは構成情報をスタティックRAM (SRAM) やフラッシュ メモリなどの再プログラム可能な媒体に保存します。FPGAメーカーには、 Intel、 Lattice Semiconductor、 Microchip Technology 、 Microsemi などがあります。
FPGAアーキテクチャ
基本的なFPGAアーキテクチャ (図1) は、CLB (コンフィギャラブル ロジック ブロック) と呼ばれる何千もの基本要素で構成され、CLB間の信号をルーティングするファブリックと呼ばれるプログラム可能な相互接続システムに囲まれています。入力/出力 (I/O) ブロックは、FPGAと外部デバイス間のインターフェイスです。
メーカーによっては、CLBはロジック ブロック (LB)、ロジック エレメント (LE)、またはロジック セル (LC) と呼ばれることもあります。
図1: 基本的なFPGAアーキテクチャ (画像ソース: National Instruments)
個々のCLB (図2) は、複数のロジック ブロックで構成されています。ルックアップ テーブル (LUT) はFPGAの特徴的な機能です。LUTは、任意の入力の組み合わせに対するロジック出力の定義済みリストを格納します。4 ~ 6入力ビットのLUTが広く使用されています。マルチプレクサ (mux)、全加算器 (FA)、フリップフロップなどの標準的なロジック機能も一般的です。
図2: 簡略化されたCLB: 4入力LUTは2つの3入力ユニットから構成されます。(画像出典: Wikipedia)
CLB内のコンポーネントの数と配置はデバイスによって異なります。図2の簡略化された例には、2つの3入力LUT (1)、FA (3)、D型フリップフロップ (5)、さらに標準マルチプレクサ (2) と、FPGAプログラミング中に構成される2つのマルチプレクサ (4) と (6) が含まれています。
この簡略化されたCLBには2つの動作モードがあります。通常モードでは、LUTはMux 2と結合されて4入力LUTを形成します。算術モードでは、LUT出力は別のCLBからのキャリー入力とともにFAへの入力として供給されます。Mux 4はFA出力またはLUT出力を選択します。Mux 6は、操作がDフリップフロップを介してFPGAクロックに非同期か同期かを決定します。
現在の世代のFPGAには、単一のブロックで複数の操作を実行できる、より複雑なCLBが含まれています。CLBを組み合わせることで、乗算器、レジスタ、カウンター、さらにはデジタル信号処理 (DSP) 機能などのより複雑な操作を実行できます。
CPLDとFPGA
当初、FPGAには図1のブロックしか含まれていませんでしたが、現在では設計者は幅広い機能を備えた製品から選択できます。シンプル プログラマブル ロジック デバイス (SPLD) やコンプレックス プログラマブル ロジック デバイス (CPLD) などのそれほど複雑でないデバイスは、ディスクリート ロジック デバイスとエントリー レベルのFPGAの間のギャップを埋めます。
エントリーレベルのFPGAでは、低消費電力、低ロジック密度、およびチップあたりの複雑さの低さが重視されます。高機能デバイスでは、特定の機能専用の機能ブロックが追加されます。例としては、クロック管理コンポーネント、位相ロック ループ (PLL)、高速シリアライザーとデシリアライザー、イーサネットMAC、PCI Expressコントローラー、高速トランシーバーなどがあります。これらのブロックは、CLB(ソフトIPと呼ばれる)を使用して実装することも、個別の回路(ハードIP)として設計することもできます。ハードIPブロックは再構成可能性を犠牲にしてパフォーマンスを向上させます。
ハイエンドのFPGA製品ファミリには、FPGAアーキテクチャ、ハードIP、マイクロプロセッサCPUコアを1つのコンポーネントに統合した複雑なシステムオンチップ (SoC) 部品が含まれています。個別のデバイスと比較すると、SoC FPGAは、より高い統合性、より低い消費電力、より小さなボード サイズ、およびコアと他のブロック間のより広い帯域幅の通信を実現します。
SoC FPGA
SoC FPGAには、さまざまなアプリケーションに適した幅広い処理機能が含まれています。たとえば、Intelの Cyclone V などの低コスト、低消費電力のSoC FPGAは、産業用モーター制御ドライブ、プロトコル ブリッジング、ビデオ処理カード、ハンドヘルド デバイスなどの大量生産アプリケーションを対象としています。デバイス (図3) には、FPGA部分と、925 MHzで動作するシングルコアまたはデュアルコアの32ビットArm Cortex-A9 MPCOREをベースにしたハード プロセッサ システム (HPS) という2つの異なる部分があります。各部分には、サードパーティ ベンダーのハードIPを含む独自の周辺機器セットが含まれています。
図3: Cyclone V SoC内部ブロック図 (画像提供: コーネル大学)
一方、Stratix 10 SXは、通信、データ センター アクセラレーション、高性能コンピューティング (HPC)、レーダー処理、ASICプロトタイピングなどの高性能アプリケーションを対象としており、このFPGAには、最大1.5 GHzで動作するクアッド コア64ビットArm Cortex-A53が含まれています。
FPGA設計
何千ものハードウェア ブロックのコレクションを、アプリケーションを実行するための正しい構成に変換するにはどうすればよいでしょうか?FPGAベースの設計は、開発ツールで必要なコンピューティング タスクを定義することから始まります。次に、それらをCLBやその他のモジュールを接続する方法に関する情報を含む構成ファイルにコンパイルします。このプロセスはソフトウェア開発サイクルに似ていますが、定義済みのハードウェア プラットフォーム上で実行するための一連の命令ではなく、ハードウェア自体を設計することが目的である点が異なります。
従来、設計者はFPGA構成を設計するために、VHDL (図4) やVerilogなどのハードウェア記述言語 (HDL) を使用してきました。
図4: 符号付き加算器のサンプルVHDLコード (画像ソース: Wikipedia)
HDLを使用してFPGA設計が作成され、検証されると、コンパイラはテキストベースのファイルを受け取り、コンポーネントをどのように配線するかに関する情報を含む構成ファイルを生成します。HDLコードにエラーがなくても、間違ったFPGAを選択するとコンパイルが失敗する可能性があります。 —たとえば、FPGAで特定のリソース タイプが不足したり、コンパイラがコンポーネント間の必要なルートを作成できなかったりします。
HDLアプローチの課題の1つは、FPGAを構成するにはコーディング スキルと基盤となるハードウェアに関する詳細な知識の両方が必要であり、必要な専門知識が広く入手できないことです。
その結果、ベンダーは、設計者がC/C++、Python、OpenCLなどの一般的な高級言語でFPGAソリューションを開発できるようにするソフトウェア開発キット (SDK) を提供しています。高レベル合成 (HLS) 設計ツールも利用できます。これらはNational InstrumentのLabVIEWなどのフレームワーク上で実行され、コード行の代わりにグラフィカルなブロック図を備えています。
FPGAの用途: 特定のアプリケーションにとって魅力的な選択肢
FPGAのハードウェアを構成し、必要に応じて再構成し、特定の機能セットに合わせて最適化する機能により、FPGAは多くのアプリケーションで魅力的な選択肢となります。
FPGAは、ASICの開発に費用がかかりすぎたり、時間がかかりすぎる場合に、カスタム ソリューションを提供するためによく使用されます。FPGAアプリケーションは、数か月ではなく数時間または数日で構成できます。もちろん、FPGAの柔軟性には代償が伴います。FPGAは同等のASICよりも遅く、より多くのPCB領域を必要とし、より多くの電力を消費する可能性があります。
ASICが大量生産向けに設計される場合でも、プレシリコン検証、ポストシリコン検証、ファームウェア開発などのシステム検証にはFPGAが広く使用されます。これにより、メーカーはチップが工場で生産される前に設計を検証できるようになります。
FPGAアプリケーション
多くのアプリケーションは、同一操作の並列実行に依存しています。FPGAのCLBを数百または数千の同一処理ブロックに構成する機能は、画像処理、人工知能 (AI)、データ センター ハードウェア アクセラレータ、エンタープライズ ネットワーキング、自動車の先進運転支援システム (ADAS) などのアプリケーションに利用できます。
これらのアプリケーション領域の多くは、要件が進化し、新しいプロトコルや標準が採用されるにつれて、急速に変化しています。FPGAを使用すると、メーカーは必要に応じて更新できるシステムを実装できます。
FPGAの使用例としては高速検索が挙げられます。Microsoftはデータ センターでFPGAを使用してBing検索アルゴリズムを実行しています。FPGAは、新しいアルゴリズムが作成されると、それをサポートするように変更できます。ニーズが変化した場合は、設計を再利用して、HPCアプリケーションでシミュレーションまたはモデリング ルーチンを実行できます。この柔軟性は、ASICでは実現が困難または不可能です。
FPGAのその他の用途としては、航空宇宙および防衛、医療用電子機器、デジタルテレビ、民生用電子機器、産業用モーター制御、科学機器、サイバーセキュリティ システム、無線通信などがあります。
FPGAの歴史: 今後はどうなるのか?
これらの新たなアプリケーションの登場により、FPGA市場は健全なペースで成長しています。業界調査会社MarketsandMarketsによると、FPGA市場は2016年に53億4,000万ドルと評価され、2023年には95億ドルに成長すると予想されています。これは年平均成長率 (CAGR) 8.5% に相当し、はるかに大規模な (740億ドル) 一般的なマイクロプロセッサ市場のCAGRは約2% です。
データの急激な増加と、AI、機械学習、HPC、ゲノミクスなどの急速に変化する分野の出現により、高速で柔軟性があり、適応性の高いアーキテクチャが求められています。FPGAは、これらの新しい機会を活用するのに最適です。