FPGAの原理 ─ LUT・ルーティング・再構成可能計算
なぜFPGAは命令を実行せず回路そのものを書き換えて速いのか。LUT・ルーティング・ビットストリーム再構成から空間並列の計算モデルまで原理で押さえ、CPUやGPUとの使い分けを掴めます。
- 1.FPGAはLUT(真理値表のメモリ)とフリップフロップ、DSPブロック、ブロックRAMを、プログラマブルなスイッチボックスで結んだ再構成可能チップ。
- 2.ビットストリームがLUTの中身とスイッチの接続を書き込むことで、命令を実行するのではなく回路そのものを構成して問題を解く。
- 3.計算を時間方向(命令列)ではなく空間方向(パイプライン展開)に並べるため、固定アルゴリズムを低レイテンシ・高スループットで処理できる。
命令を実行しないチップ
CPU も GPU も「命令列を読んで実行する」固定回路です。これに対し FPGA(Field-Programmable Gate Array) は、チップ自体の論理回路を出荷後に書き換えられる半導体です。実行するのはソフトウェアではなく、問題を解くために構成した回路そのものです。同じシリコンが、ある日は画像フィルタ、別の日はネットワークパケット処理になります。
この柔軟性は、チップを多数の小さな部品と、それらをつなぐ配線網に分解し、両方をメモリビットで制御することで実現します。中身を決めるデータを ビットストリーム と呼び、これが FPGA の「プログラム」にあたります。
LUT ─ 真理値表で任意の論理を作る
FPGA の論理の基本単位は LUT(Look-Up Table、ルックアップテーブル) です。LUT は名前のとおり真理値表そのものを格納した小さなメモリで、入力の組み合わせをアドレス、出力をその番地の格納値として持ちます。
6入力 LUT なら入力パターンは 2 の 6 乗 = 64 通りあり、64 ビットの SRAM に各パターンの出力を1ビットずつ書いておきます。入力 6 本でこの 64 ビットの中から1つを選び出す巨大なマルチプレクサだと考えると分かりやすいです。
2入力ANDをLUTで実現する例
入力(A,B) → 格納ビット
0,0 → 0
0,1 → 0
1,0 → 0
1,1 → 1 ← この4ビット 0001 を書けばAND、0111ならOR
重要なのは、真理値表の中身を差し替えるだけで任意の論理関数になる点です。AND も XOR も多数決も、6入力までなら配線を変えずビットの書き換えだけで実現できます。これが「再構成可能」の核心です。LUT に小さな フリップフロップ(1ビットの状態保持素子)を組み合わせた塊を ロジックセル と呼び、FPGA はこれを数万から数百万個並べています。組み合わせ論理を LUT が、順序回路の状態をフリップフロップが担い、両者でクロック同期のパイプラインを構成します。
論理ゲートを直接焼き込むと回路は固定されます。LUT は「論理関数=真理値表=メモリの中身」という等価性を使い、書き換え可能な SRAM に表を置くことで、製造後でも任意の論理に変えられるようにしています。柔軟性の代償として、同じ機能を専用配線で焼いた ASIC より面積・遅延・電力で数倍不利になります。
DSPブロックとブロックRAM ─ 効率のための専用回路
すべてを LUT で組むと、乗算のような重い演算は大量の LUT を食いつぶし遅くなります。そこで FPGA は頻出する重い機能を ハードマクロ(専用に焼き込んだ固定回路)として散りばめています。
- DSPブロック: 乗算器と加算器(積和演算器、MAC)を1つにまとめた専用回路。信号処理や行列積、最近は推論の積和に多用されます。LUT で組んだ乗算器より圧倒的に高速・低面積です。
- ブロックRAM(BRAM): チップ内に分散配置された数 KB 単位の SRAM。外部メモリへ出ずにオンチップで高速にデータを保持・供給します。並列に多数の BRAM を同時アクセスできるのが、外部 DRAM 1系統とは決定的に違う点です。
| 資源 | 役割 | 向く処理 |
|---|---|---|
| LUT+FF | 任意の論理・状態保持 | 制御・ビット演算・カスタムデータパス |
| DSPブロック | 高速な積和(MAC) | FIR・FFT・行列積・畳み込み |
| ブロックRAM | オンチップ並列メモリ | ラインバッファ・FIFO・係数表 |
設計の腕は、この3資源を問題に合わせてどう割り当てるかに出ます。DSP と BRAM が枯渇すれば LUT で代替せざるを得ず、面積と周波数が悪化します。
プログラマブルルーティング ─ 配線こそが本体
部品が揃っても、つながらなければ回路になりません。FPGA 面積の大半(しばしば過半)を占めるのは演算素子ではなく プログラマブルルーティング(配線網) です。
チップ全体に縦横の配線チャネルが格子状に走り、交差点ごとに スイッチボックス が置かれます。スイッチボックスは、SRAM ビットで ON/OFF する多数のスイッチ(パストランジスタ)の集まりで、「この配線とあの配線をつなぐか」をビット単位で決めます。ロジックセルの入出力も 接続ボックス を通じてチャネルへ接続されます。
ロジックセル ─[接続ボックス]─ 配線チャネル ─[スイッチボックス]─ 別チャネル
↑ 各スイッチのON/OFFをSRAMビットで指定
つまり LUT の中身もスイッチの接続も、すべて SRAM ビットの集合で決まります。ビットストリームの正体は 「全 LUT の真理値表 + 全スイッチボックスの接続表」を並べた巨大なビット列 です。この配線網の柔軟さが任意回路を可能にする一方、信号が多数のスイッチを通るぶん遅延が増え、FPGA の動作周波数が ASIC より低い主因になります。配置配線(合成後にセルを置き配線を引く工程)で遅延が決まるため、ツールは最長経路(クリティカルパス)を縮めるよう最適化します。
ビットストリーム再構成
FPGA は電源投入時、外部の不揮発メモリからビットストリームを読み込んで全 SRAM セルを初期化し、回路を立ち上げます(SRAM ベース FPGA は電源を切ると構成が消える揮発性)。
さらに、動作中にチップの一部だけを別の回路へ書き換える 部分再構成(partial reconfiguration) が可能です。チップを領域に区切り、残りを動かしたまま特定領域のビットだけ差し替えます。1つのハードウェアで時分割に複数アクセラレータを切り替えたり、不要な機能の領域を別用途へ転用したりできます。これは「実行中にハードウェア構成を変える」という、ソフトウェアにもない自由度です。
ビットストリームは数 MB から数十 MB に達し、書き込みには相応の時間(ミリ秒オーダー以上)がかかります。CPU の関数呼び出しのように呼ぶたび切り替える用途には向きません。再構成のコストを上回るだけ長く同じ回路で処理する、いわば「回路を据え置いて流し続ける」使い方が前提です。
空間並列という計算モデル
FPGA が CPU・GPU と本質的に違うのは、時間ではなく空間で計算する点です。
CPU はアルゴリズムを命令列に直し、1つの ALU が時間をかけて順に処理します(時間方向の多重化)。FPGA はアルゴリズムの各段をそれぞれ専用回路としてチップ上に展開し、データを流し込みます。
CPU: 1個のALU ── 命令1 → 命令2 → 命令3 …(時間で順に)
FPGA: [段1回路]→[段2回路]→[段3回路]→…(空間に並べ、毎クロック1データ流入)
各段を物理的に分けて間にフリップフロップを挟むと パイプライン展開 になり、十分にデータが流れ込めば毎クロック1結果を吐き出せます。10 段のパイプラインなら 10 個のデータが各段で同時進行します。さらに同じ回路を複製すれば、データ並列も空間に展開できます。命令フェッチもキャッシュミスも分岐予測も存在せず、回路は配線どおりにデータを流すだけなので、固定アルゴリズムでは低レイテンシかつ決定的なスループットを叩き出します。
利点が出るのは「処理内容が固定で、大量データを途切れず流せる」場面です。ネットワーク/ストレージのライン処理、信号処理、低レイテンシ取引、特定の推論などが典型です。逆に制御が複雑で分岐だらけ、データ依存が強い処理は、回路展開してもパイプラインが乱れて空間並列の旨味が薄れます。汎用計算の柔軟さではアウトオブオーダー実行の CPU に、規則的な大規模並列ではSIMTのGPUに分があります。
「LUT は真理値表を格納した SRAM で任意の論理関数を実現する」「スイッチボックスを含むプログラマブルルーティングが配線を決め、ビットストリームが LUT 内容と配線を書き込む」「DSPブロックとブロックRAMは効率のための専用ハードマクロ」「FPGA は命令実行ではなく回路の空間展開(パイプライン)で計算する」の4点が要点です。FPGA の柔軟性の代償として、ASIC より周波数・面積・電力で劣る点も問われます。
まとめ
- LUT は真理値表を入れた SRAM で、中身の書き換えだけで任意の論理を作る。フリップフロップ と組んでパイプラインの段を構成する。
- DSPブロック(積和)とブロックRAM(並列オンチップメモリ)は、頻出処理を効率化する専用ハードマクロ。
- 面積の大半を占めるプログラマブルルーティング(スイッチボックス)が配線を決め、これも含めて ビットストリーム が全 SRAM ビットを書き込む。部分再構成で動作中に一部を入れ替えられる。
- FPGA は命令を実行せず、アルゴリズムを空間に展開してデータを流す。パイプライン展開で毎クロック1結果を狙えるのが CPU・GPU と異なる計算モデル。
固定アルゴリズムを回路化して流し続けるのが FPGA の本領です。並列性の別の解き方としてSIMDとベクトル演算も合わせて読むと、時間多重と空間展開の違いが立体的に見えてきます。
CPU/メモリ/ディスク Article
FPGAの原理 ─ LUT・ルーティング・再構成可能計算を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
FPGA
比較で見る軸
難易度: advanced / カテゴリ: CPU/メモリ/ディスク / タグ数: 5
導入後に効く点
ビットストリームがLUTの中身とスイッチの接続を書き込むことで、命令を実行するのではなく回路そのものを構成して問題を解く。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- CPU/メモリ/ディスク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「FPGA / LUT」に近いか確認する。
- 強みである「FPGAはLUT(真理値表のメモリ)とフリップフロップ、DSPブロック、ブロックRAMを、プログラマブルなスイッチボックスで結んだ再構成可能チップ。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。