Así que puedo definir un paquete con un genérico. En este caso, el paquete toma un tamaño como genérico y define un tipo de vector de ese tamaño:
library ieee;
use ieee.std_logic_1164.all;
package vector_package is
generic (
size : integer);
subtype vector_t is std_logic_vector (size - 1 downto 0);
end package;
Ahora puedo crear una instancia de ese paquete dentro de una arquitectura para crear una señal de ese tipo de vector:
entity foo is
end entity;
architecture rtl of foo is
package vp_4 is new work.vector_package generic map (size => 4);
signal vector : vp_4.vector_t;
begin
end architecture;
Pero lo que quiero es usar el tipo de vector para una señal de puerto. Habría esperado poder hacer algo como esto, pero no parece ser VHDL 2008 válido:
package vp_4 is new work.vector_package generic map (size => 4);
entity bar is
port (
signal vector : out vp_4.vector_t);
end entity;
ModelSim 10.2c rechaza esto con el mensaje (vcom-1136) Unknown identifier "vp_4".
en la línea que contiene signal vector : ...
.
¿Hay alguna forma de usar el tipo del paquete para una señal de puerto? Soy consciente de los tipos no restringidos como alternativa, pero no se ajustan a mis requisitos en el caso de uso real.