Loop Statement
  
    
    
     
   
   Formal Definition
  
   Statement that includes a sequence
   of statements that is to be executed repeatedly, zero or more times. 
  
   Simplified Syntax
  
   loop_label: while condition loop 
  
     sequence_of_statements 
  
     end loop loop_label; 
  
   loop_label: for loop_parameter
    in range loop 
  
     sequence_of_statements 
  
     end loop loop_label; 
  
   Description
  
   The loop statement contains 
   a sequence of statements, which are supposed to be repeated many 
   times. The statement also lists the conditions for repeating the 
   sequence or specifies the number of iterations. 
  
   A loop statement can have 
   several different forms depending on the iteration scheme preceding 
   the reserved word loop. In 
   its simplest form, no iteration scheme is specified and the loop is 
   repeated indefinitely (Example 1). 
  
   In order to exit from an infinite loop, an exit statement has to be 
   used. See exit statement 
   for details. An exit statement can be specified with a condition that 
   must be met to exit the loop (Example 2). 
  
   Instead of specifying an infinite loop with a conditional exit 
   statement, a while loop can be used. In such a case the reserved word while 
   with a condition precede the keyword loop.
    The sequence of statements inside the loop will be executed if the 
   condition of the iteration scheme is true. The condition is evaluated 
   before each execution of the sequence of statements. When the 
   condition is false, the loop is not entered and the control is passed 
   to the next statement after the end loop clause (Example 3). 
  
   Another iteration scheme is useful when a discrete range can define 
   the number of iterations. In this case the keyword for 
   with a loop parameter precede the keyword loop.
    The header of the loop also specifies the discrete range for the 
   loop parameter. In each iteration the parameter takes one value from 
   the specified range, starting from the leftmost value within the 
   range (Example 4). 
  
   The discrete range can also be declared in the form of a discrete 
   type (example 5), including an enumerated type. 
  
   Examples
  
   Example 1 
  
   signal Clock : BIT := '0'; 
   ... 
   Clk_1: process (Clock) 
   begin 
     L1: loop 
         Clock <= not 
   Clock after 5 ns; 
         end
    loop L1; 
   end process Clk_1; 
  
     
   The process (which is a clocking signal generator) contains a loop 
   without an iteration scheme, which will iterate indefinitely. 
  
   Example 2 
  
   L2: loop 
       A:= A+1; 
       exit 
   L2 when A > 10; 
       end loop L2; 
  
     
   The infinite loop becomes in practice a finite, as the iterations 
   will terminate as soon as the variable A becomes greater than 10. 
  
   Example 3 
  
   Shift_3: process (Input_X) 
   variable i : POSITIVE := 1; 
   begin 
     L3: while i <=
    8 loop 
           Output_X(i) <= 
   Input_X(i+8) after 5 ns; 
           i := i + 1; 
         end loop L3; 
   end process Shift_3; 
  
     
   The loop L3 will be repeated as long as the value of the variable i 
   is not greater than 8. When i reaches the value of 9 the loop is no 
   longer repeated. 
  
   Example 4 
  
   Shift_4: process (Input_X) 
   begin 
     L4: for 
   count_value in 1 to 
   8 loop 
          Output_X(count_value) <= 
   Input_X(count_value + 8) after 
   5 ns; 
         end loop L4; 
   end process Shift_4; 
  
     
   In the above example the loop statement parameter count_value will 
   cause the loop to execute 8 times, with the value of count_value 
   changing from 1 to 8. 
  
   Example 5 
  
   Shift_5: process (Input_X) 
   subtype Range_Type is 
   POSITIVE range 1 to 8; 
   begin 
     L5: for 
   count_value in Range_Type loop 
          Output_X(count_value) <= 
   Input_X(count_value +8) after 
   5 ns; 
         end loop L5; 
   end process Shift_5; 
  
     
   The subtype Range_Type defines the range of integer values from 1 to 
   8. The parameter count_value changes according to this specification, 
   i.e. from 1 to 8. 
  
   Important Notes
  
   - 
   
    The parameter for a 'for' loop does not need to be specified - the 
    loop declaration implicitly declares it. 
    - 
   
    The loop parameter is a constant within a loop, which means that it 
    may not be assigned any values inside the loop. 
     
  
    
 
    |