VHDL - pasando a través de los puertos INOUT

2

Si necesito envolver un diseño de VHDL de nivel superior previamente existente para un FPGA con puertos INOUT en otra nueva entidad de nivel superior ... ¿cuál es la forma correcta de pasar a través de la PARTE de un puerto INOUT?

Por lo general, solo quito el INOUT de la capa que no está en la parte superior y lo reemplace con puertos direccionales ... pero mi cliente quiere mantener ese código completamente sin cambios (por lo tanto, el HDL admite dos diseños de placa diferentes).

Supongamos que la entidad old_top_level tiene un puerto SPARE_IO : INOUT std_logic_vector(7 downto 0) . Otra entidad new_top_level tiene SPARE_IO_WRAPPED : INOUT std_logic_vector(7 downto 0) .

Necesito redireccionar un solo elemento de SPARE_IO.

El siguiente trabajo (definido en el cuerpo de new_top_level):

SPARE_IO_WRAPPED(6 downto 0) <= SPARE_IO(6 downto 0);
SPARE_IO(6 downto 0) <= SPARE_IO_WRAPPED(6 downto 0);
SPARE_IO(7) <= SOMETHING_ELSE;

Parece que se compila, pero eso no dice mucho.

EDIT Lo edité para aclarar que la señal INOUT no se transmite completamente, por lo que no puedo usar el MAPA DEL PUERTO.

    
pregunta darron

1 respuesta

1

Las entradas pueden existir interna o externamente. De hecho, en realidad no existen como puertas físicas, en ambos casos son dos puertas en direcciones opuestas en paralelo.

La entrada interna por lo general se considera como una matriz de puertas OR para el controlador y conexiones multipel a las puertas AND para los receptores. No hay tristate internamente.

La entrada externa suele ser de dos puertas, la salida puede ser desactivada por alguna señal de selección común.

VHDL no se preocupa por las señales 'internas' o 'externas'.

Mientras la sintaxis VHDL infiera algún medio para decidir qué dispositivo se seleccionará para acceder a la entrada, se puede usar el mismo código como módulo de nivel superior o inferior.
p.ej. Dentro de sus módulos (s)

bus<=myoutdata when RD='1' else (others=>'Z');
myindata<=bus;

El otro bit sugiere a VHDL que el bus se comparte si el bus es un inout. La señal de fragmento, una versión de la cual debe ir a cada módulo que tenga acceso al bus arbitrará quién tenga acceso.

    
respondido por el Jason Morgan

Lea otras preguntas en las etiquetas