Поведенческий verilog: создание нескольких муксов с 1 модулем
Если у меня есть модуль, определенный следующим образом:
module mux_1x2(in, out, select);
и мне нужно 32 из них, я знаю, что с помощью структурного кодирования я могу сделать:
mux_1x2 mux01(in[0], out[0], select);
mux_1s2 mux02(in[1], out[1], select);
etc...
Но как я могу использовать поведенческое программирование, чтобы сделать 32 из них в каком-то цикле без необходимости явно определять каждый из них?
редактировать: только для контекста, я пытаюсь сделать двухступенчатый 64-битный сумматор переноса
1 ответ
Решение
Вы можете использовать блок генерации: (IEEE1364-2001 и выше)
genvar gidx;
generate
for(gidx=0; gidx<32; gidx=gidx+1) begin : loop
mux_1x2 mux(in[gidx], out[gidx], select);
end
endgenerate
Или массив экземпляр: (IEEE1364-1995 и выше)
mux_1x2 mux[0:31] ( .in(in) , .out(out) , .select(select) );
Или параметризовать:
module mux_1x2 #(parameter WIDTH=1) (input [WIDTH-1:0] in, output [WIDTH-1:0] out, input select);
// ...
endmodule
// ...
mux_1x2 #(32) mux ( .in(in) , .out(out) , .select(select) );