生成循环中的变量通用赋值

时间:2018-05-02 19:20:14

标签: vhdl

我想做的事情看起来并不复杂,但我想不出用VHDL做一个简单的方法。

我有一个名为FOO的通用参数的组件。我想生成其中的16个组件,对于前8个实例,我希望将FOO设置为0,将其他8个实例设置为FOO设置为{{1} }}

理想情况下,我可以做这样的事情:

4096

这当然不是有效的VHDL,但它抓住了我想做的事情。

所以我的问题是:有没有办法在单个生成循环中实现它(即不必有2个具有不同索引的独立生成循环),如果是,我该怎么做?

1 个答案:

答案 0 :(得分:1)

正如user1155120在注释中提到的那样,for循环的基类型是通用整数。整数除法的小数部分将被截断。您可以使用此事实来实现您的特定系统,如

  • 对于0< = i< 8,i / 8 = 0
  • 对于8< = i< 15,i / 8 = 1

因此代码可能是

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;