Этот оператор несколько раз выполняет последовательность операторов. Его синтаксис:
\оператор цикла\::=[\метка\:][\схема итерации\]loop
{\последовательный оператор\}
{next[\метка\][when \условие\];}
{exit[\метка\][when \условие\];}
end loop [\метка\];
\схема итерации\::=while \условие\
| for \переменная цикла \ in \диапазон\
Метка \метка\ необязательна, она отмечает начало цикла и используется для организации вложенных циклов или для указания в каком цикле начать новую итерацию по оператору next или из какого цикла выйти по оператору exit.
По первой схеме итераций цикл, ограниченный ключевыми словами loop и end loop будет выполняться, пока условие \условие\ не примет значение false. Причем, это условие проверяется до выполнения цикла и если оно равно false, то цикл не выполняется. В примере:
variable vec: bit_vector(1 to n);
variable or_vec:bit;
variable i:natural;
…
i:=1;
or_vec:='0';
while i<=n loop
or_vec:= or_vec or vec(i);
i:=i+1;
end loop;
вычисляется переменная or_vec, равная функции ИЛИ от всех разрядов вектора vec длины n. Если n = 0, то цикл не вычисляется. Этот пример можно записать с помощью второй схемы итерации как:
variable vec: bit_vector(1 to n);
variable or_vec:bit;
….
or_vec:='0';
for i in 1 to n loop
or_vec:= or_vec or vec(i);
end loop;
Здесь переменная цикла i последовательно принимает значения 1,2,… из диапазона 1 to n. Если необходим обратный порядок изменения переменной цикла: n, n-1,… то этот диапазон может быть задан как: n downto 1 .