En VHDL 2008, ¿se puede usar un tipo de un paquete con genéricos para una señal de puerto?

1

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.

    
pregunta Martin Herrmann

1 respuesta

0

El crédito por la respuesta va a user8352 que proporcionó la solución y algún fondo . El paquete vp_4 se encuentra en la biblioteca de trabajo y funcionará lo siguiente:

package vp_4 is new work.vector_package generic map (size => 4);

entity bar is
    port (
        signal vector : out work.vp_4.vector_t);
end entity;
    
respondido por el Martin Herrmann

Lea otras preguntas en las etiquetas