FPGAについて

   FPGA(Field Programmable Gate Array)とはユーザが手元で自由にプログラミングすることができるLSIです自分が欲しいと思う機能をもつLSIを手軽に手元で作ることができる(=プログラミングできる)わけです近年、FPGAは技術的な発展が目覚しくASIC(Application Specific Integrated Circuit:専用目的IC)用のデバイスや論理エミュレータ(簡単な解説はこちら)等に利用されています
   FPGAの内部はメーカーによってかなり異なっているのですが、基本的には、ANDやORなどからなる組み合わせ回路やフリップフロップを実現できる論理ブロックと、それらを接続するための配線領域からなります。論理モジュールは、例えばLUT(ルックアップテーブル)とセレクタフリップフロップなどからできておりチップ内部に規則正しく並んでいますこの間の配線領域にはすでに配線パターンが引いてあり配線が交差するところにあるスイッチをON/OFFすることで論理モジュール間の接続を行いますこのスイッチのON/OFFやLUTセレクタ等の設定情報はアンチヒューズやROMSRAM等に記憶されますこの情報の記憶に何を用いるか(ということが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の利点と問題点をまとめておきます

利点

問題点


 ルックアップテーブル:任意の論理関数を実現できる回路。ある入力に対する出力を自由に定義できます。しくみは詳しくは知らないのですが、RAMを使って作るというのを読んだことがあります。RAMのアドレスを論理関数の入力とし、そのアドレスに自分が決め値を入れておいて実現すると書いてありました。