FPGAについて
FPGA(Field Programmable Gate Array)とは、ユーザが手元で自由にプログラミングすることができるLSIです。自分が欲しいと思う機能をもつLSIを手軽に手元で作ることができる(=プログラミングできる)わけです。近年、FPGAは技術的な発展が目覚しく、ASIC(Application
Specific Integrated Circuit:専用目的IC)用のデバイスや論理エミュレータ(簡単な解説はこちら)等に利用されています。
FPGAの内部はメーカーによってかなり異なっているのですが、基本的には、ANDやORなどからなる組み合わせ回路やフリップフロップを実現できる論理ブロックと、それらを接続するための配線領域からなります。論理モジュールは、例えばLUT(ルックアップテーブル)とセレクタ、フリップフロップなどからできており、チップ内部に規則正しく並んでいます。この間の配線領域にはすでに配線パターンが引いてあり、配線が交差するところにあるスイッチをON/OFFすることで論理モジュール間の接続を行います。このスイッチのON/OFFやLUT、セレクタ等の設定情報はアンチヒューズやROM、SRAM等に記憶されます。この情報の記憶に何を用いるか(ということが、FPGAの特性に大きな影響を与えます。
他のプログラミング可能なデジタルICとしては、PLA(Programmable
Logic Array)またはPLD(Programmable Logic Dvice)と呼ばれる素子があります。こちらのほうが古くから用いられており、大学で使う教科書等にもよく載っています。ASICにも用いられています。
PLDは、比較的小規模は組み合わせ回路、順序回路の実現にむいており、高速に動作します。一方、FPGAはCPUのような複雑な構造のディジタル回路を実現するのにむいていますが、高速な動作は期待できません。またPLDは一度書き込んでしまうと、回路の変更はできませんが、FPGAの場合、特に内部の設定情報の保持にSRAMを用いたタイプのものは、非常に柔軟に回路を変更することができます。PLDとFPGAはどちらが圧倒的に優れているということはなく、時と場合によって使い分けられています。
FPGAやPLDのスペックとして重要なものとしては、動作速度や、ゲート数といったものがあります。FPGAの動作速度はおもにスイッチ部分に何を用いているかによってきまります。
接続情報をヒューズを用いて保持するものは、一度切ってしまうと元に戻らないため、再書き込みはできませんが、スイッチでの遅延は最も小さく、動作速度は速くなります。一方、SRAMを用いて接続情報を保持するものは、動作速度は遅くなり、電源を切ると情報が消えてしまいますが、電源を入れたままプログラムし直すことができ、柔軟性という点では最も優れています。次にゲート数についてですが、これはどのくらいの規模の回路が実現できるかの目安とされています。PLDやFPGAは素子の構造上、利用できない部分がでてくるため、カタログスペックどおり、100%のゲートを使うことはできません。特にFPGAの場合、論理ブロックの機能と論理ブロック間の配線の制約が大きいため、実際に使用可能なゲートが50%に満たない場合がありえます。FPGAをもちいて大規模なシステムを構築すると、これがさらに落ち込む場合もあります。ゲート数でFPGAのスペックを表現するのはあまり適切なことではないのかもしれません。
最後にFPGAの利点と問題点をまとめておきます。
利点
-
プログラミング可能で、柔軟性がある
-
PLDと比較するとCPU等の複雑な回路を実現するのにむいている
問題点
ルックアップテーブル:任意の論理関数を実現できる回路。ある入力に対する出力を自由に定義できます。しくみは詳しくは知らないのですが、RAMを使って作るというのを読んだことがあります。RAMのアドレスを論理関数の入力とし、そのアドレスに自分が決め値を入れておいて実現すると書いてありました。