我正在尝试更改基于泛型的端口记录,但不知道如何进行此操作。如果可能的话,我试图避免VHDL2008构造,因为我想避免阻止与遗留代码的向后兼容。不管怎样,这就是我要做的:
--libs for pack256
package pack256 is
type myDataT is record
valid : std_logic;
data : std_logic_vector(255 downto 0);
end record;
end package;
-- libs for pack128
package pack128 is
type myDataT is record
valid : std_logic;
data : std_logic_vector(127 downto 0);
end record;
end package;
现在,我希望能够选择我在实体中使用的包,因为此记录位于端口映射中。有没有什么创造性的方法可以让我使用VHDL配置或其他东西来确定从我的顶层中源组件/记录/类型的包?不幸的是,我们有很多代码在看下面的代码,需要能够控制哪个包被使用,因为一些顶级对myDataT记录使用不同的数据宽度。如果没有VHDL 2008或创建两个独立的实体就无法解决这个问题,Vivado和Altera/Quartus是否支持包泛型/无约束记录?
-- top level declaration stuff
library dataPack;
use dataPack.(pack128 or pack256).all; -- how to choose different package from top level?
entity myEntity is
generic(
-- generics);
port(
reset : in std_logic;
clk : in std_logic;
ctrl : myDataT;
-- other port stuff);
end myEntity;
最后,我不能在实体端口映射中声明记录信号,也不能通过泛型更改宽度,因为这将破坏数千个遗留源代码文件。