コードカバレッジによる
検証指標の策定と網羅性の計測

コードカバレッジとは

カバレッジとは、シミュレーションの際に用いられる検証の進捗と完全性を測る指標になります。コードカバレッジはその最も代表的なカバレッジで、ソースコード上の活性化をチェックし、網羅性を計測することができます。

利点

コードカバレッジを使用することで、テストした結果、どの程度活性化できたかを知る指標となります。十分な活性化ができていなければ潜在的なバグが残る可能性が高くなります。コードカバレッジを使用することで、活性化できていない箇所を把握し、それをテストするスティミュラスを考慮できます。また網羅性を測る指標を以ってテストが十分であるかが判断可能です。
コードカバレッジは、現行の検証手法を変更することなく、容易にシミュレーションフローに統合できます。

コードカバレッジの種類

ステートメントカバレッジ
ソースコード上のどのステートメントが実行されたかを計測します。複数のステートメントが1行に記述されていた場合でも、別々のステートメントとして認識し、計測されます。

ブランチカバレッジ
if文やcase文などのブール演算子の真偽を評価します。if文であれば真、偽のそれぞれの評価回数、case文であれば、分岐条件の選択割合や選択肢がレポートされます。

コンディションカバレッジ
if文または三項演算内の変数と条件の組み合わせを解析し、条件式中の変数の組み合わせを網羅して実行されているかを評価します。

エクスプレッションカバレッジ
コンカレントアサインメント内の変数の組み合わせを解析し、代入式右辺の変数の組み合わせを網羅して実行されているかを評価します。

トグルカバレッジ
信号値が 0 ⇔ 1 の変化を評価(活性化する回数を集計)します。Verilogであればnet、register、VHDLであればbit、bit_vector、std_logic、std_logic_vector が対象になります。
また、0 ⇔ 1 の変化に加えて、0 → Z / 1 → Z の遷移も考慮した観測も可能です。

FSMカバレッジ
ステートマシンを自動で認識し、各ステートとステート間の各トランジションが実行されたかどうかを評価します。

カバレッジレポート

コードカバレッジの結果は、各インスタンスで実行された回数やパーセンテージなどが様々な形式でレポートされます。 レポートにより、網羅性を確認でき、新たなスティミュラス作成のヒントになります。

インスタンス カバレッジ
インスタンス毎に各カバレッジ結果が表示されます。どのインスタンスが十分に検証されていないかを容易に判断できます。

コードカバレッジ アナリシス
ファイル内のカバレッジ対象がリストされます。右上の"Statement"を押すことで"Branch"や"Expression"などの別のカバレッジリストへ変更可能です。

カバレッジ ディテール
カバレッジアナリシスで選択したカバレッジの詳細が表示されます。実行されたヒット数からヒットしなかった条件などが判断できます。

使用方法

コードカバレッジは、コンパイルとシミュレーション時にオプションを加えることで使用できます。

コマンドによる実行

(オプティマイズありの場合)
% vlog/vcom +cover=<カバレッジの種類> <ファイル名>
% vopt <デザインユニット名> -o <デザイン名(任意です)>
% vsim -coverage <デザイン名>

(オプティマイズなしの場合)
% vlog/vcom +cover=<カバレッジの種類> <ファイル名>
% vsim -coverage <デザインユニット名>

※上記の<カバレッジの種類>には、使用する以下のキーワードを指定します。
s --- ステートメントカバレッジ
b --- ブランチカバレッジ
c --- コンディションカバレッジ
e --- エクスプレッションカバレッジ
x --- トグルカバレッジ
f --- FSMカバレッジ

例) % vlog +cover=sbc sample.v
   % vsim -coverage sample

GUIによる実行

GUI上からコードカバレッジを設定する場合は、以下のメニューから設定できます。

Compile > Compile Options...

Coverageタブを選択します。

※一度設定したオプションは、次回以降も有効になります。

まとめ

コードカバレッジは、現行環境に容易に適用できること、検証の指標を持つことができること、パフォーマンスへの影響がほとんどないことから多くのユーザーに採用されています。

運用例)
 各カバレッジのカバー率に目標値を定め、それを達成することを検証完了の要件の1つとします。
 ・ステートメントカバレッジのカバー率は100%
 ・トグルカバレッジは90%
 ・上記以外のカバレッジは95%
 ・カバーできていない部分に対してコメントを残す
  (例:○○カバレッジが未達理由は、□□機能のRTL検証を省略したためで
  あり、この機能は実機検証にて実施する 等)

コードカバレッジを使用し指標を定めることは、検証の網羅性を証明することになり、また検証の目標を定めることになります。

関連製品

ModelSim 論理Sim/検証統合デバッグ環境
QuestaSim 高機能検証プラットフォーム

 


お問い合わせ

資料請求・お問い合わせ