VHDL에는 반복적인 일을 표현하기 위해 for generate와 for loop 문장이 있다.
for generate는 concurrent statement에서 쓰이고, for loop는 sequential statement에서 사용된다.
예를 들어 and gate가 있는데 이러한 component를 32개 연결하는 경우 for generate를 사용하면 된다.
component and02
port(
a0 : in std_logic;
a1 : in std_logic;
y : out std_logic
);
end component and02;
g1 : for n in 0 to 31 generate
and_gate : and02 port map( a0 => sig1(n), a1 => sig2(n), y => z(n));
end generate;
아래 예는 for loop를 process안에서 작성한 예이다.
process(clk)
begin
if rising_edge(clk) then
for i in 0 to 31 loop
out_sig(i) <= in_sig(i);
end loop;
end if;
end process;
scode에서는 generate, loop 구별하지 않고, python for를 사용하면 된다. 물론 concurrent statement, sequential statement 구별하지 않는다. 위의 예들을 scode로 작성하면 다음과 같다.
1. generate
for n in range(32) :
imodule(a0=sig1[n],a1=sig2[n], y=z[n])
2. loop
with sequence(clk) :
for i in range(32) :
out_sig[i] <= in_sig[i];