---------------------------------------------------------------------------------- -- Company: -- Engineer: Jim Plusquellic -- -- Create Date: 16:04:58 09/23/2009 -- Design Name: -- Module Name: ALU -- Project Name: -- Target Devices: -- Tool versions: -- Description: -- -- Dependencies: -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.all; -- A and B are the 12-bit input operands and DEST_OUT is the 12-bit output operand. -- skw_success is set under one of four conditions, whether a is gt/ls/eq/neq to b -- the remaining xxx_ins parameters are instructions. Only ONE (or zero) will ever -- be 1. entity ALU is Port ( A, B : in std_logic_vector(11 downto 0); DEST_OUT: out std_logic_vector(11 downto 0); skw_success: out std_logic; inv_ins: in std_logic; and_ins: in std_logic; or_ins: in std_logic; xor_ins: in std_logic; add_ins: in std_logic; sub_ins: in std_logic; shltf_ins: in std_logic; shrtf_ins: in std_logic; skwlf_ins: in std_logic; skwgf_ins: in std_logic; skwnf_ins: in std_logic; skwef_ins: in std_logic; movf_ins: in std_logic; movlw_ins: in std_logic ); end ALU; architecture beh of ALU is signal carry_out : std_logic; signal skw1, skw2 : std_logic; begin -- Adder AddComponent: entity work.AddUnit(beh) port map (add_ins=>add_ins, sub_ins=>sub_ins, skwlf_ins=>skwlf_ins, skwgf_ins=>skwgf_ins, A=>A, B=>B, ADD_OUT=>DEST_OUT, skw_success=>skw1, carry_out=>carry_out); -- Boolean operations BoolComponent: entity work.BoolUnit(beh) port map (and_ins=>and_ins, or_ins=>or_ins, inv_ins=>inv_ins, xor_ins=>xor_ins, skwnf_ins=>skwnf_ins, skwef_ins=>skwef_ins, A=>A, B=>B, BOOL_OUT=>DEST_OUT, skw_success=>skw2); -- Shifter and move operations ShiftComponent: entity work.ShiftUnit(beh) port map (shltf_ins=>shltf_ins, shrtf_ins=>shrtf_ins, movf_ins=>movf_ins, movlw_ins=>movlw_ins, B=>B, SHIFT_OUT=>DEST_OUT); skw_success <= skw1 or skw2; end beh;