Wait Statement
Definition:
The wait
statement is a statement that causes suspension of a process or a procedure.
Simplified Syntax
wait;
wait on signal_list;
wait until condition;
wait for time;
Description
The wait statement suspends
the execution of the process or procedure in which it is specified.
Resuming the process or procedure depends on meting the condition(s)
specified in the wait statement.
There are three types of conditions supported with wait statements: sensitivity
clause, condition clause,
and timeout clause.
The most often used is the sensitivity
clause. A sensitivity list defines a set of signals to which the
process is sensitive and causes the process to resume (example 1).
If a wait statement does not
contain a sensitivity list, then an implicit sensitivity list is
assumed, one which contains all the signals that are present in that
condition. If a process is resumed but no condition is met, then the
process will not execute any other statements (example 2).
The second type of a condition supported with the wait
statement is the condition
clause. A process is resumed when the logical condition turns true
due to a change of any signal listed in the condition
(example 2).
The timeout clause defines
the maximum time interval during which the process is not active.
When the time elapses, the process is automatically resumed (example 3).
A single wait statement can
have several different conditions. In such a case the process will be
resumed when all the conditions are met (example 4).
If a wait on sensitivity_list is the only wait in the process and the
last statement of the process, then it can be substituted by a
sensitivity list of a process. See sensitivity
list for details.
The syntax of the wait
statement allows to use it without any conditions. Such a statement
is equivalent to wait until true,
which suspends a process forever and will never resume. While in
simulation of normal models this is a disadvantage, this particular
feature of a wait statement
is widely used in testbenches.
Example 5 shows an example of a testbench section.
Examples
Example 1
signal S1, S2 : Std_Logic;
. . .
process
begin
. . .
wait on
S1, S2;
end process;
After executing all statements, the process will be suspended on the
wait statement and will be resumed when one of the S1 or S2 signals
changes its value.
Example 2
wait until Enable = '1';
-- this is equivalent to
-- loop
-- wait on Enable;
-- exit when Enable = '1';
-- end loop;
In this example, the wait statement will resume the process when the
Enable signal changes its value to '1'. This is equivalent to the
loop described in the comment below the first line. Please note that
the process is resumed on any change of the Enable signal. However,
it will awake the rest of the process only when the new value is '1'.
Example 3
wait for
50 ns;
A process containing this statement will be suspended for 50 ns.
Example 4
BIN_COMP : process
begin
wait on
A, B until CLK = '1';
. . .
end process;
The process BIN_COMP is resumed after a change on either A or B
signal, but only when the value of the signal CLK is equal to '1'.
Example 5
G: process
begin
G0 <= '1' after
5 ns,
'0' after
10 ns,
'1' after
15 ns,
'0' after
20 ns;
G1 <= '1' after
5 ns,
'0' after
15 ns;
wait;
end process G;
In this process the values of signals G1 and G0 are set to '11',
'10', '01', and '00' at the time intervals 5, 10, 15 and 20 ns,
respectively. When the wait statement is encountered, the process is
suspended forever.
Important Notes
|