`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 15:30:47 02/15/2012 // Design Name: // Module Name: ALU // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module ALU( input [1:0] s, input [3:0] a, output [3:0] o ); reg [3:0] o; always @ ( * ) begin case ( s ) 2'b00 : o = a; 2'b01 : o = (a != 4'b1000 ) ? (~a)+1 : 4'b0111; 2'b10 : o = (a[3] != 1'b1 ) ? a >> 1 : ~(((~a)+4'b0001) >> 1)+4'b0001; 2'b11 : o = (a[3] != 1'b1 ) ? a % 3 : ~(((~a)+4'b0001) % 3)+1; endcase end endmodule