¿Cómo implemento un búfer de tres estados para un vector en VHDL?

3

Quiero implementar un búfer de tres estados para un vector de entrada, activado por un vector de habilitación, donde cada bit del vector de habilitación habilita el bit correspondiente del vector de entrada.

Algo así, pero con múltiples bits de habilitación:

Unúnicobúferdetresestadosseveasí:

Y<=Awhen(EN='0')else'Z';

(ejemplode: enlace )

Podría parecer esto (pero ese no funciona ...):

[...]
signal Y : std_logic_vector(N downto 0);
signal A : std_logic_vector(N downto 0);
signal EN : std_logic_vector(N downto 0);

Y <= A when EN = (others => '1') else (others => 'Z');

¿Hay alguna forma de declarar esto en VHDL o tengo que escribir un búfer para cada bit?

Editar: Para aclarar, estoy buscando una breve declaración para esto:

Y(0) <= A(0) when EN(0) = '1' else 'Z';
Y(1) <= A(1) when EN(1) = '1' else 'Z';
[...]
Y(N) <= A(N) when EN(N) = '1' else 'Z';
    
pregunta e1kable

2 respuestas

2

Si necesita habilitar el control para cada bit, la forma más sencilla es usar una declaración de generación:

tristate : for i in 0 to N generate
begin
    Y(i) <= A(i) when EN(i) = '1' else 'Z';
end generate tristate;

Las declaraciones de generación con for restricciones crean múltiples circuitos que funcionan en paralelo, a diferencia de un bucle for en la programación donde el mismo código se ejecuta varias veces en serie.

    
respondido por el Xcodo
0

Casi lo has clavado. Prueba esto

signal Y : std_logic_vector(N downto 0);
signal A : std_logic_vector(N downto 0);
signal EN : std_logic;

Y <= A when EN = '1' else (others => 'Z');
    
respondido por el Mike

Lea otras preguntas en las etiquetas