1<?
2    if (elem.Bits = 1) {
3        moduleName = format("Mux_%dx1", 1 << elem.'Selector Bits');
4        export bitRange := "";
5    }
6    else {
7        generics[0] := "Bits";
8        moduleName = format("Mux_%dx1_NBits", 1 << elem.'Selector Bits');
9        export bitRange := "[(Bits - 1):0] ";
10    }
11
12    selRange := format("[%d:0] ", elem.'Selector Bits' - 1);
13    inCount := 1 << elem.'Selector Bits';
14?>
15module <?= moduleName ?>
16<?- if (elem.Bits > 1) { ?> #(
17    parameter Bits = 2
18)
19<?- } ?>
20(
21    input <?= selRange ?>sel,
22    <? for (n:=0; n < inCount; n++) { -?>
23    input <?= bitRange ?>in_<?= n ?>,
24    <? } -?>
25    output reg <?= bitRange ?>out
26);
27    always @ (*) begin
28        case (sel)
29    <?- for (n:=0; n < inCount; n++) { ?>
30            <?= elem.'Selector Bits' ?>'h<?= format("%x", n) ?>: out = in_<?= n ?>;
31    <?- } ?>
32            default:
33                out = 'h0;
34        endcase
35    end
36endmodule
37