[SystemVerilog][SVA] アサーションの停止・再開

シミュレーション中、アサーション(assert, cover, assume)の開始・停止(有効・無効)をシステムタスクで制御できます。

[table]
システムタスク,説明
$asserton,アサーションの実行を有効化
$assertoff,アサーションを無効化
$assertkill,アサーションを無効化(強制終了)
[/table]

$assertkill$assertoff の違いは、呼び出し時に実行中のアサーション(複数クロックにわたるものなど)を強制終了するか、しないかです。

initial begin
$assertoff;
wait(ev.triggered);
$asserton;
end
view raw

gistfile1.v

hosted with ❤ by GitHub

適用する範囲やアサーションの指定もできます。

$asserton(0, top); // (levels [, list_of_modules_or_assertions])
view raw

gistfile1.v

hosted with ❤ by GitHub

これらのシステムタスクは、利便性のため用意されていて $assertcontrol で細かく制御でき、等価な動作ができます。

[table th=”0″]
$asserton,”$assertcontrol(3, 15, 7)”
$assertoff,”$assertcontrol(4, 15, 7)”
$assertkill,”$assertcontrol(5, 15, 7)”
[/table]

VCS では、アサーションにカテゴリーを設定し、カテゴリー単位で有効・無効もできる模様。キーワードは、$assert_category_start$assert_severity_start など。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク