// nandgame logic unit `timescale 1us/1us `include "nandgame_types.v" module logic_unit #( parameter DATA_WIDTH = 16 ) ( input [(DATA_WIDTH-1):0] X, input [(DATA_WIDTH-1):0] Y, input LogicCode operation, output logic [(DATA_WIDTH-1):0] RES ); // assign RES = operation == LOGIC_AND ? (X & Y) : // operation == LOGIC_OR ? (X | Y) : // operation == LOGIC_XOR ? (X ^ Y) : // operation == LOGIC_NEGT ? (~X) : 0; always_comb begin case (operation) LOGIC_AND: RES = X & Y; LOGIC_OR: RES = X | Y; LOGIC_XOR: RES = X ^ Y; LOGIC_NEGT: RES = ~X; default: RES = 0; endcase end endmodule