行为 verilog:使用 1 个模块创建多个多路复用器
Behavioral verilog: creating multiple muxes with 1 module
如果我有一个这样定义的模块:
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 个,而不必显式定义每个?
编辑:仅供参考,我正在尝试制作一个 2 级 64 位进位-select 加法器
您可以使用生成块:(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) );
如果我有一个这样定义的模块:
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 个,而不必显式定义每个?
编辑:仅供参考,我正在尝试制作一个 2 级 64 位进位-select 加法器
您可以使用生成块:(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) );