====== Concurrent assertion ======
===== concurrent_assertion_statement =====
[ label : ] [ postponed ] assertion ;
===== Parents =====
* entity_statement_part
* architecture_statement_part
* block_statement_part
===== Further definitions =====
==== label ====
* [[.:bnf#identifier]]
==== assertion ====
''**assert** [[.:bnf#condition]] \\
[ **report** [[.:bnf#expression]] ] \\
[ **severity** expression ]''
===== Comment =====
For any concurrent assertion statement, there is an equivalent (passive) process statement.
The equivalent process statement of a concurrent assertion statement including the keyword **POSTPONED** is a postponed process.
If the concurrent assertion contains a static condition then the assertion will be executed only once at the beginning of the simulation.
===== Examples =====
These are two different examples of assertions.
One condition at a time is checked ( **ASSERT** ) and if it is not fulfilled a report is given ( **REPORT** ). The severity level determines which actions are carried out if the condition which is to be checked is not fulfilled.
ASSERT reset = '1' ;
ASSERT reset = '1'
REPORT "Reset ist aktiv !" ;
lbl :
ASSERT reset = '1'
REPORT "Reset ist aktiv !"
SEVERITY warning ;
latch_check :
ASSERT reset = '1' OR set = '1'
REPORT "Reset und Set sind" &
"gleichzeitig aktiv !"
SEVERITY failure ;
lbl :
ASSERT data = 0
REPORT "Datum ist gleich "
& integer_to_string ( data )
& " !"
SEVERITY note ;