4. シミュレーション記述
4. シミュレーション記述
設計した回路が正しく動作するかの検証の為に実装する前にコンピュータ上でシミュレータを動作させてシミュレーションを行います。
シミュレーションは大別して論理シミュレーションと遅延シミュレーションがあります。論理シミュレーションは回路の動作遅延を考慮せずに(遅延を無限小として)論理動作のみ検証する方法です。遅延シミュレーションは回路の遅延情報用いてシミュレーションする方法です。
ここでは論理シミュレーションのみ説明します。
- 遅延シミュレーション
- FPGA設計をする場合、遅延シミュレーションを行う事は少ないです。
シミュレーションを行う事で動作理解を深める事が出来ますので出来るだけシミュレーションするようにしてください。
たまに、シミュレーションで動くのに実機で動作しないと悩んでいる人が居ますがシミュレーションで動くのは当たり前です。シミュレーション環境を作るのは設計者であり、その環境で動くように設計した回路ですからシミュレータ上では必ず動きます。問題が発生するとき、いわゆるバグは自分が想定していない状況(信号の振る舞い)だから起こるのです。ですから、実機での入力信号を良く知った上でシミュレーションで想定できる限りの様々な条件でテストすることが重要です。
シミュレーションに必要な物
シミュレーションを行うためには設計したVerolog-HDLファイル(DUT)の他に下の物が必要です。
- シミュレータ
- テストベンチ(Verilog-HDLファイル)
シミュレータ
様々なシミュレータが出回っています。例えば、WikipediaでVerilogを検索すると有名なシミュレータが挙げられています。ここではVeritakの使用を前提に話を進めます。
テストベンチ
テストベンチは設計した回路(DUT)を検証するために必要な信号(DUTに与える信号)を生成したり検証を効率よく行うための結果表示などの方法を記述します。
テストベンチは回路へ変換する必要が無いため分かりやすく記述する事、効率よく記述する事を優先して記述します。従って、回路設計では使用しない(できない)記述方法を使用する事が出来ます。
テストベンチ
FPGAの回路をHDLで記述し、その回路をシミュレーションして動作検証する場合を想定してみます。
テストベンチもVerilog-HDLモジュールです。他のモジュールと同様にテキストで記述します。
設計した回路はFPGAの回路でありPCB基板の一部です。基板上には発信器、リセットスイッチ、LEDや外部インターフェイス用コネクタが実装されています。設計した回路を動作させて検証するためには、それらの外部部品の動作を模して設計した回路に信号を与えなければいけません。同期回路の場合はクロックを与えなければいけませんし、初期状態を確定さえるリセット信号を与える必要があります。実際の動作を模すために信号を発生させるのがテストベンチです。
下にカウンター動作検証の為のテストベンチ例を挙げます。
設計したカウンタは入力として3つの入力:リセット、クロックとクロックイネーブル、を持っています。このカウンター回路をテストする為には先に挙げた3つの入力を与える必要があります。
テストベンチの記述方法に決まった方法はありません。例えば、外部メモリを使用しているので外部メモリを模す回路(モデル)をテストベンチに書かなければいけないかと言うと、必ずしもその必要はありません。もちろん、完璧に動作するモデルが手に入るなら接続して検証する事も良いと思いますが、現実にはモデルも自ら製作する事になります。この事は開発期間、検証時間の増大を意味します。モデル動作の正当性の検証は特に重要です。モデルが間違っていたら検証結果も間違うからです。私達が設計する回路は企業が設計する様な複雑な回路は珍しいです。ですから、モデルをきちんと組み立てるのではなく、設計者が何を検証したいのか、どのように検証すれば動いているとみなす事が出来るのかを良く考え、テストしたい回路の入力を工夫して与える事で検証する事が重要になりまます。要求される開発期間を考慮するとシミュレーションにより完全に検証する事は不可能に近いです。
実際の信号を完全に模す環境を製作する事は開発期間を考慮すると不可能に近く長時間シミュレーションを行う事も難しいです。シミュレーションを行う時に大切な事をはテストベンチを工夫して作製して、最小の努力で出来るだけ大きな検証効果を上げる事が出来るテストベンチを製作することです。自分が設計した回路を十分に理解していればどのような信号が入力された時の動作が不安なのか、想定しない信号が入力された時にどのような動作なになるのか分かっているはずです。設計者が気になる部分を効率よく検証できるテストベンチを記述するようにしてください。
シミュレーション特有の記述
テストベンチはVerilog-HDLモジュールですが、他のモジュールと異なり回路へ変換する必要がありません。従って、回路化することを意識せずに記述することができます。文法で許されている記述をすべて使用する事が出来ます。
次の節から実際の例を挙げて説明します。