我最近開始爲我的端口定義開始使用記錄,特別是如果我想對屬於某個接口的信號進行分組。然而,我在這裏面臨的問題是,我不能通過通用的方式將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