Loop

The loop statement provides looping capability.

loop
   scl statements
   exit when booleanExpression     // optional
end loop;

The boolean expression is what you would expect it to be. Here are a few examples

//infinite loop (no exit when)
loop
   RD1 <= '0';
   wait on RD1;
end loop;

//clock until pc == foo label
loop
   RD0 <= '0';
   wait 4 ic;
   RD0 <= '1';
   wait 4 ic;
   exit when PC == foo;
end loop;

//unadorned exit (yeah this is contrived!)
loop
   AN1 <= 3500 mv;
   exit;             // unconditional exit
end loop;

Note that a loop can have more than one exit when condition

//multiple exit conditions
loop
   wait on RD1;
   RD0 <= '0';
   exit when STATUS.Z == 0;
   exit when RD2 == '0';
end loop;