FPGA講座③ FPGA設計の手順

設計フローチャート

図1 FPGAの設計フローチャート(※1)

図1にFPGAの設計フローチャートが記されています。FPGAの設計は、コーディング、フィッティング、コンフィグレーションに分類されます。仕様設計の後に、ソースコードを記述します。この作業をコーディングといいます。Verilog HDLやVHDLなどのハードウェア記述言語を使用してプログラミングします。メモリやカウンタなどは、開発ツールで用意されているIPを使用して実現することがあります。その他にはアームのCortexなどのプロセッサが内蔵されたFPGAの場合は、C言語でプログラミングすることがあります。
ソースコードの記述が完了した時点で、シミュレータを活用してRTLシミュレーションを実施します。その後、開発ツールで論理合成を行い、ネットリストを作成します。論理合成でエラーが発生しなければ、次にフィッティングの作業になります。フィッティングは、論理合成と同じく開発ツールでレイアウト作業を行います。レイアウト作業でタイミング検証を実施し、タイミングエラーが発生したときはレポートで報告されます。このときのアウトプットとしてコンフィグレーションデータが生成されます。このコンフィグレーションデータをFPGAへダウンロードするには、パソコンからダウンロードケーブル経由でダウンロードします。この時点で実機検証を行うことができます。

仕様設計

図2 仕様設計の方法

要求仕様を実現するための仕様設計の方法として、フローチャート、状態遷移図、タイミングチャート、回路図などがあります。この中では、私はタイミングチャートで設計することが多いです。ここで重要なのは、第三者に分かるような設計資料を作成することです。Verilog HDLやVHDLなどで記述したソースコードは非常に理解しづらいです。そのため、この仕様設計で作成する資料は、大変重要になってきます。

コーディング(HDL記述)

図3 アップダウンカウンタのブロック図

Verilog HDLやVHDLなどでソースコードを記述する際のコーディングの手順として、最初にFPGAの入出力端子の設定を行います。つまり、先程の仕様設計を実現するために、FPGAへ入力する信号またはFPGAから出力する信号を決定します。
次に決定した入出力信号を使用して、図3のようなブロック図を作成します。図3はアップダウンカウンタのブロック図になります。この図3のように実現する論理を個々のブロックに分けます。この時点で、個々のブロックで実現する論理は大体想像しておく必要があります。
次に個々のブロック間で入出力する信号を設定します。以上の作業を完了した時点でコーディング作業を行うことができます。コーディング作業が完了したときに、個々のブロックでシミュレーションを実施し、最終的には全体でシミュレーションを実施します。コーディング作業はトップから順番に設計していくのに対して、シミュレーション作業はボトムから順番にシミュレーションしていきます。

【参考文献】(※1)FPGAの原理と構成 110ページ オーム社(2016年)