+ 作るログイン
図を読み込んでいます…
1 / 14

FPGAって何? 回路を"書き換える"技術を理解する

発行
アニメモ公式
版
第3版
改訂
コマ
全14

FPGA設計で何をするのか、なぜ回路を書き換えられるのか、CPU・GPUと何が違うのか、どこで使われているのかを、図を動かしながら解説します。

FPGAとは「回路そのものを作る」技術

FPGA(Field Programmable Gate Array)は、買ってきた後に中の回路を自由に書き換えられるチップです。

ソフトウェアを書いてCPUに実行させるのではなく、「こういう電子回路が欲しい」と記述して、その回路をチップの中に実際に作ります。

このアニメモでは、設計の流れ → なぜ可能なのか → CPU・GPUとの違い → 応用例、の順に図を動かしながら見ていきます。

  • FPGA設計とは?
  • FPGA
  • ソフトを書くのではなく、回路そのものを作る

設計の流れ:HDLからビットストリームへ

まず Verilog や VHDL(最近は SystemVerilog、Chisel、Vitis HLS で C++ からも)で「欲しい回路」を記述します。

合成ツールがそれを論理ゲートの回路に変換し、配置配線ツールがチップ上のどこにどう置くかを決めます。結果はビットストリームというファイルになり、これをFPGAに書き込むと回路が完成します。

実際の設計時間の大半は、「クロックごとに何が起きるか」を考えるタイミング設計と、シミュレーションによる検証に費やされます。

  • 設計の流れ
  • コード
  • 設定
  • 場所
  • ファイル
  • HDLを書く
  • 論理合成
  • 配置配線
  • ビットストリーム
  • FPGA
  • 設計時間の大半はタイミング設計とシミュレーション検証

なぜ可能? FPGAの中身を見る

FPGAの中には、小さな部品が何万〜何百万個も規則正しく並んでいます。主役は3つです。

  • LUT(ルックアップテーブル):小さなSRAM。4〜6入力の任意の論理関数になれる
  • フリップフロップ:1ビットを記憶する
  • 配線スイッチ:どのLUTとどのLUTをつなぐかを決める

この「論理」「記憶」「配線」の3つが揃うと、原理的にどんなデジタル回路でも組めます。

  • FPGAの中身
  • FPGA
  • LUT+FF
  • LUT+FF
  • LUT+FF
  • LUT+FF
  • LUT+FF
  • LUT+FF
  • LUT+FF
  • LUT+FF
  • LUT+FF
  • 論理(LUT) + 記憶(FF) + 配線スイッチ が何百万個

LUTの正体は「真理値表を書いたSRAM」

LUTを1つ取り出して拡大してみます。中身は、入力の組み合わせごとに出力を書いておく小さなメモリ(真理値表)です。

例えば2入力なら4行の表になります。右のように「A=1かつB=1のときだけY=1」と書いておけば、このLUTはAND回路として振る舞います。

つまり論理ゲートを「作る」のではなく、「表を書いて、その表を引く」ことで論理を実現しているのです。

  • LUT = 真理値表を書いたSRAM
  • FPGA
  • LUT(2入力)
  • A B │ Y 0 0 │ 0 0 1 │ 0 1 0 │ 0 1 1 │ 1
  • A
  • = AND回路
  • Y
  • B
  • ゲートを作るのではなく、表を引いている

書き換えると「別の回路」に変わる

ビットストリームの正体は、この真理値表の中身と、配線スイッチのON/OFFを並べた設定データです。

表の中身を書き換えると、同じLUTが今度はXOR回路になります。同時に配線スイッチも切り替われば、LUT同士のつながり方も変わります。

これが「電源を入れ直すたびに別の回路に物理的に変われる」理由であり、Field Programmable の名前の由来です。

  • 表を書き換えると別の回路になる
  • FPGA
  • LUT(2入力)書き換え後
  • A B │ Y 0 0 │ 0 0 1 │ 1 1 0 │ 1 1 1 │ 0
  • A
  • = XOR回路
  • Y
  • B
  • ビットストリーム = 全LUTの表 + 全スイッチの設定

CPUとの違い①:CPUは「順番に」処理する

CPUは回路が固定された汎用機です。命令をひとつずつ取り出し(フェッチ)、解読し(デコード)、演算器で実行します。

4つのデータに同じ処理をしたければ、1つの演算器に順番に流すしかないので、最低でも4クロックかかります。

CPUはこの「順番に処理する」仕組みを極限まで速くしたものですが、仕組み自体は変えられません。

  • CPUは順番に、FPGAは一斉に
  • CPU
  • FPGA
  • 1
  • 2
  • 3
  • 4
  • 1つずつ
  • 演算器 × 1
  • 演算器
  • 演算器
  • 演算器
  • 演算器
  • 4クロック(逐次)
  • 演算器を4つ並べられる

CPUとの違い②:FPGAは演算器を「並べる」

FPGAには命令という概念がありません。自分で設計した回路が、電気的にそのまま動きます。

同じ処理を4つのデータにしたいなら、演算器を4つ置けばいい。4つのデータが同時に入り、1クロックで全部終わります。100個なら100個置けます(LUTが足りる限り)。

CPUがループで100回まわす仕事を、FPGAは回路の形で「展開」してしまう。これが並列性の正体です。

  • CPUは順番に、FPGAは一斉に
  • CPU
  • FPGA
  • 1
  • 2
  • 3
  • 4
  • 演算器 × 1
  • 演算器
  • 演算器
  • 演算器
  • 演算器
  • 4クロック(逐次)
  • 1クロック(並列)

GPUとの違い①:GPUは「同じ形の」並列

「並列ならGPUでもいいのでは?」と思うかもしれません。GPUは数千個の同じ演算コアが、同じ命令を違うデータに一斉に実行する構造(SIMD)です。

