library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

--******************************************************************************
--** ENTITY alu_mux
--**
--** DESKRIPSI: Ini menggambarkan multiplexor yang digunakan untuk memilih
--**            hasil dari alu. Apakah akan menjadi unit ALU, unit SU atau unit MVIBOX.
--**            Mux ini spesial karena juga mengontrol overflow
--**            dari alu. Jika operasi dilaksanakan untuk unit ALU kemudian
--**            bit overflow dilewatkan selain itu diset nol.
--******************************************************************************
ENTITY alu_mux IS
    PORT(alu,su,mvi                         : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
         ovf                                : IN STD_LOGIC;
         sel                                : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
         result                             : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
         overflow                           : OUT STD_LOGIC);
END ENTITY alu_mux;

ARCHITECTURE alu_mux_behav OF alu_mux IS
BEGIN
    
    name : PROCESS(alu,su,mvi,sel,ovf) IS
    
    BEGIN
        CASE sel IS
            WHEN "00" => -- Select ALU
                result <= alu;
                overflow <= ovf;
                
            WHEN "01" => --Select SU
                result <= su;
                overflow <= '0';
                
            WHEN others => --Select MVIBOX
                result <= mvi;
                overflow <= '0';
            
        END CASE;

    END PROCESS name;
END ARCHITECTURE alu_mux_behav;
