module alu (input [31:0] in_a, in_b, input [3:0] func, output reg [31:0] out); `include "alu_func.vh" reg signed [31:0] s_in_a; reg signed [31:0] s_in_b; always@ (*) begin s_in_a = in_a; s_in_b = in_b; case (func) ADD : out <= in_a + in_b; SUB : out <= in_a - in_b; SLL : out <= in_a << in_b; SLT : out <= (s_in_a < s_in_b) ? 1 : 0; SLTU : out <= (in_a < in_b) ? 1 : 0; XOR : out <= in_a ^ in_b; SRL : out <= in_a >> in_b; SRA : out <= s_in_a >>> in_b; OR : out <= in_a | in_b; AND : out <= in_a & in_b; default : out <= 32'b0; endcase end endmodule