pp.367-369
14.8 assert文とreport文と
(略)。アサーションは(略)シミュレーション(第18章)に特に便利な機能です。(略)。
assert文
[ラベル: ] assert 条件 [report メッセージ] [severity レベル];
上の文が実行されると、アサーションに違反したとき(すなわちアサーション条件がfalse
のとき)にレポートが生成されます(レポートが画面に表示されます)。(略)。
severity
レベルには下のようにいくつか種類があります。
note
: 設計に問題のないときにコンパイラー/シミュレーターに何らかの情報を渡す。warning
: モデルには影響しないがモデルの挙動には影響しうる何らかの異常が検出されたことを伝える。たとえば純粋な同時実行コードに不完全な真理値表が記述されているせいで不要なラッチが挿入されるなどの異常。error
: モデルに影響する深刻な異常が見つかったことを伝える。failure
: 設計のバグなど。
デフォルトはerror
です。場合によってはユーザーが停止条件を選べることもありますが、基本的にerror
ではコンパイルもシミュレーションも中断されません。合成の場合はerror
とfailure
とを区別しないのが一般的であり、どちらの場合もコンパイルは停止します。
下の例(シミュレーション)はaddress
が許容範囲内にあるかどうかをチェックするコードです。許容範囲内にない場合はUnexpected address value.
というメッセージが発行されてシミュレーションが中断されます。
assert address < 2**ADDRESS_WIDTH report "Unexpected address value." severity failure;
report
句を省略した場合は下のようにデフォルトのメッセージ(Assertion violation
など)が画面に表示されます。
asser address < 2**ADDRESS_WIDTH severity failure; -- Reported message: "Assertion violation"
合成の場合のアサーションの例を下に示します。(略)。
assert bin'length=12 report "Error: input length is not 12." severity failure;
report文
場合によっては無条件にレポートを表示したいことがあります。その場合は下の例のようにアサーション条件をfalse
にしておけばよい。
assert false report "Test was successful." severity note;
ただしseverity
レベルのデフォルトはnote
であるため、上の例のようにするよりも下のようにreport
文を直接使ったほうが簡単です。
report メッセージ;
具体的には下のようにします。
report "Test was successful.";
to_string函数
(略)