statement is used to finish or exit the execution of an enclosing
loop statement. If the exit
statement includes a condition, then the exit from the loop is conditional.
exit loop_label when condition;
The exit statement
terminates entirely the execution of the loop in which it is located.
The execution of the exit statement depends on a condition placed at
the end of the statement, right after the when
reserved word. When the condition is TRUE (or if there is no
condition at all) the exit statement is executed and the control is
passed to the first statement after the end loop (example 1).
The loop label in the exit statement is not obligatory and can be
used only in case of labeled loops. If no label is present then it is
assumed that the exit statement relates to the innermost loop
containing it. If an exit from a loop on a higher level of hierarchy
is needed then the loop has to be assigned a label, which will be
used explicitly in the exit statement. (Example 2).
Loop_1: for count_value in
1 to 10 loop
Loop_1 when reset = '1';
A_1: A(count_value) := '0';
end loop Loop_1;
A_2: B <= A after 10 ns;
At the beginning of each iteration of the LOOP_1 loop, the reset ='1'
ondition is checked. If the condition is FALSE, then the rest of the
loop is executed (in this case it is the assignment labeled A_1).
Otherwise, the control is passed to the next statement after the
loop, denoted with the A_2 label.
Loop_X when condition_1;
:= a_v + 1;
Exit_2: exit when condition_2;
end loop Loop_Y;
B(i) <= Output_1(i) after
Loop_X when condition_3;
end loop Loop_X;
Assign_X: A <=B after
There are two nested loops in the above example. When the condition_1
is TRUE, the Exit_1 statement will be executed. This will cause
termination of the Loop_X loop and moving the execution to Assign_X.
Next, the Loop_X will be terminated because its label is explicitly
listed in the exit statement.
If condition_1 is not TRUE then the two assignments below it are
performed and condition_2 is checked. If it is TRUE, then the Loop_Y
is exited. Since there is no loop label within the exit statement,
therefore it relates to the innermost loop. As a result, the next
statement to be executed will be Assign_Y. Finally, when the
condition_3 is TRUE the Loop_X is terminated. The Exit_3 loop label
could be skipped because this statement is within the boundaries of
the exit Loop_X loop.
The exit statement is often
confused with the next statement.
The difference between the two is that the exit
statement "exits" the loop entirely, while the next
statement skips to the "next" loop iteration (in other
words, "exits" only the current iteration of the loop).