FPGAとは?CPU・ASICとの違いを画像多めでわかりやすく解説!
この記事でわかること
・FPGAとは何か
・FPGAとCPUの違い
・FPGAとASICの違い
・FPGAが得意な処理
・FPGAが向いている場面、向いていない場面
・試験で迷ったときの判断ポイント
FPGAとは?

FPGAは、簡単に言うと、
あとから中の回路を書き換えられる半導体チップのことだよ。

あとから回路を書き換えられる?

そう。
普通のICや専用チップは、作ったあとに中の回路を大きく変えるのは難しい。
でもFPGAは、使う人があとから設計情報を書き込んで、内部の回路構成を変更できるんだ。
FPGAは Field Programmable Gate Array の略だよ。

つまり、完成後でも中身を変えられるチップってこと?

そう。FPGAを一言でいうなら、こうなるよ。
あとから回路を作り替えられる、自由度の高い半導体チップ
例え:レゴブロックみたいなチップ

FPGAは、レゴブロックで作る電子回路みたいなイメージかな。

レゴ?

そう。
同じレゴブロックでも、組み方を変えれば家にも車にもロボットにもなるでしょ?


FPGAも似ていて、チップの中にある部品のつなぎ方を変えることで、いろいろな回路として使える。
同じFPGAチップ
↓
設計Aを書き込む → 通信処理用の回路
設計Bを書き込む → 画像処理用の回路
設計Cを書き込む → 制御用の回路

同じチップなのに、作る回路を変えられるんだ。

そうそう。
だから試作や特殊な処理に向いている。
FPGAの名前の意味

FPGAは
Field Programmable Gate Array の略だよ。

| 部分 | 意味 | イメージ |
|---|---|---|
| Field | 現場で | 工場で作ったあとでも |
| Programmable | 書き換え可能 | 設計を入れられる |
| Gate Array | 論理回路の集まり | AND・ORなどの回路の集まり |

「現場で書き換えられる論理回路の集まり」って感じ?

そう。
名前の意味としてはかなり近いね。
CPUとの違い

CPUとは何が違うの?

CPUは、あらかじめ決まった回路で、プログラムの命令を順番に処理する部品だよ。

パソコンやスマホに入ってるやつだよね。

そう。
CPUは汎用的でいろいろな処理ができるけど、基本的には「命令を読んで実行する」スタイル。
CPU
プログラムの命令を読む
↓
順番に処理する


実際のCPUも複数のコアで並列処理できるけど、
基本的な考え方としては、用意された命令を実行する部品だと考えると分かりやすいよ。

じゃあFPGAは?

FPGAは、処理内容に合わせて専用の回路を作るイメージ。
FPGA
やりたい処理に合わせて回路を作る
↓
その回路で処理する


CPUは命令を順番にこなす。
FPGAは専用の道具を作って処理する感じ?

そうそう。そんな感じだよ。

料理で例えるCPUとFPGAの違い

うーん。
もう少しわかりやすい例えはある?

料理で例えてみようか。
CPUは、何でもできる料理人みたいなもの。
CPU
包丁で切る
鍋で煮る
フライパンで焼く
順番に作業する


なんでもできるけど、基本は順番に作業するんだね。

そう。
一方、FPGAは、料理の工程に合わせて専用の調理ラインを作る感じ。
FPGA
野菜を切る係
肉を焼く係
ソースを作る係
盛り付ける係
を同時に動かす


流れ作業のラインみたいな感じか。

そう。
だから、同じような処理を大量に高速に処理したいときに強いことがある。

FPGAは並列処理が得意

FPGAの大きな特徴は、並列処理が得意なことだよ。

並列処理って、同時にいろいろやること?

そう。
CPUは基本的に命令を順番に実行する考え方だけど、FPGAは処理ごとに回路を作れるから、複数の処理を同時に走らせやすい。


だから速い場合があるんだ。

そう。
特に、画像処理、通信処理、信号処理、暗号処理みたいに、同じような計算を大量に繰り返す処理と相性がいい。

