library IEEE;
use IEEE.std_logic_1164.all;

entity V3statex is
    port (
        G_L: in STD_LOGIC;                        -- Global output enable
        SEL: in STD_LOGIC_VECTOR (1 downto 0);    -- Input select 0,1,2,3 ==> A,B,C,D
        A, B, C, D: in STD_LOGIC_VECTOR (1 to 8); -- Input buses
        X: out STD_ULOGIC_VECTOR (1 to 8)         -- Output bus (three-state)
    );
end V3statex;

architecture V3states of V3statex is
constant ZZZZZZZZ: STD_ULOGIC_VECTOR := ('Z','Z','Z','Z','Z','Z','Z','Z');
begin
  process (G_L, SEL, A)
  begin
    if G_L='0' and SEL = "00" then X <= To_StdULogicVector(A);
    else X <= ZZZZZZZZ;   
    end if;
  end process;

  process (G_L, SEL, B)
  begin
    if G_L='0' and SEL = "01" then X <= To_StdULogicVector(B);
    else X <= ZZZZZZZZ;   
    end if;
  end process;

  process (G_L, SEL, C)
  begin
    if G_L='0' and SEL = "10" then X <= To_StdULogicVector(C);
    else X <= ZZZZZZZZ;   
    end if;
  end process;

  process (G_L, SEL, D)
  begin
    if G_L='0' and SEL = "11" then X <= To_StdULogicVector(D);
    else X <= ZZZZZZZZ;   
    end if;
  end process;
  
end V3states;
