For Loop – это последовательный оператор, который можно использовать в процессах, функциях или процедурах.
Синтаксис:
optional_label: for parameter in range loop
sequential statements
end loop optional_label;
Правила и примеры:
Тип цикловой переменной зависит от указанного диапазона. Например, диапазон от 0 до 3 подразумевает тип Integer.
process (A)
begin
Z <= "0000";
for I in 0 to 3 loop
if (A = I) then
Z(I) <= '1';
end if;
end loop;
end process;
Такие атрибуты, как ‘low, ‘high, ‘range можно использовать для определения числа итераций цикла.
process (A) variable TMP : std_ulogic;
begin TMP := '0'; for I in A'low to A'high loop TMP := TMP xor A(I); end loop; ODD <= TMP; end process;
Диапазон может быть дискретным, например перечислимого типа.
type PRIMARY is (RED, GREEN, BLUE); type COLOUR is ARRAY (PRIMARY) of integer range 0 to 255; signal VIDEO: COLOUR; signal V_BUS INTEGER range 0 to 255; -- other statements MUX: process begin for SEL in PRIMARY loop V_BUS <= VIDEO(SEL); wait for 10 ns; end loop; end process MUX;
Цикловую переменную не нужно объявлять, она определяется непосредственно внутри цикла и не может быть изменена.
for I in 1 to 10 loop if (REPEAT ='1') then I:= I-1; --illegal end if; end loop;
Особенности синтеза
Циклы поддерживаются при синтезе, при условии, что они имеют постоянное число итераций и не содержат операторов wait.