ModelSim/QuestaSim コードカバレッジのすすめ

ModelSim/QuestaSimではコードカバレッジが標準機能として装備され、追加費用なしで使用することができます。
今回はその使い方を説明します。
本ブログの内容はModelSim DE/PE/SEやQuestaSim、また、Questa Intel FPGA Edition、Questa Intel FPGA Starter Editionなどでもご利用いただけます。
ModelSim簡易チュートリアル【コードカバレッジ編】
の詳細を見る
目次
コードカバレッジとは
コードカバレッジとは記述したRTLがどの程度テストされているかの確認する指標の一つで、テスト品質、テスト網羅度を評価する非常に便利な機能です。もともとはソフトウエアの検証手法でしたが、それをハード設計(RTL)に適用したものです。各ステートメントや条件分岐の実行された行を計測し、コード量を分母、実行されたコードを分子として計測し、パーセンテージでレポートします。
ModelSim/QuestaSimではコンパイル、シミュレーション実行時に簡単なオプション指定を行うだけで、誰でも容易に実行可能です。
コードカバレッジ収集のオプション指定
コードカバレッジを計測する場合、最初にコードカバレッジ種目をコンパイル時に設定します。
ModelSim/QuestaSimで扱うコードカバレッジ種目は以下となります。
(S)ステートメント | 各ステートメントが何回実行されたかを計測 |
---|---|
(B)ブランチ | 判定式のTrue/Falseが何回実行されたかを計測 |
(C)コンディション | ブランチをより細かく各変数に着目し式をTrue/Falseにした回数を計測 |
(E)エクスプレション | コンディションの考え方を代入式に適用したもの |
(F)ステート | FSMの各ステートの到達回数を計測 |
(F)トランジッション | FSMの遷移条件が実行された回数を計測 |
(T)トグル | 1→0、0→1の両トランジションの発生回数を計測 |
RTLコンパイル時に上記のコードカバレッジ種目の中で何を計測するのか指定を行います。
例えば、ステートカバレッジを計測したい場合にはSを指定します。
バッチ実行の場合
ステートメントカバレッジのみを計測する場合には以下のように +cover= で s を指定します。
vlog +cover=s dut1.v dut2.v dut_top.v
vcom +cover=s dut1.vhd dut2.vhd dut_top.vhd
複数のカバレッジを指定する場合は sbe のように指定します。
vlog +cover=sbe dut1.v dut2.v dut_top.v
(ステートメント+ブランチ+エクスプレションの指定例)
GUI実行の場合
GUIのメインメニューからcompile > compile optionsを指定し表示メニューのCoverageタブをクリックし、計測を行うコードカバレッジ種目を設定します。
シミュレーション実行時のオプション指定
RTLコンパイル時に指定されたコードカバレッジ種目をシミュレーション中に計測する場合は、シミュレーション実行時にコードカバレッジをONにする指定を行います。このオプションを指定しないとコードカバレッジ計測は行われません。
バッチ実行の場合
vsimコマンドオプションの -coverage を指定して実行することでコードカバレッジ計測をONにできます。
vsim -c tb_top -coverage ……
GUI実行の場合
GUIのメインメニューからSimulate > Start Simulationを選択し表示メニューのOthersタブをクリックし、Enable code coverageをONに設定します。
設定後、シミュレーションを実行しコードカバレッジ計測を行います。
![]() |
弊社とご契約中のお客様はウェビナー「ModelSimウェビナー コードカバレッジ編」にご参加いただくことで、より詳細に学習できます。 |
ウェビナー情報につきましては、定期的にメール配信を行っています。ご登録がお済みでない方は以下のページからお申込みください。定期的にウェビナースケジュールをお送りさせていただきます!
カバレッジデータベースの保存
コンパイル、シミュレーションで各オプションを指定後、シミュレーションを実行したらカバレッジデータベースを保存します。
バッチ実行の場合
coverage save -onexitコマンド でシミュレーション終了時に指定されたファイル名(以下の例ではtest1.ucdb)で保存します。
vsim -c tb_top -coverage -do “coverage save -onexit test1.ucdb; ……”
GUI実行の場合
シミュレーション終了後、GUIメインメニューからTools > Coverage Save を選択し、表示メニューでカバレッジデータベース名を指定しOKを押します。
カバレッジレポート生成
コードカバレッジデータベース保存後、TranscritウインドやDOSコマンドプロンプトからカバレッジレポート生成を行います。vcover reportコマンドはオプションが多数あるため、詳細はコマンドヘルプやユーザガイドを参照ください。
- <サマリレポート>
左右にスクロールしてご覧ください
vcover report **.ucdb -summary –output myreport.txt
- <詳細レポート>
左右にスクロールしてご覧ください
vcover report **.ucdb –details -output myreport.txt
- <インスタンス毎の詳細レポート>
左右にスクロールしてご覧ください
vcover report **.ucdb -details -byinstance -output myreport.txt
- <特定インスタンスに対する詳細レポート>
左右にスクロールしてご覧ください
vcover report **.ucdb -details –instance=/top/p –output myinst_rep.txt
- <ゼロカバレッジ(未カバー)アイテムをソースコード抜粋付きでレポート>
左右にスクロールしてご覧ください
vcover report **.ucdb -zeros –annotate –details -output myzerocov.txt
ModelSim 簡易チュートリアル【コードカバレッジ編】ダウンロード
ModelSim/QuestaSim用コードカバレッジの簡単な実行サンプルを作成しました。以下のページからダウンロードできますのでご活用ください。また、実行サンプルにはGUI上でコードカバレッジ解析を行う説明も記載しております。
ModelSim簡易チュートリアル【コードカバレッジ編】
の詳細を見る
まとめ
ModelSim/Questa Simのコードカバレッジは標準機能を使うことで、追加費用なしに簡単にコードカバレッジ計測ができます。実行したテストがどの程度RTLコードを実行したか、テストで実行されなかったRTLコードはどの程度あったかなど簡単に把握できます。テスト品質の確認やテスト漏れを把握でき品質向上にお役立ていただける機能ですので是非ご活用ください。
最後までご覧いただきありがとうございました。