FPGA
最も一般的なHDLとしてはVHDLとVerilogがあるが、これらは通常のプログラミング言語で言えば抽象度がC言語を少し下回る程度であり、手間がかかる。そこでもっと高い抽象度でハードウェア設計を行う言語を導入する動きもある。
FPGAにおける複雑なシステムの設計を単純化するため、検証・最適化済みの既存の機能ブロックや回路をライブラリ化して利用する。このような既存の回路をIPコアと呼び、FPGAベンダーやサードパーティのIP業者から購入できる(一般に無償ではない)。他にもOpenCoresといった開発者コミュニティなどでフリーなものが入手できる。
FPGAアプリケーションを開発する場合、設計の各段階でシミュレーションによる検証を行う。まずVHDLやVerilogのRTL記述でシミュレーションを行う。次に論理合成によって出力されたネットリスト、ネットリストを変換したゲートレベル記述でもシミュレーションによる検証を行う。そこからさらにFPGA向けに配置を決定すると配線による遅延が加わるため、再度シミュレーションによる検証が必要になる。
FPGAの構成設定は一般にハードウェア記述言語 (HDL) を使って指定し、その点はASICに近い。FPGAはASICで実装できる任意の論理機能を実装できる。出荷後に機能を更新でき、設計面で部分的に再構成でき、ASIC設計よりエンジニアリングコストが低い点などが多くの用途で利点となる。
FPGAに含まれるプログラム可能な論理コンポーネントを「論理ブロック」などと呼び、それら論理ブロック間を相互接続する再構成可能な配線階層がある。この構成によっていわばワンチップのプログラム可能なブレッドボードの役目を果たす。論理ブロックを組み合わせて複雑な論理回路を構成することもできるし、単にANDゲートやXORゲートのような単純な論理回路を構成することもできる。多くのFPGAでは、論理ブロックにメモリ要素も含んでおり、単純なフリップフロップまたはより完全なメモリブロックで構成されている。
一般にFPGAの配線は分割されていない。すなわち、配線セグメントは論理ブロック1つぶんをまたぐ長さで縦の配線と横の配線が交差するスイッチボックスとスイッチボックスの間を走っている。そして、スイッチボックス内のプログラム可能なスイッチをオンにすることでさらに配線が続くことになり、そのようにして長い配線を構築する。高速化のために複数の論理ブロックをまたぐような長い配線を最初から用意しているFPGAアーキテクチャもある。
垂直な配線と水平な配線が交差する箇所にスイッチボックスがある。下の図では、水平と垂直にそれぞれ3本の線があり、その交点3カ所にプログラム可能なスイッチ群がある。交点すべてにスイッチを配するとコストがかかり遅延も大きくなるため、このように斜めの交点にだけスイッチを配するのが一般的である。どの交点にスイッチを配するかはいくつか方式がある。1つの交点には6つのプログラム可能なスイッチがある。
最近のFPGAはこれにさらに高機能な論理ブロックを加えるなどしている。高機能ブロックを埋め込むことで、一からその機能を構成するよりも必要な面積を削減でき、かつ性能が向上する。例えば、乗算器、汎用DSPブロック、汎用CPUコア、高速I/Oロジック、メモリなどが埋め込まれたFPGAがある。