FPGA開発とは
FPGA開発とは、FPGAをカスタム設計して、求める機能を持つICを開発することです。
FPGAとは、「Field Programmable Gate Array」の略で、開発現場で機能をフログラムできる集積回路のことです。FPGAの中には、演算器、メモリ、レジスタ、簡単な論理回路などの回路が多数配列されています。
何も手を加えなければ、何の機能も持たない回路の配列にすぎませんが、内部の回路を組み合わせ、論理回路を設計することによって、開発者が求める機能を自由に持たせることができます。
FPGA同様にユーザーの希望をカスタマイズできるASIC (Application Specific Integrated Circuit) がありますが、これはカスタム機能を設計してからICを製造するものです。設計・開発に時間がかかるうえ、一度製品になった後は現場で自由に機能を変えることはできません。
FPGA開発の使用用途
FPGA開発は、ICを含む電子機器や基板の開発に欠かせません。通信、車載、医療機器、民生機器、その他あらゆる分野の電子機器開発の現場で、FPGA開発を行っています。
FPGAに必要な機能をプログラムし、実際に電子機器に載せて実機検証を行い、その結果をフィードバックできることは、FPGA開発にメリットがあります。ASIC設計に比べると開発時間が短いため、やり直しやチューンナップも容易です。
また、ASICに比べると生産コストが高いというデメリットがあり、開発段階ではFPGAを使い、設計が確定後、最終製品にはASICを載せるという傾向にありました。しかし、最近では半導体製造技術の向上によりFPGAの高集積化、低コスト化が進み、最終製品にFPGAを使う事例も増えています。
FPGA開発の原理
FPGA開発のフローは、基本的にASICなど他のIC開発と同じです。ASIC開発では試作工程を製造部門が担当するのに対し、FPGA開発ではASICの試作に相当する実チップへプログラムを実装する工程も、FPGA開発者が行うことが特徴です。
FPGA開発フローには、以下のような工程があります。
1. 仕様決定
FPGAに実装する機能、FPGAを組み込むシステム上の他の部品とのインターフェース、タイミング制約などの「仕様」をまとめ、仕様に見合うFPGAを剪定します。
2. 論理回路設計
VHDL、Verilog-HDLなどのハードウェア記述言語を用いて、論理動作を記述します。
3. 機能検証
ファンクション・シミュレーションを実施し、論理回路の動作が正しいことを確認します。
4. コンパイル
HDL記述からFPGA上のゲートで構成される論理式を生成し、さらに論理式を最適化してネットリストを生成します。その後、実際のFPGA上で各回路を配置し、回路間の配線を決めます。この一連の工程をコンパイルと呼びます。
5. タイミング検証
配置・配線情報から、物理的な遅延時間をシミュレーションし、タイミング制約を満足していることを確認します。
6. ダウンロード
生成した回路データをFPGAにダウンロードします。この工程を経て、ゲートの配列にすぎなかったFPGAが、開発者が望む回路へと変わります。
7. FPGA動作検証
FPGAを動作させ、機能の不具合や性能不足がないことを確認します。動作検証には、評価ボードにFPGAをセットし、評価シミュレーションを流す方法と、実際にFPGAをシステムに搭載して動作させる実機検証とがあります。実機検証は検証にかかる時間が短いため、ゲート規模の大きいFPGA向きです。
FPGA開発のその他情報
1. FPGA開発のプログラミング言語
FPGAのコード記述に使用するHDLは低水準言語であるため、従来は回路設計ができるハードウェア技術者でなければ記述が難しいものでした。現在は、統合ソフトウェアプラットフォームを用いることでHDLの知識が無くても別のプログラミング言語でFPGA開発をすることができます。
プラットフォームは高級言語を低級言語に変換することで、FPGAの機能を実現しています。TensorflowやPytorchのフレームワークで作成された学習済みのディープラーニングモデルを使用してFPGAの高速化を実現することも可能です。
2. ハードウェア効率化
ASICなどのデバイスではプログラムとメモリ間をジャンプする方式であり、データの格納や取得に電力を使用したり、リアルタイム性の低下が見られていました。FPGAではプログラムとメモリ間のジャンプの必要性は無く、効率的なデータ格納と取得が可能です。また、電力の消費が大きいタスクをオフロードすることも可能です。FPGAは簡単にハードウェアの効率化を実現できます。
参考文献
http://www.ieice-hbkb.org/files/10/10gun_01hen_03.pdf
https://www.cqpub.co.jp/dwm/Contents/0038/dwm003800970.pdf
https://japan.xilinx.com/japan/fpga-koza/chapter01.html