library IEEE; use IEEE.std_logic_1164.all; entity V74x138 is port ( G1: in STD_LOGIC; G2A_L: in STD_LOGIC; G2B_L: in STD_LOGIC; A: in STD_LOGIC_VECTOR (2 downto 0); Y_L: out STD_LOGIC_VECTOR (0 to 7) ); end V74x138; architecture V74x138_q of V74x138 is signal G2A, G2B: STD_LOGIC; -- active-high version of inputs signal Y: STD_LOGIC_VECTOR (0 to 7); -- active-high version of outputs function CONV (X: STD_LOGIC_VECTOR) return INTEGER is variable RESULT: INTEGER; begin RESULT := 0; for i in X'RANGE loop RESULT := RESULT * 2; case X(i) is when '0' | 'L' => null; when '1' | 'H' => RESULT := RESULT + 1; when others => null; end case; end loop; return RESULT; end CONV; begin process (G1, G2A_L, G2B_L, A, G2A, G2B, Y) variable i: INTEGER range 0 to 7; begin G2A <= not G2A_L; -- convert inputs G2B <= not G2B_L; -- convert inputs Y <= "00000000"; if (G1 and G2A and G2B) = '1' then for i in 0 to 7 loop if i=CONV(A) then Y(i) <= '1'; end if; end loop; end if; Y_L <= not Y; -- convert outputs end process; end V74x138_q;