ASICとの違い

ASICっていう言葉も見るんだけど、FPGAと何が違うの?

ASICは、特定用途向けに作る専用チップのことだよ。
ざっくり言うと、最初から専用に作り込んだチップ。

FPGAも専用っぽく使えるんじゃないの?

使える。
でも違いは、あとから変更できるかどうか。だよ。

| 種類 | 特徴 |
|---|---|
| CPU | 汎用的。プログラムを実行する |
| FPGA | あとから回路を書き換えられる |
| ASIC | 専用回路として作り込む。基本的にあとから変更しにくい |

ASICは完成品の専用道具。
FPGAは作り替えられる専用道具って感じ?

そう。
FPGAは設計変更しやすく、製品に載せた後でも書き換えられる場合がある一方、ASICは大量生産ではコストや消費電力、性能面で有利になりやすい、という説明がよくされるよ。
FPGAのメリット

FPGAのメリットは主にこれ。

| メリット | 内容 |
|---|---|
| あとから変更できる | 仕様変更や修正に対応しやすい |
| 試作に向いている | ASICを作る前の検証に使いやすい |
| 並列処理に強い | 同時に複数の処理を走らせやすい |
| 専用処理を作れる | 特定用途に合わせた回路を作れる |
| リアルタイム処理に向く | 決まった処理を高速に返しやすい |

あとから変えられるのは大きいね。

そう。
開発中に「やっぱり仕様を変えたい」となったとき、FPGAなら書き換えで対応できる場合がある。
FPGAのデメリット

逆にデメリットはこんな感じ。

| デメリット | 内容 |
|---|---|
| 設計が難しい | ソフトウェアよりハードウェアの知識が必要 |
| 開発ツールに慣れが必要 | HDLや専用ツールを使うことが多い |
| ASICより効率が悪い場合がある | 大量生産ではASICの方が有利なことがある |
| 消費電力やコストが高めになる場合がある | 用途によっては不向き |
| デバッグが難しい | 回路レベルの考え方が必要 |

プログラムを書く感覚だけでは難しそう。

そうだね。
FPGAでは、VerilogやVHDLなどのHDL、つまりハードウェア記述言語で回路を設計することが多い。ソフトウェアの命令を書くというより、回路構造を設計する感覚に近いよ。
HDLって何?

HDLって何?

HDLは Hardware Description Language の略で、ハードウェア記述言語のこと。

プログラミング言語とは違うの?

似て見えるけど、考え方が違う。
プログラミング言語は「CPUにどんな順番で命令を実行させるか」を書くことが多い。
一方HDLは、
この入力が来たら、この論理回路で処理する
この信号とこの信号をつなぐ
このタイミングで値を保持する
みたいに、回路の動きや構造を書く。


コードを書いてるけど、作っているのはソフトじゃなくて回路なんだね。

そう。
ここがFPGAの面白いところだよ。
FPGAは何に使われる?

FPGAって、どんなところで使われるの?

たとえばこんな用途があるよ。

| 用途 | 理由 |
|---|---|
| 通信機器 | 通信規格の変更に対応しやすい |
| 画像処理 | 同じ処理を大量に並列処理しやすい |
| 産業機器 | 専用の制御処理を作りやすい |
| 試作開発 | ASICを作る前に動作確認しやすい |
| 車載・医療・計測機器 | リアルタイム処理や専用処理が必要 |
| データセンター | 特定処理の高速化に使われることがある |

意外といろんなところで使われるんだね。

そう。
特に「仕様変更がありそう」「専用処理を高速にしたい」「量産前に検証したい」みたいな場面と相性がいいよ。
FPGAとGPUの違い

GPUとも違うの?

違うね。
GPUは、画像処理や大量の同じような計算を並列に行うのが得意なプロセッサ。

AIとかゲームでよく聞くやつだね。

そう。
GPUは用意された演算ユニットを使って大量計算する。
FPGAは、処理に合わせて回路そのものを構成できる。
今まで説明したCPUとASICも入れて比較するとこんな感じ。

