During the initialization phase of simulation, the process is activated and
assigns the initial value of state to the signal q. It then suspends at the
implicit wait statement indicated in the comment. When either reset or
clock change value, the process is resumed, and execution repeats from the
beginning.
The next example describes the behaviour of a synchronization device
called a Muller-C element used to construct asynchronous logic. The
output of the device starts at the value '0', and stays at this value until both
inputs are '1', at which time the output changes to '1'. The output then
stays '1' until both inputs are '0', at which time the output changes back to
'0'.