FPGAってなんだろう?
はじめに
会社でFPGAの業務についてから半年ほど。はじめの頃は、CPUとの違いもわからなかったけれども、ようやく理解が進んできたようなきがする。
まだまだ未熟で曖昧模糊としているため、FPGAについて基本的なことをわかりやすくまとめようと思う。
FPGAとは
FPGA (Field Programable Logic Array) は、その名のとおり論理回路をプログラムできるデバイス。
基本的には、Verilogなどのハードウェア記述言語(Hardware Description Language)で論理回路を記述することで、FPGAの動作を規定することができる。
そうすると、C言語とかで制御を記述するマイコンとかと何がちがうんじゃと思う。
CPU、ASIC、FPGAの違いをまとめると、表のようになる。
こうやっとみると、FPGAはASICとCPUの中間的な存在だとわかる。
FPGAとASICの比較をしてみると、ASICのほうが優れているように見える。
けれども、ASICの開発コストは非常に大きく、噂によると一つのチップで30億かかるらしい[1]。
FPGAの良さは、プログラム可能であり、なおかつ論理回路の実装をすることができるということだろう。
回路の自由度と開発コストはトレードオフとなっており、自分ですべての回路設計すれば当然開発コストも大きくなる。
| 項目 | FPGA | CPU | ASIC |
|---|---|---|---|
| 概要 | プログラム可能な論理回路 | 汎用の処理装置 | 特定用途むけの回路 |
| 動作クロック | 低(数百MHz~1GHz程度) | 高(数GHz程度) | 中~高(設計と性能目標による) |
| 消費電力 | 中(設計にもよる) | 大 | 小 |
| 得意な処理 | 並列処理、タイミング | 逐次処理、複雑な処理 | 並列処理、特定用途 |
| 開発コスト | 中 | 低 | 高 |
FPGAの仕組み
論理回路は、大まかに組み合わせ回路と順序回路に区分される。
-
組み合わせ回路 :
入力によって出力が決まる。入力によって瞬時に出力が決定する。 -
順序回路 :
記憶素子と入力によって出力が決定される。レジスタの状態値と入力によって、出力が変化する。
この論理回路をFPGAはLogic Elementをタイル状にたくさん配置し、配線をスイッチングすることによって、実現している。
ベンダーによって構成は異なったりするが、基本的には図のような構成になっている。
-
LUT (Lookup table):
組み合わせ回路を実現するためのブロック。後に詳細に説明。 -
Register :
記憶素子。基本的にはDelay - Flip - Flopが用いられている。 -
Mux (マルチプレクサ) :
配線の経路をスイッチングする。この例では、組み合わせ回路と順序回路の選択をしている。

Logic Elementの構成例のイメージ
LUT
LUTはメモリとセレクタによって構成されており、メモリの値を変更することによって、柔軟にロジックを変更することができる。
図はAND回路の例になる。
メモリの値を変更すれば、ORもXORでも実装できる。

LUTの内部構成(AND)
AND回路の真理値表
| in_0 | in_1 | out |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
ちなみに、verilogで書くとこうなる。
assign out = in_0 & in_1;
FPGAの内部構成
FPGAはLUTやFF以外にも、PLLなどを搭載している。
- PLL
- DSP
- ブロックRAM
FPGAの歴史
PLD(Programable Logic Device)が登場する以前では、論理素子がパッケージ化されたICを組み合わせて論理回路を設計していたらしい。
1975年に、Signetics社(現NXP Semicomductor社)がプログラマブルなFPLAを発表し、1978年にMMI(現Lattice社)がPALを発表した。PALは広く普及したらしい。
1985年に、xilinx社の創業者であるロス・フリーマンとベルナルド・フォンデルシュミットが、最初のFPGAであるXC2064を発明した。
現在では、AMDがxilinxを買収し、FPGA業界のトップに立っている。
FPGAベンダー
主なFPGAベンダーは以下になる。(もれていたらすみません)
- AMD (旧Xilinx) : 覇王のイメージ。大規模なFPGAを提供。SoC FPGAも提供。
- Intel (旧Altera) : Xilinxと同様に大規模なFPGAを提供。
- Lattice : 低消費電力・小型FPGAを提供。
- Microchip (旧Microsemi) : 産業用FPGAを提供。
- Gowin : 低価格FPGAを提供。謎の中国企業。
- Efinix : 低消費電力FPGAを提供。
参考

Discussion