9.4 Concurrent assertion

...
ENTITY e IS
    ...
BEGIN
    ...
END e ;

...
ARCHITECTURE a OF e IS
    ...
BEGIN
    ...
END a ;

...
CONFIGURATION c
        OF e IS
    ...
    ...
    ...
END

...
PACKAGE pkg IS
    ...
    ...
    ...
END pkg ;


concurrent_assertion_statement ::=

[ label : ] [ postponed ] assertion

..
PACKAGE BODY pck
        IS
    ...
    ...
    ...
END pck ;

...
b: BLOCK IS
    ...
BEGIN
    ...
END BLOCK b ;

FUNCTION f (...)
    RETURN r IS
    ...
BEGIN
    ...
END f ;

PROCEDURE p (...) IS
    ...
BEGIN
    ...
END p ;

p : PROCESS
    ...
BEGIN
    ...
END PROCESS p ;

9.4.1 Further definitions

label ::= identifier

assertion ::=
    assert condition
        [ report expression ]
        [ severity expression ]

9.4.2 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.

9.4.3 Examples

ASSERT reset = '1' ;




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'
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 ;