SV
// property abc がどこかで定義されている
// action_block を省略した時は ; だけをつける
// action_block 省略時、false なら $error が実行される
ap_1 : assert property ( abc (a,b,c) ) ;
ap_2 : assert property ( abc (a,b,c) )
$display ( "pass" ) ; // ; 必要
else $display ( "fail" ) ;
ap_3 : assert property ( pp2 )
else $display ( "fail" ) ; // else だけもできる
as_4 : assert property ( pp3 )
else begin
time t = $time;
#5 $error ("assert failed at %t", t );
end
ap_5 : assert property ( aap )
else ->event1 ;
構文としては assert 文と同じ。
assume property ( ) の中に dist や inside を使えるらしいが、ややこしいので省略。
cover sequence, restrict property については省略
always 文の中
initial 文の中
モジュール本体
インターフェイス本体
generate block
program, checker
モジュール、インターフェイスなどに記述した場合は、property の中の clock event により評価される。always の中に書いた場合と同じ
concurrent_assertion_item ::=
[ block_id ] : concurrent_assertion_statement
// concurrent_assertion_statement は以下のどれか
assert property ( property_spec ) action_block
assume property ( property_spec ) action_block
cover property ( property_spec ) statement_or_null
cover sequence .... // 省略
restrict property ( property_spec ) ;
action_block ::=
statement_or_null
| [ statement ] else statement_or_null