FPGAの開発フロー [前編]


FPGAを作動させるためのコンフィギュレーションデータはどのように開発すればよいのでしょうか?
今回から2回に渡り、FPGA開発フローの各ステップについて説明します。
はじめに
FPGAのコンフィグレーションデータを開発するためには、専用の開発ソフトウェアを用意する必要があります。FPGAメーカー各社は独自の開発ソフトウェアを用意しています。
あるメーカーの開発ソフトウェアを使用して生成したコンフィギュレーションデータは、他のFPGAメーカーの製品には使うことはできません。同じメーカーであっても、FPGAのファミリー・型名が異なるとコンフィギュレーションすることはできません。開発の際には、使用するFPGAメーカー・FPGAファミリー・パッケージ形状を含む型名を決めておく必要があります。
FPGA開発ソフトウェアは、各FPGAメーカーのホームページから入手可能です。また、開発ソフトウェアを使用するにはライセンスが必要であることがほとんどで、開発するFPGAによって無償ライセンス・有償ライセンスが分かれている場合があります。
開発ソフトウェア入手とライセンスについては、各FPGAメーカーのホームページをご確認ください。
FPGAの開発フロー
図1に一般的なFPGAの開発フローを示します。
今回は“回路設計(デザインエントリ)”から“デザイン制約作成”までの各ステップを見ていきましょう。
図1. 一般的なFPGAの開発フロー
回路設計(デザインエントリ)
設計者はハードウェア記述言語 (Hardware Description Language:HDL) などを用いて、実現したい機能・回路を設計します。ハードウェア記述言語には、VHDL、Verilog-HDL、SystemVerilog などの種類があります(詳細は省略します)。
ここで、簡単な例として、Verilog-HDL を使用した AND論理(図2)とフリップフロップ(図3)の記述方法を紹介します。


これらの回路記述は、FPGA開発ソフトウェア上のテキストエディタや、汎用のテキストエディタを使用することができます。下記のように、FPGA開発ソフトウェアはファイル拡張子によってこれらの言語を認識することができます。
- Verilog-HDLの場合:xxxx.v
- VHDL の場合:xxxx.vhd
機能(ファンクション)シミュレーション
設計した回路が論理的に意図したように動くかどうかを確認するステップで、論理シミュレーションとも言います。
シミュレーションの実行にはシミュレータ・ソフトウェアを使用します。シミュレータ・ソフトウェアは通常、FPGAメーカーの開発ソフトウェアに付随しているものを使用することができますが、性能に制限を持つことがありますので、別途、EDAメーカーが提供しているシミュレータ・ソフトウェアを使用することもあります。
例えば AND をシミュレーションすると、入力A と 入力B が “1” のとき、出力C は “1” になり、それ以外の入力の場合は “0” となることを波形で確認することができます(図4)。
図4. AND論理のシミュレーション結果例
ここで、設計者は入力 A と B にどんな波形を入力するかを決めておく必要がありますが、その入力もまた各ハードウェア記述言語で記述することができます。これをテストベンチといい(詳細は割愛)、FPGAで実現したい回路情報とあわせてシミュレータ・ソフトウェアに読み込ませ実行します。
シミュレーションの結果、意図とは異なる動きをしていれば、回路記述を変更し、意図した動作が確認できれば、次のステップに移行します。
論理合成
論理合成では、文字通り論理を合成・圧縮したり、そのオプション設定によって様々な最適化を実行します。例えば、論理圧縮の原理の例として、X=(A+B)・(A+C)+C・(A+B) はブール代数を用いることで X= A+C のように簡略化することができます。
なんだか難しそうですが、心配する必要はありません。各開発ソフトウェアには論理合成を行うためのソフトウェアも含まれており、論理合成のオプションを指定することで自動で実行されます(どのようなオプションがあるかは、論理合成ソフトウェアのユーザーガイドを参照してください)。
論理合成の結果、ハードウェア記述言語で設計された回路は、できるだけ簡単な論理やフリップフロップに変換され、使用するFPGAのロジックブロック等の最小単位まで落とし込まれます。例えば図5のように、AND論理はFPGAのロジックブロックに含まれるLUTに実装されます。
図5. AND論理のLUTへの実装イメージ
デザイン制約作成
デザイン制約にはタイミング制約と物理制約の2つの種類があります。
- タイミング制約
設計者は、設計した回路をどれくらいのクロック周波数で動作させるのか規定しなければいけません。
また、入力信号のタイミング、出力信号のタイミング等、接続先のデバイスの都合も考慮しておく必要があります。これらを考慮していないと、周囲温度、電圧変動やプロセスのバラツキによって動作したりしなかったりすることがあります。ですので、FPGAに入力するクロック周波数が何MHzなのか、入出力信号がクロックの有効エッジに対してどれくらいの遅延が必要なのか等の制約を付けておく必要があります。
タイミング制約はASICの開発でも使用される SDC (Synopsys Design Constraint) 記述を使用することが多いのですが、FPGA開発ソフトウェアには自動的にSDCファイルを生成してくれるGUIも用意されています。次のステップの配置配線では、この制約に従って配置と配線を実行します。
- 物理制約
文字通り物理的な制約であり、具体的には入出力信号をどのピンに割り当てるかを指定します(ピン配置、ピンアサインとも言います)。
設計者は、使用するFPGAのパッケージ・ピン配置表を参照しながら、設計した回路の入出力信号をどのピンに配置するかを決めます。
ここで、FPGAには「クロック入力にはこのピンを使用する」、「DDRインターフェイスにはこのピンを使用する」、「LVDS等の差動信号のペアはこのピンを使用する」等、使用するFPGAのパッケージ毎にルールがありますので、ユーザーガイド等で十分に確認を行った上でピン配置を決定します。通常、FPGA開発ソフトウェアでは論理合成が完了すると、デザインで使用される入出力信号が認識され、GUIを使用してピン番号の指定・各種属性を指定することができます。
まとめ
今回はFPGAの開発フローのうち、“回路設計(デザインエントリ)” から ”デザイン制約作成” まで説明しました。後編では “配置配線” から ”実機動作検証” までの各ステップを説明します。