// nandgame ALU `timescale 1us/1us `include "nandgame_types.v" `include "arith_unit.sv" `include "logic_unit.sv" module alu #( parameter DATA_WIDTH = 16 ) ( input [(DATA_WIDTH-1):0] X, input [(DATA_WIDTH-1):0] Y, input logic u, input logic [1:0] opcode, input logic zx, input logic sw, output logic [(DATA_WIDTH-1):0] RES ); logic [(DATA_WIDTH-1):0] MyX; logic [(DATA_WIDTH-1):0] MyY; logic [(DATA_WIDTH-1):0] MyResA; logic [(DATA_WIDTH-1):0] MyResL; assign MyX = zx ? 0 : sw ? Y : X; assign MyY = sw ? X : Y; arith_unit au ( .X(MyX), .Y(MyY), .RES(MyResA), .operation(opcode) ); logic_unit lu ( .X(MyX), .Y(MyY), .RES(MyResL), .operation(opcode) ); assign RES = u ? MyResA : MyResL; endmodule