Я недавно начал использовать записи для своих определений портов, особенно если я хочу сгруппировать сигналы, принадлежащие определенному интерфейсу. Однако проблема, с которой я столкнулся, заключается в том, что я не могу передать, скажем, ширину 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 с разной шириной.
Большое спасибо, T