我最近开始为我的端口定义开始使用记录,特别是如果我想对属于某个接口的信号进行分组。然而,我在这里面临的问题是,我不能通过通用的方式将std_logic_vector的宽度传递给实体。所以我基本上想要做的是以下几点:将泛型传递给记录端口类型
library ieee;
use ieee.std_logic_1164.all;
use work.math_pkg.all;
package fifo_pkg is
type fifo_in_type is record
data_in : std_logic_vector(DATA_WIDTH_??- 1 downto 0);
rd : std_logic;
wr : std_logic;
end record;
type fifo_out_type is record
data_out : std_logic_vector(DATA_WIDTH_?? - 1 downto 0);
empty : std_logic;
full : std_logic;
end record;
component fifo is
generic
(
MIN_DEPTH : integer;
DATA_WIDTH : integer
);
port
(
clk : in std_logic;
res_n : in std_logic;
i : in fifo_in_type;
o : out fifo_out_type
);
end component fifo;
end fifo_pkg;
因此,理想的解决办法是,当我可以使用相同的通用在我的纪录,我在实体一样。 (所以DATA_WIDTH与DATA_WIDTH_ ??相同)。我知道这应该以某种方式与VHDL 2008,但我的Quartus II 11sp1不支持记录中的泛型。
是否有一种优雅的方式来实现可综合的那种“泛型传递”?我知道可以在包中存储常量,但是我不能使用相同的fifo包以不同的宽度实例化几个fifo。
万分感谢, 牛逼
嗨马丁,感谢您的建议,这两个都漂亮和优雅。然而,这在Quartus 11.0 SP1中不起作用。似乎quartus目前只支持vhdl 2008非常有限的子集。任何其他想法来完成这个任务?我想知道这是否会与Synplify一起工作...谢谢,T – user1017739
这是一个遗憾(关于Quartus),但并非完全没有预料之外。 Synplify帮助文件意味着它知道有无约束数组*和*类型泛型的记录。 –
确实,这有点令人失望:( – user1017739