次のステートメントの微妙な違いは何ですか
a -> b
対a ##0 b
SVA (SystemVerilog アサーション) で?
次のステートメントの微妙な違いは何ですか
a -> b
対a ##0 b
SVA (SystemVerilog アサーション) で?
最初に確認する必要があるのは、単一の含意演算子の構文ですa |-> b
。
SystemVerilog アサーションには 2 つの式があります。
a ##0 b
a |-> b
実は、表情が似ています。この式の最初のチェックa
は asserted(1) で、0 クロック サイクル後にb
asserted(1) かどうかをチェックします。2 番目の式は、b
is (on) asserted がa
asserted(1) の場合にチェックされ、次に同じ posedgeb
が asserted(1) であるかどうかがチェックされます。
実際、検証エンジニアがこの種のアサーションを書くとき、彼らは次のことを処理します。
a ##0 b
:この式a
で がアサートされていない場合、失敗を示します。がアサートされている場合a
(1) で、同じタイム スタンプb
がアサートされていない場合も失敗を示します。
a |-> b
: この式では、a
がアサートされ、 がアサートされb
ていない場合、失敗が表示されます。がアサートされていない場合a
は、アサートされているかどうかをチェックb
しません。この動作は とは異なりa ##0 b
ます。
異なる入力データを適用すると、式a ##0 b
がより多くの失敗をもたらすことa |-> b
がわかります。同じ理由はすでに上で説明されています。
もう 1 つ注意すべき点は、「含意構文はプロパティ定義でのみ使用できます。シーケンスでは使用できません」です。
ありがとう、
アシュトシュ
あなたの質問は、含意演算子( |->
) の重要性を示しています。この例では、含意演算子を使用しており、便利です。
a -> b
a
「が true のb
場合true
」 (便利)を意味します。
これは役に立ちませんし、通常はあまり役に立ちません:
a ##0 b
「常に真である必要があります」a
を意味b
します (あまり役に立ちません)。