Передача универсальных шаблонов для записи типов портов

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

9
задан user1017739 28 October 2011 в 05:06
поделиться