1.FPGA開発フロー

下図は、Alteraを例にしたFPGA開発フローです。



1)RTL記述
 最初のステップは、RTL記述です。テストベンチと論理合成対象とは、Moduleで分けて記述します。使い慣れたテキストエディタで記述していきます。

2)RTLシミュレーション
 記述が完了したらシミュレーション..と説明されることが多いですが、筆者の場合は、シミュレーションしながら文法エラーを取ります。また、Waveformviewerで動きを確認しながら記述することの方が多いです。

3)論理合成
 対象Moduleを指定してQuartusで論理合成します。

4)レイアウト
 Quartusの担当です。

5)ポストレイアウト遅延シミュレーション
 Qualtasのコンパイルが完了するとVerilogのソースファイル(論理合成したVerilogソース、拡張子vo)とSDFファイル(遅延データファイル、拡張子sdo)を出力します。voファイルは、RTLを論理合成したファイルです。ここで、VeritakプロジェクトをRTLプロジェクトとは別に作成して、論理合成対象RTLファイルをvoファイルに置き換えます。このプロジェクトでポストレイアウト遅延シミュレーション(ゲートレベル)を行うことができます。論語合成対象のRTL記述は、ゲートレベルのネットリスト(Verilog形式)になり、ゲートレベルの配置配線後でのシミュレーションを行うことができます。このとき、RTL記述でのテストベンチがそのまま使用できるところがミソです。テストベンチはなんら変更が必要ありません。HDLによるトップダウン設計の最大の利点はここにあります。

SDFファイルを読み込む前の遅延なしのゲートレベルシミュレーションでもRTLシミュレーションの速度に比べ相当遅くなるはずです。さらに、遅延ファイルを読み込むと10倍以上シミュレーション速度は低下してしまいます。従いCPUの命令シミュレーション等(たとえば、オープンコアでのリードソロモンベンチマークテスト)を遅延シミュレーションで行うのは、PCのCPUとメモリ負荷に対し相当の覚悟が要ります。また、論理合成した結果、最大駆動周波数は、合成ソフトウェアはxxMHzと出力してくれます。その意味で、最大駆動周波数で動くかどうか見るための遅延シミュレーションは必要ありません。ではどのようなときに必要になるのでしょうか?

遅延シミュレーションを行うのは、H/W化する前に問題の有無を確認するためです。ASICのサインオフとは違い、FPGAならば、時間のかかる遅延シミュレーションを行なわなくてもH/Wに落として確認した方が速い場合もあるでしょう。
 或いは、ボードを作ってから動かない場合、遅延シミュレーションで動作確認済みであれば、純ハード的な(GND,ノイズ)問題なのか、そうでないかの切り分けも容易でしょう。RTL記述だけでは動く保証はありませんが、遅延シミュレーションを行って動いていれば、設計的には、100%近く間違いないという自信を得ることができる、と思います。ハードがなくとも自信が得られるのは結構便利だったりします。
合成ツールが果たして自分の意図通りに合成してくれているかは、遅延シミュレーションを行ってみれば一目瞭然です。