blob: 5e1086506753af614faf7b66ba4124590d698725 [file] [log] [blame]
module Mux #(
parameter WIDTH = 1,
parameter INPUTS = 2,
parameter DEFAULT = 'b0
)(
input wire[INPUTS-1:0] select,
input wire[(WIDTH*INPUTS)-1:0] in,
output reg[WIDTH-1:0] out,
output wire outputEnable
);
generate
if (INPUTS == 1) begin
always @(*) begin
case (1'b1)
select[0]: out <= in[WIDTH-1:0];
default: out <= DEFAULT;
endcase
end
end else if (INPUTS == 2) begin
always @(*) begin
case (1'b1)
select[0]: out <= in[WIDTH-1:0];
select[1]: out <= in[(1 * WIDTH) + WIDTH - 1:1 * WIDTH];
default: out <= DEFAULT;
endcase
end
end else if (INPUTS == 3) begin
always @(*) begin
case (1'b1)
select[0]: out <= in[WIDTH-1:0];
select[1]: out <= in[(1 * WIDTH) + WIDTH - 1:1 * WIDTH];
select[2]: out <= in[(2 * WIDTH) + WIDTH - 1:2 * WIDTH];
default: out <= DEFAULT;
endcase
end
end else if (INPUTS == 4) begin
always @(*) begin
case (1'b1)
select[0]: out <= in[WIDTH-1:0];
select[1]: out <= in[(1 * WIDTH) + WIDTH - 1:1 * WIDTH];
select[2]: out <= in[(2 * WIDTH) + WIDTH - 1:2 * WIDTH];
select[3]: out <= in[(3 * WIDTH) + WIDTH - 1:3 * WIDTH];
default: out <= DEFAULT;
endcase
end
end else if (INPUTS == 5) begin
always @(*) begin
case (1'b1)
select[0]: out <= in[WIDTH-1:0];
select[1]: out <= in[(1 * WIDTH) + WIDTH - 1:1 * WIDTH];
select[2]: out <= in[(2 * WIDTH) + WIDTH - 1:2 * WIDTH];
select[3]: out <= in[(3 * WIDTH) + WIDTH - 1:3 * WIDTH];
select[4]: out <= in[(4 * WIDTH) + WIDTH - 1:4 * WIDTH];
default: out <= DEFAULT;
endcase
end
end else if (INPUTS == 6) begin
always @(*) begin
case (1'b1)
select[0]: out <= in[WIDTH-1:0];
select[1]: out <= in[(1 * WIDTH) + WIDTH - 1:1 * WIDTH];
select[2]: out <= in[(2 * WIDTH) + WIDTH - 1:2 * WIDTH];
select[3]: out <= in[(3 * WIDTH) + WIDTH - 1:3 * WIDTH];
select[4]: out <= in[(4 * WIDTH) + WIDTH - 1:4 * WIDTH];
select[5]: out <= in[(5 * WIDTH) + WIDTH - 1:5 * WIDTH];
default: out <= DEFAULT;
endcase
end
end else if (INPUTS == 7) begin
always @(*) begin
case (1'b1)
select[0]: out <= in[WIDTH-1:0];
select[1]: out <= in[(1 * WIDTH) + WIDTH - 1:1 * WIDTH];
select[2]: out <= in[(2 * WIDTH) + WIDTH - 1:2 * WIDTH];
select[3]: out <= in[(3 * WIDTH) + WIDTH - 1:3 * WIDTH];
select[4]: out <= in[(4 * WIDTH) + WIDTH - 1:4 * WIDTH];
select[5]: out <= in[(5 * WIDTH) + WIDTH - 1:5 * WIDTH];
select[6]: out <= in[(6 * WIDTH) + WIDTH - 1:6 * WIDTH];
default: out <= DEFAULT;
endcase
end
end else if (INPUTS == 8) begin
always @(*) begin
case (1'b1)
select[0]: out <= in[WIDTH-1:0];
select[1]: out <= in[(1 * WIDTH) + WIDTH - 1:1 * WIDTH];
select[2]: out <= in[(2 * WIDTH) + WIDTH - 1:2 * WIDTH];
select[3]: out <= in[(3 * WIDTH) + WIDTH - 1:3 * WIDTH];
select[4]: out <= in[(4 * WIDTH) + WIDTH - 1:4 * WIDTH];
select[5]: out <= in[(5 * WIDTH) + WIDTH - 1:5 * WIDTH];
select[6]: out <= in[(6 * WIDTH) + WIDTH - 1:6 * WIDTH];
select[7]: out <= in[(7 * WIDTH) + WIDTH - 1:7 * WIDTH];
default: out <= DEFAULT;
endcase
end
end else begin
// integer i;
// always @(*) begin
// for (i = 0; i < INPUTS; i = i + 1) begin
// if (select[i]) out <= in[(i * WIDTH) + WIDTH - 1:i * WIDTH];
// end
// end
end
endgenerate
assign outputEnable = |select;
endmodule