`include "opcodes.v" `timescale 100ps / 10ps module alu( zflag, result, inputA, inputB, func); output [15:0] result; output zflag; input [15:0] inputA, inputB; input [3:0] func; reg [15:0] result; wire zflag; assign zflag = (result == 0); always @(inputA or inputB or func) case (func) `justB : result = inputB; `AaddB : result = inputA + inputB; `AsubB : result = inputA - inputB; `AandB : result = inputA & inputB; `AorB : result = inputA | inputB; `notA : result = ~inputA; `lslA : result = inputA << 1; `lsrA : result = inputA >> 1; default : result = inputA; endcase endmodule