我无法弄清楚为什么以下示例中的“ sig2”信号分配不会成功发生,而对于“ sig1”却如此。随着时钟上升沿,“ sig2”变为“ X”!
原因是什么?
{{1}}
答案 0 :(得分:2)
这是因为,当在for循环内分配信号时,假定驱动程序会影响数组(或记录)的所有元素。这是因为它是运行时概念,因此无法在详细说明时确定for循环的范围。这与生成循环不同,在生成循环中,可以在详细说明时推导范围。
因此,您需要从过程内部删除for循环,或者在本地分配给sig2的generate循环本地创建一个信号。例如:
gen_label : for gen_indx in 0 to 3 generate
signal local_sig : std_logic_vector(1 downto 0);
begin
process (clk) is
begin
if clk = '1' and clk'event then
sig1 (gen_indx) <= '1';
for loop_indx in 0 to 1 loop
local_sig(loop_indx) <= '1';
end loop;
end if;
end process;
sig2(gen_indx*2+1 downto gen_indx*2) <= local_sig;
end generate gen_label;