在for生成语句中为信号分配值

时间:2019-04-25 12:08:08

标签: vhdl variable-assignment generate

我无法弄清楚为什么以下示例中的“ sig2”信号分配不会成功发生,而对于“ sig1”却如此。随着时钟上升沿,“ sig2”变为“ X”!

原因是什么?

{{1}}

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;