FPGAって、そもそもナニ?

「ハードウェアをソフトウェアみたいに書き換える」、そんな夢みたいな話

電子機器の設計や開発に少し触れると、必ず耳にする言葉があります。それが・・・

FPGA (エフピージーエー)

「なんか難しそう」「マイコンとは違うの?」「ASICって言葉も出てきてよくわからない……」

そんな声はよく聞かれます。でも、FPGAの基本的な考え方はじつはとてもシンプルです。この記事では、専門知識ゼロの方でも「なるほど!」と思えるように、FPGAの正体をひもといていきます。

まず「普通のチップ」との違いから考えてみよう

スマートフォンやパソコンに入っているCPU(プロセッサ)は、「命令を順番に実行する」ことが得意な汎用チップです。プログラムを書けば、計算もゲームも動画再生も何でもこなせます。でも、その回路の構造自体は出荷時に固定されていて、物理的には変わりません。

一方、ASIC(Application Specific Integrated Circuit) は「特定の用途専用」に設計・製造されたチップです。たとえば、SuicaやPASMOに入っているチップ、カメラの画像処理エンジン、仮想通貨のマイニングチップなどがそれにあたります。専用設計なので超高速・低消費電力ですが、製造に莫大なコストと時間がかかり、一度作ったら回路を変更できません。そこで登場するのが、FPGAです。

FPGAは「空白のホワイトボード」のようなチップ

FPGA(Field-Programmable Gate Array) を一言で表すなら・・・

「買ってきてから、自分で回路を書き込めるチップ」

です。

「Field-Programmable(フィールドプログラマブル)」というのは、「現場(フィールド)で、後からプログラムできる」という意味。工場で製造した後でも、ユーザーが自由に内部の回路を定義・変更できるのです。

Gate Array(ゲートアレイ) というのは、論理回路の基本部品(ゲート)がたくさん並んでいる、という意味です。

つまりFPGAとは、「論理回路の素材がぎっしり詰まっていて、使い方を後から自分で決められる半導体チップ」 のこと。ホワイトボードに好きな回路図を書いて、それがそのまま動くチップ、といったイメージです。

内部はどうなっているの? ──レゴブロックに例えてみると

FPGAの内部は、大まかに以下の3要素で成り立っています。

  1. ロジックブロック(CLB / LE)
    「AND」「OR」「NOT」などの論理演算を実行できる小さなブロックが、チップ上に何千・何万と並んでいます。これが回路の「部品」にあたります。
  2. プログラマブル配線(インターコネクト)
    各ロジックブロックをつなぐ「配線」も、プログラムによって自由につなぎ替えられます。どのブロックとどのブロックを接続するかを指定することで、目的の回路が出来上がります。
  3. I/Oブロック
    外部の端子(ピン)との接続部分です。入力・出力の電気的特性もある程度設定できます。

    レゴブロックに例えると:
    • ロジックブロック = 個々のレゴのパーツ
    • プログラマブル配線 = パーツとパーツの接続部分(どこにつなぐかを後から決められる)
    • 全体として、好きな形(回路)を組み立てられる

ただしレゴと違うのは、「組み立て作業」がすべてデジタルデータ(コンフィギュレーションデータ)で行われる点です。電源を入れると、保存しておいたデータをもとに一瞬でブロック間の接続が確立し、回路が「出来上がる」のです。

FPGAはどうやって「設計」するの?

FPGAの内部回路を設計するには、HDL(Hardware Description Language:ハードウェア記述言語) と呼ばれる専用の言語を使います。代表的なものに Verilog HDLVHDL があります。

プログラミング言語(PythonやC言語)が「処理の手順」を記述するのに対し、HDLは「回路の構造や動作」を記述します。考え方が少し異なるため、プログラマーが最初にFPGAを触ると戸惑うことが多い部分でもあります。

最近では、C言語に近い書き方でFPGAを設計できるHLS(High-Level Synthesis:高位合成)ツールも普及しており、設計のハードルは年々下がっています。

合わせて読みたい

CPUやASICと何が違う?

比較項目CPU / MCUFPGAASIC
回路の構造固定書き換え可能固定
開発コスト低(ソフトだけでOK)非常に高い
量産コスト低〜中高め非常に安い(大量生産時)
処理速度高い(並列処理)最高
消費電力中〜高最小
設計変更ソフト変更だけでOK回路を再設計ほぼ不可
主な用途汎用処理全般試作・特定高速処理量産製品の専用処理

FPGAは「CPUほど汎用的ではないが、ASICほどガチガチでもない」、ちょうど中間に位置する存在といえます。

FPGAの最大の強み:「並列処理」

CPUは基本的に命令を1つずつ順番に実行します(現代のCPUはパイプラインや複数コアで高速化していますが、基本的には「命令の逐次実行」です)。

これに対してFPGAは違います。回路そのものを自分で定義するので、複数の処理を物理的に同時並列で動かせます。たとえば「100チャンネルの信号を同時にリアルタイム処理する」という用途では、CPUが100回ループを回している間に、FPGAは100個の回路が一斉に動いて一瞬で結果を出せます。これがFPGAの最大の武器です。

どんな場面で使われているの?

FPGAは以下のような用途で広く活躍しています。

  • 通信インフラ:5G基地局の信号処理、ネットワークスイッチの高速パケット処理
  • データセンター:AIの推論処理アクセラレータ、ストレージコントローラ
  • 医療機器:超音波診断装置の画像処理、医療用計測器
  • 産業・FA機器:モーター制御、リアルタイム画像検査
  • 宇宙・防衛:高信頼性が求められる制御システム
  • 半導体開発:ASICを量産する前のプロトタイプ検証(FPGAにASICの回路を仮実装して動作確認)

最後のプロトタイプ検証は特に重要な用途です。ASICは一度製造すると修正が効きません。そこで先にFPGAで同じ回路を動かして「本当に正しく動くか」をじっくり確かめてから、本番のASIC製造に進むのです。コスト削減と品質保証の両立に欠かせないプロセスです。

FPGAの「弱点」も知っておこう

良い面ばかりではありません。FPGAには以下のような課題もあります。

  • 消費電力が多い:プログラマブルな配線構造を維持するための回路が常に動いているため、同じ処理をするASICに比べると電力効率で劣ります。
  • 単価が高い:高機能なFPGAは数万円〜数十万円することも珍しくありません。大量生産品にはコスト面でASICに負けます。
  • 設計の難しさ:HDLによる設計はソフトウェア開発とは考え方が異なり、習得に時間がかかります。
  • 動作周波数の上限:同じ処理をするASICと比べると、動作周波数(速度)の上限がやや低くなる傾向があります。

まとめ:FPGAは「機能を後から決められる専用チップ」

改めて整理すると、FPGAとは:

  1. 内部回路を自由に書き込める、書き換え可能な半導体チップ
  2. 並列処理が得意で、リアルタイム・高速処理を要する分野で威力を発揮する
  3. CPUのような汎用性と、ASICのような専用性の中間に位置する存在
  4. 開発・試作段階でのプロトタイプ検証にも欠かせないツール

「ハードウェアなのに、ソフトウェアのように変更できる」というFPGAの発想は、電子機器開発の柔軟性を大きく広げました。通信・医療・AI・データセンターなど、最先端の現場でFPGAは今日も縁の下の力持ちとして活躍し続けています。