module mux2 (S,A,B,Y); input S; input A,B; output reg Y; always @(*) Y = (S)? B : A; endmodule module mux4 ( S, D, Y ); input[1:0] S; input[3:0] D; output Y; reg Y; wire[1:0] S; wire[3:0] D; always @* begin case( S ) 0 : Y = D[0]; 1 : Y = D[1]; 2 : Y = D[2]; 3 : Y = D[3]; endcase end endmodule module mux8 ( S, D, Y ); input[2:0] S; input[7:0] D; output Y; reg Y; wire[2:0] S; wire[7:0] D; always @* begin case( S ) 0 : Y = D[0]; 1 : Y = D[1]; 2 : Y = D[2]; 3 : Y = D[3]; 4 : Y = D[4]; 5 : Y = D[5]; 6 : Y = D[6]; 7 : Y = D[7]; endcase end endmodule module mux16 (D, S, Y); input [15:0] D; input [3:0] S; output Y; assign Y = D[S]; endmodule