FPGAとは?


デジタルICの分類からみるFPGA
デジタルICを、販売のされ方とカスタマイズの可否の観点で分類してみます(図1)。
図1. デジタルICの分類
基本的に、ASICなどのカスタマイズするIC(カスタムIC)は、ユーザー毎にその機能が異なり、カタログ等に特定の型名で販売されている製品ではありません。
ASICやゲートアレイは、ライブラリや下地の大きさなどの基本要素がカタログ等に記載されている場合はありますが、製品そのものを示しているものではなく、機能を実現するためのハードウェア的なリソースを示しているものです。
これに対して汎用ICは、カタログ等に機能や性能が明記され、型名を選択して購入することができる製品です。
さて、FPGAはカスタムICと汎用IC、どちらに分類にされるのでしょうか?
FPGAはいろいろな機能を実現できるので、ユーザーにとってはカスタムICであるように思われるかもしれませんが、実は汎用ICに分類されます。例えるならば、店頭で画用紙などのキャンパス(=FPGAデバイス)を購入して、その上でユーザーが絵を描く(=回路を作成する)、というようなものでしょうか。逆に、カスタムIC(ASIC)は、絵を描くキャンパスの原料から選んで(オーダーメイドで)作っていく、ということです。
FPGAってなに?
FPGAは、「フィールド・プログラマブル・ゲート・アレイ (Field Programmable Gate Array)」 の略称です。名前の一部に「ゲートアレイ」と称されるとおり、機能的にはカスタムICに分類されるゲートアレイの一種で、トランジスタで構成されたゲート(Gate)が敷き詰められた下地の層(Array)が用意されており、それらを繋げる配線層を作ることでユーザーが作成した回路を実現することが可能です。
一般的にゲートアレイは配線層がメタルマスクで作成されており、一度作ってしまうと修正することができません(修正するには、費用をかけて作り直すしかありません)。それに対し、FPGAは配線がユーザーの手元(Field)で何度でも修正・変更可能(Programmable)であるという特長があります。FPGAはその名のとおり、「Field Programmable」な「Gate Array」ということですね。
では、FPGAはなぜ修正・変更可能なのでしょうか?FPGAの構造から見ていきましょう。
FPGAの基本構造・動作
図2にFPGAの基本構造・動作のイメージを示します。
図2. FPGAの基本構造(概念イメージ)
FPGAには、「機能ブロック・配線リソース」で示したゲートアレイのような部分と、「コンフィギュレーションメモリ」と呼ばれる回路情報を格納するメモリ部分が存在します。
FPGAを作動させるには、このコンフィギュレーションメモリに回路情報(コンフィギュレーションデータ/ビットストリームと言うこともあります)がロードされている必要があります。
一般的に、回路情報をFPGAにロードすることをFPGAのコンフィギュレーションと呼びます。
すなわち、コンフィギュレーションメモリをプログラムする、ということです。
図2の青い部分で示されている「機能ブロック・配線リソース」には、
・組み合わせ回路を構成するためのLUTやフリップフロップを含むロジックブロック
・アプリケーションで使用可能なメモリブロック
・DSP演算のための乗算ブロック
・I/Oブロック
・PLL
などの機能が搭載されており、FPGA製品毎に搭載されている機能や数が異なります。最近ではCPUやメモリコントローラー等を搭載した製品もあります。
では、「機能ブロック・配線リソース」の部分を、もう少し詳しく見てみましょう(図3)。
図3. FPGAの機能ブロック・配線リソースの全体像
ゲートアレイでは配線層を作るというお話でしたが、FPGAではその配線が予め用意されています。
図3のように、搭載されている機能ブロックやメモリブロック間を自由に接続できるようにマトリクス状に配線が張り巡らされ、そこにスイッチ・ブロックが用意されています。スイッチ・ブロック内の交点にはいくつかのトランジスタスイッチがあり、コンフィギュレーションメモリのデータ“0”, ”1”で、つなげる/つなげない(ON/OFF)を決めることができます。
また、ゲートアレイでは用意されている最小単位のロジックブロックがいわゆる”NANDゲート”であることが多いですが 、FPGAではもう少し高度なロジックブロック(ロジック・エレメントやロジック・セルと呼ばれています)が用意されており、主に組み合わせ回路を実現するためのLUT(Look Up Table)と、クロックによって動作するフリップフロップ(レジスタ)の組み合わせで構成されています(図4)。このロジックブロックは、ユーザーの設計により、
・組み合わせ回路+フリップフロップ
・論理回路のみ(LUTのみ)
・フリップフロップのみ
等、その一部の機能を利用できるようなフレキシブルな構造になっていることが多いです。
図4. FPGA の基本的なロジックブロックの全体像
この他、メモリブロック(RAM)、DSPブロック(乗算器/加算器) 、PLLブロック等も用意されていることもあり、様々な使い方ができるようにあらかじめ設計されています。それをどのように使用するかは、ユーザーが設計の段階で決めることです。そして、それらの設計情報もコンフィギュレーションデータに含まれます。
まとめ
このようにFPGAは、あらかじめ用意されている様々な機能ブロックの何をどう使うか、どことどこの配線を接続するかの等の設計情報をコンフィギュレーションメモリに格納し、ユーザーの希望する機能を実現させています。
このコンフィグレーションメモリをユーザー自身が書き換え可能なため、汎用ICとしては極めて設計自由度が高く、かつ、非常に強力なデバイスであるといえます。
どんな機能ブロックがどれくらいあるのか、その性能はどうなのか、お使いになるFPGA製品の製品ラインナップ表やユーザーガイド、データシートを参考にしてみてください。