Поведенческий 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) );
Другие вопросы по тегам