行列演算のように「同じ計算を大量に」という仕事には最強で、深層学習や分子動力学、流体計算はほぼGPUの独壇場です。

ただしコアはあらかじめ用意された固定回路。全部が32bit浮動小数点で、データの流れ方も変えられません。

  • GPUは同じ形の並列、FPGAは自由な形の並列
  • GPU
  • FPGA
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • ?
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 同じコア×数千・同じ命令(SIMD)

GPUとの違い②:FPGAは形を自分で決める

FPGAでは、演算器の数も、ビット幅も、データの流れる経路も、全部自分で決められます。

3bitで足りる計算は3bitの回路に、48bit必要なところは48bitに。そして処理を一直線のパイプラインに組めば、データが入ってから出るまでの時間を固定できます。

ざっくり使い分けると、浮動小数点を大量にさばくスループット重視ならGPU、変則的なビット幅やストリーム処理でレイテンシ重視ならFPGAです。

  • GPUは同じ形の並列、FPGAは自由な形の並列
  • GPU
  • FPGA
  • 3bit
  • 12bit 乗算
  • 48bit 累算
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • フィルタ
  • 32bit
  • 32bit
  • 32bit
  • 32bit
  • 同じコア×数千・同じ命令(SIMD)
  • 数・ビット幅・経路を自分で設計

利点の核心:ナノ秒単位で「確定的」

FPGAの最大の武器は、処理を回路として固定できるので、データが入ってから出るまでの時間が毎回ぴったり同じになることです。

例えば高頻度取引(HFT)では、取引所からのパケットを受信→判断→発注まで、数百ナノ秒で完了します。CPUやGPUはOSやキャッシュの都合でマイクロ秒単位で揺らぐので、速度も確定性も足りません。

次のページで、パケットが3段のパイプラインを通り抜ける様子を見てみましょう。

  • レイテンシが毎回ぴったり同じ
  • FPGA
  • Pkt
  • ① 受信
  • ② 判断
  • ③ 発注
  • t = 0 ns

パケットが通り抜ける:300 nsで確定

各段は決まったクロック数で処理し、次の段へ渡します。途中で割り込みもキャッシュミスも起きないので、何万回流しても所要時間は同じです。

この性質は、モータ制御、レーダー、粒子加速器のトリガ系、通信機器など「遅れてはいけない」「ばらついてはいけない」現場で決定的に重要です。

クロック自体はCPUより遅い(数百MHz)のに速いのは、「命令を取りに行く」という無駄が一切ないからです。

  • レイテンシが毎回ぴったり同じ
  • FPGA
  • ① 受信
  • ② 判断
  • ③ 発注
  • Pkt
  • t = 300 ns(毎回同じ)

具体的な応用例

  • 高頻度取引:受信から発注まで数百ns。確定性が命
  • 5G基地局・ネットワーク機器:100Gbpsのパケットを落とさず処理
  • 産業用カメラ:センサの画素をそのまま流し込んで欠陥検出
  • 自動車ADAS・医療機器:超音波やMRIの信号処理
  • 加速器・重力波検出器:毎秒数千万イベントを即時に取捨選択
  • データセンター:Microsoft Azureがネットワークや Bing 推論に大規模配備

もうひとつ重要なのがASIC試作です。チップを製造する前に、設計をFPGAで動かして検証する(エミュレーション)のは半導体業界の標準的な手順です。

  • FPGAはどこで使われている?
  • カメラ
  • 折れ線
  • 電気
  • 産業用カメラ
  • 高頻度取引
  • 加速器トリガ
  • FPGA
  • ルーター
  • クラウド
  • 配送
  • 5G・ネットワーク
  • データセンター
  • ADAS・医療機器

まとめ:CPUの代替ではなく「隣に置く」

  • CPU:固定回路で命令を順番に実行。分岐の多い汎用処理に強い
  • GPU:同じコアを数千個並べる。浮動小数点の大量演算に強い
  • FPGA:回路そのものを設計する。変則的なビット幅・ストリーム処理・確定的レイテンシに強い

FPGAの弱点は、クロックが遅い(数百MHz)、開発とデバッグが重い、逐次処理が苦手、単価が高いこと。だから実際の製品では、CPUの隣に「専用アクセラレータ」として置くのが普通です。

AMD(旧Xilinx)のZynqのように、ARM CPUとFPGAを1チップに載せた製品が主流になっているのは、この役割分担をそのまま形にしたものです。

  • まとめ:役割分担で使う
  • CPU
  • GPU
  • FPGA
  • 順番に実行 分岐・汎用処理に強い
  • 同じコア×数千 浮動小数点の大量演算
  • 回路を自分で設計 確定的レイテンシ・省電力
  • CPUの隣に置く専用アクセラレータ(例:Zynq = ARM + FPGA)

化学の現場では:分析機器の中に必ずいる

NMRやTOF型質量分析計の内部には、ほぼ必ずFPGAが入っています。検出器から出てくるアナログ信号をADCでデジタル化したあと、積算・フィルタ・ピーク検出をリアルタイムで行うのがFPGAの仕事です。

データレートが数GB/秒になるので、いったんPCのメモリに貯めてから処理するのでは間に合いません。「流れてくる端から処理して、結果だけPCに渡す」構造が必要なのです。

MD専用機のAnton(D.E. Shaw Research)はFPGAではなくASICですが、「力場計算をパイプライン回路にする」という設計思想はFPGA的なものです。

  • 化学の現場:分析機器の中のFPGA
  • FPGA
  • 積算
  • ノートPC
  • 検出器 (NMR / MS)
  • ADC
  • フィルタ
  • 結果だけ
  • ピーク検出
  • 数GB/秒の生信号を「流れてくる端から」処理する

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]