FPGAとは? あとから回路を書き換えられるチップのしくみ
FPGAは、工場で作ったあとに、中の論理回路を何度でも組み替えられるチップです。中には、答えを書いた小さな表(LUT)と、つなぎ方を切り替えられる配線が大量に並んでいます。設定データを読み込むと、それらが目的の回路として働きます。専用のチップ(ASIC)より遅く電力も多く使いますが、チップを作り直す費用と時間がかからないのが強みです。
この記事でわかること
- 「回路をあとから書き換えられる」とはどういうことか。プログラムを書き換えるCPUとの違い
- FPGAの中の3つの部品(LUT・フリップフロップ・配線)のしくみ。ANDとXORの例で
- FPGAの回路の作り方と、専用のチップ(ASIC)との使い分け
- どこで使われているか、主なメーカーの歴史
前提知識: AND・XORなどの論理ゲートと真理値表を知っていると読みやすくなります。「コンピュータは0と1でどう計算するの?」で説明しています。
身近なところでは
FPGAは、スマホや家電の中ではあまり見かけません。よく使われるのは、携帯電話の基地局、測定器、データセンターのサーバ、人工衛星などです。どれも、作る台数が少なめか、出荷後に働きを変えたい機器です。
新しいチップを開発する会社でも、FPGAは欠かせません。工場でチップを作る前に、設計した回路をFPGAに入れて、本当に動くかを試すからです。
FPGAとは: 回路をあとから決められるチップ
ふつうのチップは、設計した回路を工場で作り込みます。トランジスタのつなぎ方は、できあがった時点で決まり、あとから変えられません(「集積回路(IC)とは?」)。CPUも、回路そのものは固定です。CPUで変えられるのは、回路に実行させる命令の並び、つまりプログラムのほうです(「CPUとは?」)。
これに対してFPGAは、回路そのものを、買ったあとで決められるチップです。中には、どんな働きにもなれる小さな部品と、それらを結ぶ配線が、碁盤の目のように並んでいます。どの部品に何をさせ、どうつなぐかを設定すると、その回路として動きます。
名前は英語のField-Programmable Gate Arrayの頭文字です。「現場(field)で設定できる(programmable)、ゲートの並び(gate array)」という意味です。
しくみ1: LUT ― 答えを書いた小さな表
論理回路の働きは、真理値表で書けます。入力のすべての組み合わせと、そのときの出力を並べた表です。たとえば2入力のANDは、入力の組み合わせが4通りなので、4行の表になります。
FPGAは、ゲートを組み立てるかわりに、この表をそのまま小さなメモリに書いておきます。入力の0と1で「表の何行目か」を選び、そこに書いてある値を出します。表を引いて答えを出すので、この部品をルックアップテーブル(LUT)と呼びます。
2入力のLUTは、4つの記憶の箱と、箱を1つ選ぶ回路でできています。ANDにしたいときは、4つの箱に上から0・0・0・1と書きます。入力がA=1、B=1なら4番目の箱が選ばれ、1が出ます。それ以外の入力では0が出るので、ANDと同じ働きです。
同じLUTの箱を、上から0・1・1・0に書き換えてみます。すると、入力が違うときだけ1を出すようになります。これはXORの働きです。ゲートを付け替えなくても、箱の中身を書き換えるだけで、別の回路になるのです。
| A | B | ANDなら箱の中身 | XORなら箱の中身 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
4つの箱の0と1の書き方は16通りです。2入力の論理の働きも、全部で16通りです。2入力のLUTは、そのどれにでもなれます。
実際のFPGAのLUTは、もっと入力が多くなります。たとえばAMDの7シリーズというFPGAでは、6入力のLUTを使います。箱の数は2を6回掛けた64個で、6入力のどんな論理でも1つのLUTで作れます。
しくみ2: フリップフロップ ― 結果を覚えておく
LUTの出力は、そのときの入力だけで決まります。これだけでは、「さっきまで何だったか」を覚えられません。数を数える回路や、計算を何段かに分けて順に流す回路には、値を覚えておく部品が要ります。
そこでFPGAでは、LUTのすぐ隣にフリップフロップを置きます。フリップフロップは、0か1かの1ビットを覚えておく部品です。決まった合図が来た瞬間にだけ入力を取り込み、次の合図まで同じ値を出し続けます。
この合図は、一定の間隔で0と1をくり返す信号で、クロックと呼びます。CPUの「3GHz」と同じ種類の信号です。LUTとフリップフロップを何組かまとめたものを、ここでは「論理ブロック」と呼びます。
入力だけで出力が決まる回路と、覚えた値も使う回路の違いは、「組み合わせ回路と順序回路の違い」で表にまとめています。
しくみ3: つなぎ方を切り替えられる配線
論理ブロックの間には、縦と横に配線がたくさん通っています。配線が交わる所には、つなぐか切るかを選べるスイッチがあります。スイッチの正体はトランジスタで、オンかオフかは、そばの記憶の箱の0と1で決まります。
ある論理ブロックの出力を、別のブロックへ届けたいとします。途中のスイッチをいくつかオンにして、道筋を作ります。どのスイッチをオンにするかで、回路のつなぎ方が決まるのです。
配線とスイッチは、どんな回路を入れても困らないように、使わないかもしれない道まで用意しておきます。その分、トランジスタと面積が余分に要ります。これが、あとで見る「専用のチップより遅く、電力も多い」理由の一つです。
専用の部品も入っている
掛け算のような大きな計算をLUTで作ると、LUTがたくさん要り、遅くなります。そこで今のFPGAには、決まった働きの回路も最初から作り込まれています。これをハードブロックと呼びます。
- DSPブロック: 掛け算と足し算をまとめて速く行う回路。DSPは「デジタル信号処理」の英語の頭文字で、音や電波の処理、AIの計算に使います
- ブロックRAM: まとまった量のデータを置いておく、チップの中のメモリ
- 高速トランシーバ: ほかのチップと、少ない本数の線で速くデータをやり取りする回路(SerDes)
- CPUコア: Armなどのプロセッサを入れた製品もあります。プログラムで動く部分と、回路を組む部分を、1つのチップに持てます
設定データは、電源を入れるたびに読み込む
LUTの箱の中身も、配線のスイッチのオン・オフも、すべて0と1のデータです。これを1つにまとめたものを、ビットストリームと呼びます。FPGAに「回路を書き込む」とは、このデータを中の記憶の箱に読み込ませることです。
多くのFPGAは、この記憶の箱に、電源を切ると中身が消える種類のメモリ(SRAM)を使います。そのため、電源を入れるたびに、同じ基板に載せたフラッシュメモリなどからビットストリームを読み込みます。読み込みが終わるまでは、FPGAは目的の回路として働きません。
一方、電源を切っても設定が消えない製品もあります。たとえばMicrochip社のPolarFireというシリーズは、設定をフラッシュメモリの一種に記憶します。外に設定用のメモリを置かずに済み、電源を入れてすぐに動けます。
FPGAの回路はどうやって作る?
FPGAの回路の作り方は、専用のチップ(ASIC)の設計とよく似ています。大きく違うのは最後です。設計データを工場に送るかわりに、ビットストリームを作ってFPGAに読み込ませます。
- 働きを書く: 回路の動きを、ハードウェア記述言語(HDL)で書きます。よく使われるのはVerilogとVHDLです。
- 回路に直す: 書いた動きを、ソフトがLUT・フリップフロップ・ハードブロックの組み合わせに変えます。この作業を論理合成と呼びます。
- 並べてつなぐ: どの論理ブロックを使い、どのスイッチで結ぶかを、ソフトが決めます。これを配置配線と呼びます。
- 書き込む: 結果をビットストリームにして、FPGAに読み込ませます。
- 確かめる: 動かして確かめ、直すなら1に戻ります。
HDLはプログラムの言葉に似ていますが、書くのは命令の順番ではなく、回路の形です。2つの言語の違いは「VerilogとVHDLの違い」で比べています。
最近は、C言語やC++で書いた計算の手順から、HDLにあたる回路の記述を自動で作る方法も使われます。これを高位合成(HLS)と呼びます。
CPU・FPGA・ASICの違い
CPUは、決まった回路で、命令を1つずつ取り出して実行します。どんな仕事もこなせるかわりに、命令を取り出して解読する手間が毎回かかります。FPGAは、仕事に合わせた回路を組んで動きます。たとえば「掛けて、足して、比べる」を、別々の回路で同時に進められます。
ASICは、1つの仕事のためだけに設計して、工場で作るチップです。同じ働きを同じ世代の技術で作れば、ふつうはASICが最も速く、電力も少なく済みます。ただし、作り始めるまでに、設計や回路の原版(マスク)に大きな費用がかかります。たくさん作って、この費用を1個あたりで薄めないと元が取れません。
| CPU | FPGA | ASIC | |
|---|---|---|---|
| あとで変えられるもの | プログラム | 回路そのもの | 変えられない |
| 決まった仕事の効率(目安) | 低め | 中くらい | 最も高い |
| チップを作る費用 | 不要(既製品) | 不要(既製品) | とても高い |
| 向いている場面 | 何でもこなす | 少量、仕様が変わる | 大量、仕様が固まった |
3つの違いと、システム全体を1つにまとめたチップ(SoC)との関係は、「ASIC・FPGA・SoCの違い」でも表にしています。
なぜ専用のチップより遅く、電力も多いのか
FPGAでは、信号が論理ブロックの間を移るたびに、いくつものスイッチと長い配線を通ります。ASICなら2点を最短の配線で結べますが、FPGAでは用意された道を乗り継ぐしかありません。また、ANDのような小さな働きにも、64個の箱を持つLUTを1つ使うことがあります。
この差を測った研究があります。トロント大学のKuonとRoseは2007年の論文で、同じ回路をFPGAとASICで作り比べました。どちらも同じ世代(90nm)の技術です。LUTとフリップフロップだけで作った場合、FPGAは面積が平均で約35倍、信号が回路を通り抜ける時間が約3〜4倍でした。
電力は、0と1が切り替わるときに使う分(動的な電力)を比べ、FPGAが約14倍でした。一方、ハードブロックを使うと、面積の差は約18倍まで縮まりました。20年近く前の世代での測定なので、今の製品では数字が違います。ただ、書き換えられる分だけ効率が落ちる理由は今も同じです。
どこで使われている?
- 新しいチップの試作: 工場でASICを作る前に、設計した回路をFPGAに入れ、実際のソフトを動かして確かめます。この用途のための、とても大きなFPGAもあります。
- 通信機器: 通信の規格は改訂が続きます。基地局などにFPGAを使えば、出荷後に回路を直せる余地を残せます。
- 測定器や産業用の機器: 作る台数が少なく、専用のチップでは割に合わない製品です。
- データセンター: Microsoftは2014年の論文で、検索エンジンBingの順位づけの計算をFPGAで速めた試験を報告しました。1,632台のサーバに1枚ずつFPGAを載せ、1台あたりの処理量が95%増えています。
- 宇宙: 人工衛星では、打ち上げたあとに地上から回路を書き換えられることが強みです。宇宙では放射線で記憶のビットが反転するソフトエラーが起きやすいので、それに備えた宇宙向けの製品が使われます。
FPGAの歴史とメーカー
FPGAを考え出したのは、米国の技術者ロス・フリーマン(Ross Freeman)です。彼は1984年、このアイデアを製品にするため、仲間とXilinxを設立しました。そして1985年、最初のFPGAとされるXC2064を発表します。中の論理の部品は64個でした。
FPGAの大手として長く知られてきたのが、XilinxとAlteraの2社です。
- 2015年12月: IntelがAlteraの買収を完了
- 2022年2月: AMDがXilinxの買収を完了。Xilinxの製品はAMDの製品として売られています
- 2025年9月: 投資会社のSilver LakeがAlteraの株式の51%を取得。AlteraはIntelの子会社ではなくなりました(Intelは49%を保有)
このほか、LatticeやMicrochipなどもFPGAを作っています。ここで書いた会社の関係は、2026年10月時点のものです。
よくある誤解
誤解: FPGAは、CPUのようにプログラムを実行している
実際は、ビットストリームは命令の並びではありません。LUTの中身とスイッチのオン・オフを決める「回路の設定」です。書き込んだあとは、その回路が信号をそのまま処理し、命令を取り出す動きはありません。ただし、CPUコアを内蔵した製品などでは、そのCPUがプログラムを実行します。「プログラムする」という同じ言葉が、誤解のもとです。
誤解: FPGAを使えば、どんな処理でもCPUより速くなる
実際は、速くなるのは、同時に進められる計算が多く、手順が決まった処理です。前に見たとおりFPGAの回路は信号が通るのに時間がかかり、クロックはふつうCPUより低めです。条件で手順が大きく変わる処理などでは、CPUのほうが速いこともよくあります。大量の掛け算には、GPUを使うことも多くあります(「なぜAIにGPUが使われるの?」)。
誤解: 一度書き込んだら、もう変えられない
実際は、多くのFPGAは、別のビットストリームを読み込ませれば何度でも書き換えられます。SRAMを使う製品は、電源を入れるたびに設定を読み込み直しているくらいです。ただし、一度しか書き込めない方式(アンチヒューズ)の製品も、宇宙向けなど一部にあります。
数字で見る
| 項目 | 数字 |
|---|---|
| 最初のFPGA XC2064(1985年)の論理の部品 | 64個 |
| 試作用のAMD Versal Premium VP1902(2023年発表)の規模 | 1,850万ロジックセル |
| FPGAとASICの差(Kuon・Rose、2007年、90nmの世代) | 面積 約35倍、遅れ 約3〜4倍、動的な電力 約14倍 |
ロジックセルは、メーカーが決めた規模の数え方です(AMDは6入力のLUT 1個を1.6ロジックセルと数えます)。XC2064の「64個」とは数え方が違い、単純には比べられません。それでも、約40年で規模が桁違いに大きくなったことはわかります。
もっと詳しく学ぶ
- 違いを表で見る: ラッチとフリップフロップの違い、静的消費電力と動的消費電力の違い
- 次の一歩の用語: FPGA(詳しい解説)、RTL、STA(回路がクロックに間に合うかを調べる)
- 手を動かして試す: 論理回路シミュレーター(ゲートの真理値表を作ると、LUTに書く中身がわかります)、セットアップ・ホールドのタイミング計算ツール(回路の遅れとクロックの速さの関係)
- 図で見る: フリップフロップが値を取り込むタイミングは、図解「セットアップ時間とホールド時間」にあります
- 関連する記事: 「マイコンとは?」(プログラムで動く小さなコンピュータ。FPGAとよく比べられます)