For Loop

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.