我想做的事情看起来并不复杂,但我想不出用VHDL做一个简单的方法。
我有一个名为FOO
的通用参数的组件。我想生成其中的16个组件,对于前8个实例,我希望将FOO
设置为0
,将其他8个实例设置为FOO
设置为{{1} }}
理想情况下,我可以做这样的事情:
4096
这当然不是有效的VHDL,但它抓住了我想做的事情。
所以我的问题是:有没有办法在单个生成循环中实现它(即不必有2个具有不同索引的独立生成循环),如果是,我该怎么做?
答案 0 :(得分:1)
正如user1155120在注释中提到的那样,for循环的基类型是通用整数。整数除法的小数部分将被截断。您可以使用此事实来实现您的特定系统,如
因此代码可能是
generate_loop: for I in 0 to 15 generate
begin
comp_inst: entity work.my_component
generic map (FOO => 4096 * (I/8))
port map (
...
);
end generate;
或者,对于更复杂的情况尤其有用,你可以做Brian Drummond所建议的:写一个函数
architecture arch of ent is
function gen_FOO(I : natural) return natural is begin
if I<8 then
return 0;
else
return 4096;
end if;
end function;
begin
generate_loop: for I in 0 to 15 generate
begin
comp_inst: entity work.my_component
generic map (FOO => gen_FOO(I))
port map (
...
);
end generate;