`timescale 1 ps / 1 ps module mux_2_to_1 ( input sel_i, input [1:0] dat_i, output dat_o ); assign dat_o = sel_i && dat_i[1] || ~sel_i && dat_i[0]; endmodule module mux_n_to_1 #( parameter sel_w = 4, parameter n_inputs = 2**sel_w ) ( input [n_inputs-1:0] inputs_i, input [sel_w-1:0] sel_i, output output_o ); genvar i,j; generate if(sel_w == 1) begin mux_2_to_1 mux_simple ( .sel_i(sel_i), .dat_i(inputs_i), .dat_o(output_o) ); end else begin wire [n_inputs-2:0] inter_w; for(i=0; i