我可以在generate语句中使用变量吗?

时间:2011-03-15 01:59:57

标签: vhdl

我想知道是否可以在生成语句中使用变量。

signal bitmap_nodes : std_logic_vector(0 to NB_NODES-1) := (others => '0');

CIRCULAR: if (CLOCKWISE = 0) generate
    variable index : integer := 0;
    begin
    GENERATE_NODE : for i in NB_NODES-1 to 0 generate
    begin        
        node_inst: node
        port map (                    
            rx_bitmap => bitmap_nodes(index)
        );

        -- Increment index
        index := index + 1;

    end generate GENERATE_NODE;

end generate CIRCULAR;

这里,变量仅用于矢量切片。它将做的是分配以下(假设NB_NODES等于4):

NODE0 -> bitmap_nodes(3)
NODE1 -> bitmap_nodes(2)
NODE2 -> bitmap_nodes(1)
NODE3 -> bitmap_nodes(0)

1 个答案:

答案 0 :(得分:2)

这似乎与:

相同
   LAST: if (i = 0) generate
            firstnode : node
            port map (
                rx_bitmap => bitmap_nodes(NB_NODES-1)
            );
        end generate LAST;

不是吗?

编辑:

我仍然不清楚为什么你想这样做,但你可以(后VHDL87)在这个区域放置一个shared variable (您可以将其视为architecturebegin之间的部分。请记住,如果您不会遇到种族条件的各种问题,共享变量必须是protected类型。

但是,您不能像执行一样增加变量,因为必须使用并发语句填充generate语句(而不是变量赋值)。

同样,我真的很想看到一个需要这个功能的例子(或者更像是一个学术问题?)