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
  
  
    
 
    |