| 種類 | イメージ |
|---|---|
| CPU | 何でもできる万能作業員 |
| GPU | 同じ作業を大量にこなす大人数チーム |
| FPGA | 作業に合わせて組み替えられる専用ライン |
| ASIC | 最初から完成した専用工場 |
FPGAが向いているケース

FPGAはこういうケースで向いているよ。

| 向いているケース | 理由 |
|---|---|
| 仕様変更がありそう | あとから書き換えられる |
| ASICを作る前に試したい | 試作に向いている |
| 特定処理を高速化したい | 専用回路を作れる |
| 低遅延が必要 | 決まった処理をすばやく返せる |
| 少量生産の専用機器 | ASICを作るほどではない場合に使いやすい |

変更しながら作りたいときに強いんだ。

そう。
「まだ仕様が固まりきっていない」「でも高速なハードウェア処理がほしい」みたいな場面に合う。
FPGAが向いていないケース

逆に向いてないケースは?

たとえばこんな感じ。

| 向いていないケース | 理由 |
|---|---|
| 普通の事務処理 | CPUで十分なことが多い |
| 大量生産で仕様が完全固定 | ASICの方が有利な場合がある |
| 開発者にハードウェア知識がない | 設計が難しい |
| とにかく安く作りたい | FPGAは単価が高くなりがち |
| 電力を極限まで下げたい | ASICの方が有利な場合がある |
試験で迷ったときの判断ポイント

このキーワードが出たらFPGAを疑うといいよ。

| キーワード | FPGAとの関係 |
|---|---|
| 製造後に変更できる | FPGAの大きな特徴 |
| 回路を書き換えられる | FPGAの本質 |
| ハードウェアを再構成 | FPGAらしい表現 |
| HDLで設計 | VerilogやVHDLが関係 |
| ASICの試作 | FPGAがよく使われる |
| 並列処理・低遅延 | FPGAの得意分野 |

「製造後に回路を書き換えられる」が一番のキーワードだね。

そう。
FPGAはそこを押さえればかなり理解しやすい。
よくある誤解
誤解1:FPGAは普通のソフトウェアを動かすもの

FPGAって、プログラムを書いて動かすんでしょ?
じゃあCPUと同じじゃないの?

そこが誤解しやすい。
FPGAでは「プログラムする」と言うことがあるけど、CPUに命令を実行させるのとは違う。

何が違うの?


CPUは命令を実行する。
FPGAは回路を構成する。
っていう点で違うよ。

プログラムって言葉が出ても、意味が違うんだね。

CPU:ソフトウェアの命令を実行する
FPGA:ハードウェアの回路を構成する
と分けて考えるとわかりやすいよ。
誤解2:FPGAは必ずCPUより速い

FPGAってCPUより速いの?
並列処理するってことは速くなりそうなイメージなんだけど。

処理によるね。
並列化しやすい処理や、決まった処理を低遅延で返したい場合は強い。
でも、何でもFPGAにすれば速いわけじゃない。


普通の処理ならCPUの方が楽なこともある?

かなりある。
FPGAは設計コストも高いから、使いどころが大事。
まとめ

FPGAとは、
製造後でも内部の回路構成を書き換えられる半導体チップのこと。

| 項目 | 内容 |
|---|---|
| 正式名称 | Field Programmable Gate Array |
| 何ができる? | あとから回路を書き換えられる |
| CPUとの違い | CPUは命令を実行、FPGAは回路を構成 |
| ASICとの違い | ASICは専用固定、FPGAはあとから変更可能 |
| 得意なこと | 並列処理、低遅延、専用処理、試作 |
| 苦手なこと | 設計の難しさ、コスト、電力効率面で不利な場合 |

つまりFPGAは、
「あとから中の回路を作り替えられる、レゴみたいな半導体」なんだね。

その通り。
一言でまとめるなら、
FPGAは、作ったあとでも用途に合わせて回路を組み替えられるチップ
だね。

