如果您实现了 for 循环,那么 for 循环中的功能会同时针对 for 循环所经过的所有值执行。为了实现这一点,综合工具必须为 for 循环中的每个值实现一次功能,因此您仍将拥有大量的硬件实现。
例如,此代码将展开到功能的并行硬件,在这种情况下是与门,但由于 for 循环,硬件没有任何开销:
process (clk_i) is
begin
if rising_edge(clk_i) then
for idx_par in z_par_o'range loop
z_par_o(idx_par) <= a_i(idx_par) and b_i(idx_par); -- Functionality
end loop;
end if;
end process;
不同数据值的交错处理必须通过 VHDL 中的显式处理来实现,因此具有该值的信号,并在每次功能计算给定值的结果时对该值进行增量和换行。
并且此代码将为该功能制作串行硬件,但由于循环导致硬件开销:
process (clk_i) is
begin
if rising_edge(clk_i) then
if rst_i = '1' then -- Reset
idx_ser <= 0;
else -- Operation
z_par_o(idx_ser) <= a_i(idx_ser) and b_i(idx_ser); -- Functionality
if idx_ser /= LEN - 1 then -- Not at end of range
idx_ser <= idx_ser + 1; -- Increment
else -- At end of range
idx_ser <= 0; -- Wrap
end if;
end if;
end if;
end process;
普通 VHDL 综合工具无法展开 for 循环以随时间执行。