Passing Generics para registrar tipos de puertos

Recientemente comencé a usar registros para mis definiciones de puerto, especialmente si quiero agrupar señales que pertenecen a una determinada interfaz. Sin embargo, el problema que enfrento aquí es que no puedo pasar, digamos el ancho de un std_logic_vector, a la entidad por medio de un genérico. Entonces, lo que básicamente quiero hacer es lo siguiente:

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;   

Así que las soluciones ideales serían cuando puedo usar el mismo genérico en mi registro como lo hice en la entidad. (Para que DATA_WIDTH sea igual a DATA_WIDTH_ ??). Sé que esto debería funcionar de alguna manera con vhdl 2008, sin embargo, mi quartus II 11sp1 no admite genéricos en los registros.

¿Existe una forma elegante de lograr ese tipo de "aprobación genérica" que es sintetizable? Sé que uno podría almacenar una constante en el paquete, pero no puedo usar el mismo paquete de fifo para crear una instancia de varios con diferentes anchuras.

Gracias un millón, T

Respuestas a la pregunta(1)

Su respuesta a la pregunta