我想知道是否可以在生成语句中使用变量。
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)
答案 0 :(得分:2)
这似乎与:
相同 LAST: if (i = 0) generate
firstnode : node
port map (
rx_bitmap => bitmap_nodes(NB_NODES-1)
);
end generate LAST;
不是吗?
编辑:
我仍然不清楚为什么你想这样做,但你可以(后VHDL87)在这个区域放置一个shared variable
(您可以将其视为architecture
和begin
之间的部分。请记住,如果您不会遇到种族条件的各种问题,共享变量必须是protected
类型。
但是,您不能像执行一样增加变量,因为必须使用并发语句填充generate语句(而不是变量赋值)。
同样,我真的很想看到一个需要这个功能的例子(或者更像是一个学术问题?)