Можете ли вы использовать дженерики типов с Quartus?
Затем вы оставляете тип полностью неопределенным, чтобы вы могли создать FIFO integers
или любой другой тип данных:
package fifo_pkg is
generic (type element_type);
type fifo_in_type is record
data_in : element_type;
rd : std_logic;
wr : std_logic;
end record;
type fifo_out_type is record
data_out : element_type;
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;
Затем, когда вы хотите использовать его:
package wide_fifo_pkg is new fifo_pkg
generic map (type => std_logic_vector(31 downto 0));
, а затем вы можете использовать fifo_in_type
и fifo_out_type
:
signal i : fifo_in_type;
Если у вас есть более одного FIFO в дизайнеКроме того, вы можете создать несколько версий пакета и использовать префикс пакета, чтобы получить правильный тип:
package narrow_fifo_pkg is new fifo_pkg
generic map (type => std_logic_vector(3 downto 0));
signal i32 : wide_fifo_pkg.fifo_in_type;
signal i4 : narrow_fifo_pkg.fifo_in_type;
Другой вариант VHDL 2008: вы можете иметь неограниченный тип записи:
type fifo_in_type is record
data_in : std_logic_vector;
rd : std_logic;
wr : std_logic;
end record;
, который вы можете затем создать subtype
s для различных целей:
subtype fifo1_data_type is fifo_in_type(data_in(31 downto 0));
subtype fifo2_data_type is fifo_in_type(data_in(15 downto 0));
Не знаю, поддерживает ли Quartus какой-либо из этих параметров - сообщите нам!