GENERATE语句
GENERATE语句是另一种基本的并发描述语句。它和顺序描述语句中的LOOP语句一样用于循环执行某项操作,通常与FOR一起使用。具体的语法结构如下:
label:FOR identifier IN range GENERATE
(concurrent assigments)
END GENERATE;
for - generate
可以用来产生多个相同的结构和描述规则结构,如阵列、元件例化和进程。
元件例化
label_one : for i in 0 to 1 generate
bram_gen : bram_eg
generic map(
DATA => tmp,
ADDR => 11
)
port map(
-- Port A
A_clk => clk_sys,
A_wr => wr_write(i),
A_addr => addra,
A_din => reg.dina,
A_dout => open,
-- Port B
B_clk => clk_sys,
B_wr => '0',
B_addr => addrb,
B_din => (others => '0'),
B_dout => doutb(i)
);
end generate label_one;
addra(10 downto 5) <= std_logic_vector(to_unsigned(reg.counter_one, 6));
addra(4 downto 0) <= std_logic_vector(to_unsigned(reg.counter_two, 5));
wr_write(0) <= reg.identifier and reg.write;
wr_write(1) <= (not reg.identifier) and reg.write;
GENERATE中循环操作的上界和下界都必须是静态的。如果上界和下界中的参数是非静态的,那么代码通常是不可综合的。