プログラマブルロジックデバイス
プログラマブルロジックデバイス (programmable logic device: PLD) は、製造後にユーザの手元で内部論理回路を定義・変更できる集積回路である。
通常の集積回路(IC、LSI)は設計時に仕様や機能が定まり、製造時に全ての回路が固定されるために、後から回路を変更する事は出来ない。これに対してプログラマブルロジックデバイスは、出荷時には特定の処理を行う回路が定義されておらず、ユーザが手許で必要な回路の構成情報をデバイスに設定して初めて機能を発揮する。
初期のプログラマブルロジックデバイスは事前に設定を行って実際の用途に供し、動作中には回路を変更しないものが大半であった。しかし近年は、システム起動時あるいは、動作中にも回路を変更する事が出来るものもあり、そのようなものはリコンフィギュラブル・デバイス、特に動作中に回路を変更可能なものはダイナミック・リコンフィギュラブル・デバイスと呼ばれる。これに対比して従来のように起動時や動作中の構成変更ができないデバイスをコンフィギュラブル・デバイスと呼ぶこともある。
多数の集積回路からなる回路を多数製造する場合は特定用途向け集積回路(ASIC)のように1個のLSIにまとめて実現することが多い。しかしLSIの開発には、技術資産(ツール購入、技術者教育)や設備の整備、IPの購入費用といったことによる高い初期コストが発生する。
さらに一般のLSIでは製造後の修正・改良が不可能なことから、設計時に多くの条件を加味した徹底的な最適化が必要となり、設計には長期間を要する上、網羅的な検証が必要となり、開発コストを押し上げている。
加えてLSIの設計から実際の製造に至るまでには数多くの工程があり、それらは他プロジェクトへの再利用が不可能な投資に関するコスト、つまりNREコスト(Non-Recurring Engineering cost、非反復エンジニアリング・コスト)が非常に高い。以上のような理由でLSIの設計・開発はそれ自身高いものにつき、設計資産を再利用する際の経済効率が低いものとなるため設計資産蓄積によるコスト低減もソフトウェアの場合のようには期待できない。
しかし、プログラマブルロジックデバイスの場合、汎用品のプログラマブルロジックデバイス上に回路を何度でも再設定することで再利用や修正が可能であるため、設計・検証コストが低減化され、チップ製造を行わないためNREコストも極めて低く抑えられる。
以上のような特徴から、現在ではASICの動作確認のための試作、次世代携帯電話基地局など将来的に仕様の変更が見込まれる製品、規格の策定途中でハードウェア完成後に仕様を変更する必要がある製品、論理設計技術の習得用の実験回路など、試作品、少量生産品から量産品まで幅広く利用されるようになってきている。
最初期のプログラマブルデバイスは、回路情報の保持手段として微細なヒューズを用いるPALと呼ばれるものである。その後、EEPROMの要素を用いたGAL、それを複数搭載したCPLDとなり、集積度を増した。これらのデバイスは、主に、既存のLSIを相互に接続するグルー・ロジックとして用いる所からはじまった。
一方で、ゲートアレイ構成を基本としたEEPROM型FPGA、LUTを基本としたSRAM型FPGAも登場した。これらは、回路容量の増大に伴い、単なるグルー・ロジックにとどまらず、既存のLSIの機能も取り込むようになり、現在では、CPUコアやDSP、アナログデバイスをも取り込み(アナログPLDの節を参照)、システムを丸ごと搭載することも可能になった(大規模化・低コスト化の節を参照)。なお、このようにシステムを丸ごと搭載したLSIを一般にSoC (System-on-a-chip) と呼ぶ。
デバイスが高価だった時代は、ASICのプロトタイピング、超高性能コンピュータ用アクセラレータなどに用いられた(再構成可能コンピューティング参照)。
メーカーが増え競争が起こり、また量産効果によって価格が低廉化してくると、一般的なPCにも使用されるようになった。ASICを使わず、バスにFPGAを直接接続しておき、コンフィギュレーションROMにはホストバスインターフェース機能とFPGAへのロジック書き込み機能だけを用意しておき、デバイスドライバによって本来のロジックをアップロードする方式が広まった。デバイスドライバソフトウエアのバージョンアップだけで機能の向上、バグの修正が行える為、量産数量次第では、ASICを使用した場合より全体コストが安くなる。
インターネットにおける急激な通信路容量の増加に伴い、従来のソフトウエアによるルーティングが限界に達した。高性能CPUの投入は装置の部品増と消費電力の問題、冷却など様々な問題があり非現実的であった。ASICで構成する時代も一時期あったが、処理すべきプロトコルが増えたり規格が変更になった等によって装置が陳腐化してしまう問題が生じた。そこで自由に回路構成が変更できるFPGAによってルーティングエンジンを形成する事によって、スループットを維持しつつ新しい規格にも対応できる設計が一般化した。
デジタル放送は新しいプラットフォームが形成される都度、伝送方式をはじめとしアプリケーションレイヤーにいたるまで、根こそぎ規格が変化した。2000年に放送を開始したBSデジタル放送にいたっては、予めCSデジタル放送や地上波デジタル放送という新規格への備えが必要であり、また受信機の仕様に応じて放送機器側の仕様を策定しなおすという泥縄状態であった。このため、放送用機器はFPGAをベースに作りこまれ変更のあった規格への対応が行われた。受信機の一部もロジック回路の一部をFPGAで作っておくことで、ソフトウエアアップデートだけで新規格に対応できる製品もあった。
Webサーバやアクセラレータにおいて、プログラマブルロジックデバイスを応用した製品がある。サーバにとって負荷の大きいCGI実行結果などをキャッシュしたり、フィルタリング処理を可変ハードウエアで実装したものである。これらの機器は従来機器と比べけた違いの単位時間あたりトランザクション数 (TPS) を誇る。またアクセラレータは特に負荷が高いSecure Sockets Layer (SSL) を高速化するのに用いられた。SSLは暗号化方式が増える可能性があるため、既存規格だけを実装した装置は陳腐化を免れないがロジック回路を変更可能にしておく事により、暗号化方式の追加に対応する事ができる。
FPGAを筆頭とするプログラマブルロジックデバイスの低廉化は、ホビーストがCPUの実装から、ついにはフルスクラッチでSoCそのものを実現することを可能とするまでに至った。例えば1chip MSX  では、一つのシステムを全てFPGAで実装し、生産終了して入手不可能になったMSXパソコンを再現した。
その価格は、かつて製品が存在していた時代と遜色の無い物であり、プログラマブルロジックデバイスそのものが、特殊な業務用途の高価なデバイスから、ディスクリート部品同様にホビーストの手によって要求を具現するデバイスへ発展した一つの証と言える。
この様な例として、コンピュータがディスクリート部品の塊であった時代からの変遷を学生がなぞる学習への利用や、既存の命令セットアーキテクチャではなく、1から設計した全くオリジナルのプロセッサを作る研究に活用されていることなどがあげられる。
狭義のPLD (Programmable Logic Device) とは、小規模なプログラマブルロジックデバイスであるPAL (Programmable Array Logic) とGAL (Generic Array Logic) の総称である。
PAL: ANDアレイが書き換え可能で、ORアレイが固定のもの。
PLA: ANDアレイ、ORアレイとも書き換え可能のもの。
GAL, PLD: ANDアレイが書き換え可能、ORアレイが固定で、ORアレイの出力をANDアレイに入力できるもの。
また広義のPLDとして、後述のCPLDおよびFPGAまでを含めてPLDと表現する場合もある。
CPLD (Complex Programmable Logic Device) は、PALやGALよりも規模の大きなPLDで数百のロジックエレメントから成り、殆どがEEPROMのアーキテクチャで構成される。
内部構造として後述のPLD(1マクロセル)を複数集積し、それらを内部バスで接続した構成になっている。
EEPROM, EPROM
FPGA (Field Programmable Gate Array) とは、利用者が独自の論理回路を書き込むことの出来るゲートアレイの一種である。プログラマブルロジックデバイスの中で特に再書き換え可能であるものをこう呼ぶ。
内部構造の一例としては、任意の論理を構成可能な4入力程度の組合わせ回路と順序回路からなる論理ブロックが、格子状に数十×数十程度配置され、その間の配線を簡易なクロスバースイッチで接続した構造をもつものが挙げられる。
FPGAの厳密な定義は明確でなく、利用者やメーカーなどが独自の解釈でそう呼んでいるようだが、書き込み可能な回路規模はおおよそ1,000ロジックエレメント(約20,000ゲート)以上のものをFPGAと呼ぶことが多い。
FPGAには回路情報の保持要素としてEEPROMを用いるデバイスがある。これは、回路の設定変更に手間がかかる一方で、電源を切っても回路情報を保持しているため、電源投入後に直ぐに使用できるほか、回路情報を内部に持っているため、設計のノウハウが漏れないという利点もある。
デバイス上に多数のLUT(Look Up Table、表引き方式。入力ビット列をインデックスとして出力すべき真理値を格納したメモリをアクセスする機構により任意の真理値表に対応する組み合わせ回路を実現できる)、D-FF(Dフリップフロップ)、ルーティング資源(チャネル及びスイッチ)を搭載し、これを組み合わせて回路を構成する形式が主流である。LUTの内容、D-FFの動作モード、ルーティングの情報(スイッチの状態)を保持する要素として、SRAMを用いる。
電源を切ると回路情報が揮発してしまうため、動作させるには外部に専用のROMを接続し、電源投入時に回路情報をロードしてから使用するタイプが一般的である。この回路情報をロードすることをコンフィギュレーションと言う。
一時期この専用ROMが高価であったため、汎用のフラッシュメモリからコンフィギュレーションを可能にする専用LSIも開発された。
SRAM型デバイスは前述のEEPROM型デバイスと違って構成情報の更新が比較的容易で高速であり、システムの動作中に構成を変更するような使い方も可能である。この特徴のためリコンフィギュラブル・デバイスやダイナミック・リコンフィギュラブル・デバイスを実現するための基本的な構成となっている。
1990年代後半、各FPGAメーカーは顧客のアプリケーションの要求から、高速化、大規模化を推し進めてきた。
2000年代に入ると、単なるユーザーロジック領域の拡大ではなく、機能ブロックをあらかじめデバイスに盛り込み、高性能化を謳った製品群を開発した。
それまでのFPGAでは、メモリ、加算/乗算器ひいてはCPUといった機能はRTLを論理合成することにより、FPGAの規模が許せばユーザーロジック上に構成できたが、性能やリソースの面で不利となる。
そこでデバイスによっては、CPUコア、SRAMブロック、乗算器、PLL、DSP等の使用頻度の高い回路要素をあらかじめハードマクロとして搭載し、複雑なシステムをひとつのFPGA内に高効率で実現できる様にしたものもある。
また、入出力特性もTTLレベル、CMOSレベル、3.3V、2.5V、1.8Vなどの電圧に対応可能で、PCIやAGPといった各種標準I/F用に合わせた信号レベルを設定することもできる。
LVDSや高速SerDes等の物理層をサポートしたIOブロックを搭載したものもあり、上位にユーザーロジックで構成したPCI Express、ギガビット・イーサネットなどの制御回路を組み合わせることで、高速通信I/Fを構成できるものもある。
また価格面においても、旧来はデバイス単価が高く、製品の試作に使う程度で量産品(ハイエンドのルータ以外)には使えなかった。しかし、プロセス技術の発達やFPGA市場の広がりから、低価格なFPGAデバイスも発売されるようになった。これにより、ハイエンドではない通信機器や民生用の大型テレビといった量産製品にまで、FPGAが使われるようになった。
NHKは、次世代デジタルハイビジョンの圧縮フォーマットにH.265の採用を策定した。このプロトコルは現在の中規模スカラプロセッサでは取り扱う事が難しい技術的困難がある。リコンフィギュラブルデバイスを大型テレビが搭載している事を前提とし、MPEG-2デコーダーがH.265を取り扱える事を前提として規格に取り込んだ。これは現行のデジタルハイビジョンが中規模スカラプロセッサでも扱えるMPEG-2という前時代プロトコルを採用した為高画質化が困難であるという反省も含まれている。
2000年代前半には、オペアンプやコンパレータを含むアナログ回路ブロックを複数搭載し、配線や利得をデジタル制御信号で可変にした製品が  され、アナログ回路のPLDが登場した。FPAA (Field Programable Analog Array) とも呼ばれる。
また、従来のデジタル回路FPGAにアナログ回路ブロックを混載し、そのアナログ回路ブロックを用いてAD変換回路などを構成することで1チップ化可能なMixedSignal FPGAも製品化されている。