FPGAは、端的に言えばSRAMと配線の塊と言っても間違いではない。SRAMとはランダムアクセス可能なメモリーの一種で、記憶保持のための動作を必要としない点が特徴だ。なぜ、SRAMを使って回路が作れるのか、といったFPGAの本質的な話を今回は解説する。

論理回路を組み合わせて作る

 そもそもデジタル回路は論理回路をベースに実装されている。論理回路はNOT、AND、ORという基本的な回路があり、これを組み合わせるとNAND(NOT+AND)、NOR(NOT+OR)、XORといった回路も作れる。さらにこれらを組み合わせることで、エンコーダ、デコーダ、加算器、乗算器、シフター、ラッチなどと様々な回路が作れる。こうして、プロセッサやアクセラレーターといったより複雑な回路を構築していくことになる。

 論理回路と対になるのが、真理値表である。下に、簡単な例としてNOTとANDの回路記号とその真理値表をまとめた。要するに入力(A・B)の組み合わせで出力(Y)が表の形で規定できることになる。

図1●NOTとANDの回路記号と真理値表
図1●NOTとANDの回路記号と真理値表
[画像のクリックで拡大表示]

 これはもっと複雑な回路でも同じことだ。下は2ビットの加算器を構成した例だ。2ビットの入力(A0・A1とB0・B1)を加算した結果が3ビットのY(Y0・Y1・Y2)として出力される。真理値表は入力と出力をまとめたものだ。

図2●2ビットの加算器とその真理値表
図2●2ビットの加算器とその真理値表
[画像のクリックで拡大表示]

 ここで「入力を真理値表と照らし合わせて出力すれば、論理回路組む必要はないのでは?」というアイデアが出てくるだろう。最初にこれを実装したのは「PLD(Programmable Logic Device)」で、当初は「PAL(Programmable Array Logic)」や「GAL(Generic Array Logic)」といった商品名で提供されていた。これは真理値表を電気的なヒューズを使って配列の形で格納しておき、入力があったらその配列を参照し、結果を出力するという仕組みである。

図3●真理値表をテーブルとして保持しておき、論理回路を組まずに値を出力する仕組みの概要。
図3●真理値表をテーブルとして保持しておき、論理回路を組まずに値を出力する仕組みの概要。
[画像のクリックで拡大表示]

 例えば図2の回路であれば、入力が4ビットなのでテーブルの行数は16行、出力は3ビットなので合計48ビット分のテーブルを用意すれば回路を実現できることになる。PALやGALといった製品は1990年代には広く利用されていた。例えば「22V10」というGALは入力・出力共に10ビットで、22ピンのDIPパッケージで提供されており、うまく使うとこれ一つでCMOSのロジックIC換算で5~6個分の回路を詰め込めた。