そもそも FPGA とは何か?というところからまず説明します。
FPGA は Field Programmable Gate Array の略で、日本語に直訳すると「現場で構成可能な回路アレイ」となりますが、これではかえって訳がわかりません。そもそも「現場で構成可能」というあたりから意味不明になっています。これを振り返るために、少し歴史的なおさらいをしてみましょう。
デジタル回路の基本は論理回路です。NOT・AND・OR を組み合わせた形で回路を構成します。現実には NOT+AND で NAND、NOT+OR で NOR、AND+OR で XOR といったものも一緒に利用され、これらを組み合わせる形で、加算器だったりメモリだったりラッチだったり、と様々な部品が構成され、こうした部品を更に組み合わせることで巨大なシステムが作られます。
初期のデジタル回路というのは、NOT だけ機能を持つ IC とか AND だけの機能を持つ IC などを組み合わせて回路を構成していました。TI (テキサスインスツルメンツ) 社の 7400 シリーズが有名ですが、こうしたものは汎用ロジック IC と呼ばれていました。ただこれらを使う場合、どうしても回路が物理的に巨大になってしまう問題があります。そこで次にはこうした論理回路を組み合わせた形で、もう少し高度な IC が作られるようになりました。具体的には加算器とかメモリ (フリップフロップ) 、シフト レジスタなどがこの類です。ただ、これでもまだ複雑なデジタル回路を作ると物理的なサイズが巨大になってしまいました。そこで、更に特定用途に向けて様々な回路を IC の中に組み込む様になり、この結果として IC の規模はどんどん大きくなってきました。当初は数個~数十個の論理回路を組み込んだものが IC と呼ばれていましたが、80 年代には数千個を超えるようになり、こうした大規模なものを LSI (Large Scale Integration) と呼ぶようになりました。
こうした IC → LSI への進化に伴い、これまで基板上に数十~数百個の IC を配置する必要があったデジタル回路が、数個の LSI で済むようになりました。これはこれで大きな進化ですが、今度は目的の LSI をどうやって作るか、が大問題になってきました。汎用の LSI では機能的に過不足があっても、ちょっと足したり減らしたりという訳には行きません。だからといって、昨今の高度なデジタル回路を今更汎用 IC で作るには大規模すぎます。専用 LSI を作れば解決するのですが、一昔前は数百万円で専用 LSI が作れたのに、昨今では数千万円~数億円の初期コストが掛かるようになってきており、おいそれと作れなくなってきています。
こうした流れとは別に、最初から回路の要素だけを盛り込んでおき、ユーザーの手もとでロジックや配線を付け替えられる PLD (Programmable Logic Device) と呼ばれる製品が、 1970 年代末に登場しました。最初の PLD は規模が小さく、汎用ロジック IC 数個分でしたが、これを大規模にした CPLD (Complex Programmable Logic Device) というものが 1980 年代に登場すると、汎用ロジック IC 数百個~数千個分の回路を内部で構成できるようになり、CPLD で少々のデジタル回路ならば構成できるようになりました。また、ユーザーの手もとでロジックや配線を変更できるというコンセプトは同じですが、AMD はプログラムの記憶要素として SRAM を採用し、いつでも何度でも変更できる、さらに大規模な PLD を「 FPGA 」として市場に提案しました。現在 FPGA の規模は様々ですが、一昔前の専用 LSI を超える規模の回路を、簡単に構成できるようになってきました。また、 PLD で重要な点は「製造のための初期コスト」が不要なことです。
次に、ロジック IC の分類という観点から見てみましょう。ロジック IC は大別して「標準 IC 」と「カスタム IC 」に分かれます。カスタム IC は、ニーズに合わせた専用 IC を作るもので、完全に自由に作るフルカスタム IC や、ある程度出来合いのものとなるセミカスタム IC (これが ASIC: Application Specific IC と呼ばれる) に分かれます。
標準 IC の方はというと、殆どのものは回路構成があらかじめ決まっており、あとはそれらをどう組み合わせるかの自由度があるだけで、その代表として MPU (Micro Processing Unit :いわゆる CPU) や DSP (Digital Signal Processor) などがあります。内部回路そのものに柔軟性はなく、ただしその上でソフトウェアを動作させることができ、ここで柔軟性を確保する形となります。
一方標準 IC でも、PLD に分類される FPGA や CPLD と呼ばれる製品は、回路要素そのものは決まっていますが、ユーザーが内部のハードウェア構成を変える事で高い柔軟性を確保しています。
カスタム IC と標準 IC の最も大きな違いは、「製造に関わる費用と時間」のコストを誰が払うかという点です。カスタム IC はユーザーがそのコストを受け持ちますが、標準 IC はベンダーがそのコストを払います。IC 単体の機能、単価の側面だけでは見えてこない部分です。
特徴 | 長所 | 短所 | |
フル カスタム | 内部の回路と配線を完全に一から設計する。 | 最適化が行いやすく、性能も出しやすい。 | 設計に膨大な期間が掛かり、また製造にも時間が掛かる。コストも一番高い。 |
ゲートアレイ | 基本的な論理回路 (ゲート) をあらかじめ敷き詰めておき、設計に応じて上に配線だけを後から追加する。 | 配線だけを追加するので製造期間が短く、低コスト。 | 基本的な回路のみなので、集積度や性能に難あり。 |
セルベース | あらかじめ設計済の機能ブロックを用意しておき、これに後から個別のロジック回路や配線を追加する。 | ゲートアレイよりも集積度や性能を高くしやすい。 | うまく用途に合う機能ブロックがないと効果が無い。また製造期間やコストが高くなる。 |
エンベデッド アレイ | あらかじめ設計済の機能ブロックを用意しておき、その他の部分にゲートを埋める、ゲートアレイとセルベースの折衷方式。 | ゲートアレイよりも性能・集積度を上げやすく、セルベースよりも安価。 | ゲートアレイよりも高価で、セルベースよりも性能・集積度が劣る。 |
ストラクチャード ASIC | ゲートアレイに加え、標準的な機能ブロックの搭載とある程度の配線まであらかじめ済ませておいたもの。 エンベデッドアレイの延長にあると考えても良い。 | ゲートアレイよりも短期間に開発が可能。製造コストもやや安い。 | 提供される機能がベンダーにより大きく異なっており、用途にあう機能ブロックがないと効果が薄い。 |
ASSP ( Application Specific Standard Product ) |
特定分野/アプリケーション向けに向けた標準品。例えば携帯電話向け無線ICなどがこれにあたる。 | 標準品として提供されるので、コストも安く利用しやすい。 | 製品差別化のポイントに ASSP を使うことは非常に難しい。 |
標準ロジック IC | 標準的なロジック回路 (AND、マルチプレクサなどの基本論理回路) を集積したIC。 | ちょっとした回路を構成したい場合には便利。 | ある程度以上の規模の回路を構成するのは非現実的。 |
MPU | 汎用的な CPU 。ソフトウェアを動作させることで処理が行える。 | ソフトウェアにより非常に柔軟な動作を可能。様々な製品が入手しやすい。 | 処理性能はカスタム IC や PLD などに比べかなり低い。また回路規模が大きくなるのでコスト面でも不利。 |
DSP | MPU に近い構成だが、連続的なデータに定型処理を施すといった場合に活躍する。 | MPU よりも小さな回路規模で、遥かに高い処理能力を実現できる。 | MPU に比べて柔軟性に乏しい。 |
FPGA | 見かけ上はゲートアレイに近い構造だが、後からロジックと配線を自由に変更できる点が根本的に異なる。 | ユーザーがアプリケーション用回路を変更可能。CPLD などに比べ、遥かに大規模な回路を構成可能、また製造のための初期コストが不要。 | 同一プロセスでの同等チップサイズの ASIC に比べ、ゲート数が小さい。 |
CPLD | FPGA よりも小規模であるが、それを除くと似た構成。また必要な周辺回路なども小規模で済む。 | 回路を後から変更可能。FPGA に比べコスト面で有利。 | 回路規模及び性能の面でFPGA に遠く及ばない。 |
このように様々なロジック IC がありますが、なぜ今 FPGA が注目されているのかという事をもう少し説明しましょう。
先に FPGA と ASIC は似ているという説明をしました。どちらも標準ゲートが用意されており、配線を自由に設計できるという点では非常に似ています。実際、FPGA と ASIC では設計ツールがかなり共通に利用できます。ただし設計→製造のフローは大きく異なっています。
根本的な違いは、IC 製造の前にアプリケーション用回路を確定するのが ASIC で、製造に移管後は変更ができないか、あるいは大きなペナルティとなるコストを支払って変更します。これとは対照的に製造済のデバイスにアプリケーション用回路をプログラムするのが FPGA で、回路変更が簡単にできます。このあたりを次に見てみましょう。
左が ASIC の場合で、仕様策定後、ASIC の設計を済ませたらコーディング (内部配線を、VHDL などの専用言語を使って記述) します。それが済んだら論理合成 (専用言語の記述を、実際の論理回路に変換) し、きちんと動作するかのシミュレーションを実施します。ここまでで問題がなければ、配置配線 (実際の IC 内部に機能ブロックや配線を決定) を行います。
ここまでは開発者の手元で行いますが、この先はファウンダリでの作業となります。まず配置配線にあわせ、マスクと呼ばれるものを製造、このマスクを使い IC を製造します。製造した IC が戻ってきて、初めてテストが行えるわけです。
さてこのフローの問題点はどこか?といいますと、まずマスク製造と IC 製造は、最短でも数ヶ月を要する点です。しかも、ちょっと前なら一千万円程度で収まっていたコストが、最近では数億円に達することも珍しくありません。こうなると、「うっかりミスがあった」と言うたびに数ヶ月と数千万円~数億円のロスが発生します。当然こんなことは通常許容されないのでマスク生成の前にしっかり確認作業が入るのですが、それでもやはり実際にテストしないとわからない、という事は少なからず存在します。しかも、途中で仕様変更が入った場合には、やはりまた一からやり直しになります。
FPGA の場合、配置配線までの手順は ASIC とほぼ同じです。ところが FPGA の場合、そのまま回路をダウンロードさせてすぐに動作させられるので、ミスが判明したり、仕様変更があっても、数ヶ月の待ちは発生しません。これだけでも、大幅に開発期間と開発コストの節約になるわけです。しかも開発中に、例えば「ちょっと手直しをしてテストを掛ける」という場合も、シミュレーションを都度走らせる必要もありません。FPGA はまた、出荷後に構成を変えることも可能です。ASIC の場合、例えば後から内部回路を変更したい場合は、それを実装したボードごと交換せざるをえません。ところが FPGA は内部回路をデータの形で蓄えているので、このデータを入れ替えれば新しい回路に切り替えが出来ます。
最近、製品出荷後のソフトウェアやファームウェア更新が PC のみならず携帯やデジカメなどでも一般的になりつつありますが、 FPGA を使えばこのファームウェア更新を利用して内部回路の更新も可能になります。これはカスタム IC では絶対に真似の出来ない技です。 ネットワークで接続されている装置上の FPGA は、リモートでアプリケーション回路をアップデートできる可能性を持っているということになります。
また別のソリューションとして、近年では ASSP も多く利用されています。図2では「カスタム化可能デバイス」に含まれていません。特定用途向け標準品、という位置づけです。携帯電話用 IC を例にとると、これを提供するベンダーがあらかじめ「 3G 携帯電話の通信制御」「携帯電話の音声 Codec 」といったように、特定用途向けに絞り込んだ専用 IC をあらかじめ作って供給する形になっており、このため ASIC に必要な「 IC の製造コスト」、「アプリケーションの設計コスト」また、 FPGA に必要な「アプリケーションの設計コスト」は必要ありません。
ところが ASSP も課題は少なくありません。
まず標準品であることから、機能などの差別化は行いにくいというのは当然として、供給される ASSP の機能が、必ずしも求めている機能と完全に一致するとは限らない。また提供される機能に問題があった場合でも、その修正はそのデバイスでは出来ません。他の手段に頼ることになります。更に、新機能 (例えば新しい通信方式に対応) を盛り込んだ ASSP のリリースは、必ずしも早いとは言えません。この新機能を差別化の大きなポイントとしたい場合、ASSP を使うのは製品完成時期が遅れる可能性があるという点で、非常にリスクが高いとも言えます。 さらに根本的な問題として、ASSP はベンダー毎に異なるラインナップで提供されており、複数の ASSP ベンダーの製品を混載させるのはしばしば困難をともなう場合もあり、だからといって一社の ASSP ベンダーで全てが揃うという保障もありません。初期コストは圧倒的に安いが、開発者から見るとブラックボックスとして扱う事になるため、この融通の利かなさが開発後期に問題となることが見受けられます。
ASSP はまた、大量の利用を前提とした供給体制になっていることが多く、このため少量生産では使えないとか、コスト面で割に合わない場合も存在します。ASSP ベンダーからすれは比較的古い、安定したプロセスを使って ASSP を製造したいが、これは消費電力や面積/体積の観点からすると不利に働くため、機能的にはともかく発熱や実装面積などが問題になる場合もあります。
ASIC | ASSP | FPGA | |
機能の自由度 | ユーザー仕様 | ベンダー仕様 | 集積規模内でユーザー仕様 |
ユーザーアプリへの特化度 | ユーザー仕様 | ベンダー仕様 | ユーザー仕様 |
回路変更・修正 | 不可 | 不可 | 可能 |
性能 | ユーザー仕様 | ベンダー仕様 | 性能範囲内でユーザー仕様 |
消費電力 | ユーザーが最適化 | ベンダーが最適化 | デバイス / 開発ツールに依存 |
開発期間 | 設計および製造期間 | リリース待ち期間 | 設計期間のみ |
開発コスト | 設計コストと製造コスト | 不要 | 設計コストのみ |
ASIC / ASSP / FPGA について、得手不得手をまとめてみたのが表 1 です。全ての項目で万能なデバイスはないので、何を重視するかによって選択することになります。
従来は性能や価格を重視して ASIC を使っていたが、開発期間や開発コストが問題になってきたため、ASSP や FPGA が次第に広く使われるようになってきた、というのが昨今のトレンドです。
FPGA と ASSP は、どちらも開発コストや開発期間削減に有効ですが、その方向性が 180° 異なっています。差別化への要求が高い昨今の製品の開発には、柔軟性も欠くことができないという事情もあり、ASSP から FPGA への転換が始まっています。
また近年では特定のアプリケーションにおいて普遍的に利用される機能 (コモディティ機能) を取り込む「ターゲット デザイン プラットフォーム」に基づく「特定アプリケーション向け FPGA」も登場し、ASSP にかわるソリューションとして FPGA の領域は広がりつづけています。
第二章では、FPGA の最新動向や先端技術をご紹介します。
誰によって FPGA が考案されたか、ご存じですか。
実は 1984 年にロス・フリーマン ( Ross Freeman ) 氏が SRAM ベースの FPGA を考案し、バーニー・ボンダーシュミット ( Bernie Vonderschmitt ) 氏とジム・バーネット ( Jim Barnett ) 氏とともに Xilinx を創設したのが始まりです。 1985 年には初の SRAM ベース FPGA 、XC2064 がリリースされました。