gpt4 book ai didi

VHDL:如何声明可变宽度泛型

转载 作者:行者123 更新时间:2023-12-05 00:23:15 65 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to use generic parameters that depend on other generic parameters for entities?

(2 个回答)


5年前关闭。




我想创建一个 VHDL 实体,其中一个泛型可以改变另一个泛型的宽度。

entity lfsr_n is 
generic (
WIDTH : integer := 32; -- counter width
POLYNOMIAL : std_logic_vector (WIDTH-1 downto 0) := "1000_0000_0000_0000_0000_0000_0110_0010"
);

不幸的是,我似乎无法在泛型列表的后面引用之前定义的泛型。 Active-HDL 给出以下错误:

错误:COMP96_0300: modules/m3_test_load/lfsr_n.vhd : (26, 45): 在接口(interface)列表完成之前无法引用“WIDTH”。

错误:COMP96_0077:modules/m3_test_load/lfsr_n.vhd:(26、66):未定义的表达式类型。预期类型“STD_LOGIC_VECTOR”。

一种解决方法是将 POLYNOMIAL 设为端口。但它应该是通用的,因为该值在细化时是恒定的。我知道如果我对端口应用一个常量,它会以我想要的方式综合并将常量值优化到模块中,但我想找到某种方式使其成为通用的。任何建议如何做到这一点?

最佳答案

如果你想要 POLYNOMIAL参数保持通用,您可以将其指定为不受约束的数组。您也可以省略 WIDTH通过将所有引用替换为 POLYNOMIAL'range 的参数, POLYNOMIAL'length-1 downto 0 , 或 POLYNOMIAL'length如所须。

entity lfsr_n is
generic (
POLYNOMIAL : std_logic_vector := X"FFAA55BB"
);
port (
-- Vector with copied range (defaults to ascending from 0)
state : out std_logic_vector(POLYNOMIAL'range);

-- Vector with forced descending range
state2 : out std_logic_vector(POLYNOMIAL'length-1 downto 0)
);
end entity;

无约束数组是一项强大的功能,它通过隐式控制宽度而不需要专用的通用参数来帮助简化代码。如果有效使用,它们会减少源中硬编码数组大小的数量,从而产生自然可调整大小的逻辑。您可以自由更改 POLYNOMIAL泛型到具有不同长度的另一个值,并且您的逻辑的其余部分应该无需任何额外努力即可适应。

关于VHDL:如何声明可变宽度泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28511496/

65 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com