14.8 assert文とreport文と / 非公式訳

pp.367-369

14.8 assert文とreport文と

(略)。アサーションは(略)シミュレーション(第18章)に特に便利な機能です。(略)。

assert文

[ラベル: ] assert 条件 [report メッセージ] [severity レベル];

上の文が実行されると、アサーションに違反したとき(すなわちアサーション条件がfalseのとき)にレポートが生成されます(レポートが画面に表示されます)。(略)。

severityレベルには下のようにいくつか種類があります。

  • note: 設計に問題のないときにコンパイラー/シミュレーターに何らかの情報を渡す。
  • warning: モデルには影響しないがモデルの挙動には影響しうる何らかの異常が検出されたことを伝える。たとえば純粋な同時実行コードに不完全な真理値表が記述されているせいで不要なラッチが挿入されるなどの異常。
  • error: モデルに影響する深刻な異常が見つかったことを伝える。
  • failure: 設計のバグなど。

デフォルトはerrorです。場合によってはユーザーが停止条件を選べることもありますが、基本的にerrorではコンパイルもシミュレーションも中断されません。合成の場合はerrorfailureとを区別しないのが一般的であり、どちらの場合もコンパイルは停止します。

下の例(シミュレーション)は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函数

(略)