verilog中的模块选择
module selection in verilog
我有一组模块,比如 module_1、module_2、... module_N。它们执行相似但不同的逻辑操作 (out = logic_n)。但是,由于 N 非常大(数千),因此通过手动实例化它们在更高级别的模块中使用它们是不可行的。我试图为此编写 python 代码。我还想知道是否可以为此目的使用参数化模块?我的意思是这样的。
module module_generic(in, out)
parameter module_number;
case (module_number)
0 : out = logic_1;
1 : out = logic_2;
...
N : out = logic_N;
endcase
endmodule
通过这样做,我可以使用生成语句轻松生成更高级别模块中的代码。有没有人尝试过这种方法?它能像我想要的那样表现吗?综合后是否等同于暴力破解?
是这样的吗?
module module_generic#(
parameter module_number = 0
)(
input logic in,
output logic out);
generate
case (module_number)
0 : assign out = in;
//1 : assign out = logic_2;
//...
//N : assign out = logic_N;
endcase
endgenerate
endmodule
现在可以在您的代码中使用参数 module_number 的不同输入来实例化此模块。除非每个 logic_X 使用大量相同的代码,否则我真的不明白您为什么要这样做。不过,据我从你的问题中了解到,这应该可以做到。
编辑回复评论:
生成用于根据某些参数(例如在参数化模块中)生成 代码的重复和条件部分。例如:
generate
if(INPUT_PARAMETER)
assign out = in;
else //Tie low
assign out = 0;
endgenerate
或
genvar N;
generate
for(N = 0; N < INPUT_PARAMETER; N++) begin :la_someModule
someModule(.out(out[N]), .in(in[N]));
end
endgenerate
或两者兼而有之。 (注意标签 la_someModule
。在使用 generate for 时包含这个非常聪明,它简化了调试。)
具体回答您在这里提出的问题很难。您没有提供足够的信息让我了解您的需求。
我有一组模块,比如 module_1、module_2、... module_N。它们执行相似但不同的逻辑操作 (out = logic_n)。但是,由于 N 非常大(数千),因此通过手动实例化它们在更高级别的模块中使用它们是不可行的。我试图为此编写 python 代码。我还想知道是否可以为此目的使用参数化模块?我的意思是这样的。
module module_generic(in, out)
parameter module_number;
case (module_number)
0 : out = logic_1;
1 : out = logic_2;
...
N : out = logic_N;
endcase
endmodule
通过这样做,我可以使用生成语句轻松生成更高级别模块中的代码。有没有人尝试过这种方法?它能像我想要的那样表现吗?综合后是否等同于暴力破解?
是这样的吗?
module module_generic#(
parameter module_number = 0
)(
input logic in,
output logic out);
generate
case (module_number)
0 : assign out = in;
//1 : assign out = logic_2;
//...
//N : assign out = logic_N;
endcase
endgenerate
endmodule
现在可以在您的代码中使用参数 module_number 的不同输入来实例化此模块。除非每个 logic_X 使用大量相同的代码,否则我真的不明白您为什么要这样做。不过,据我从你的问题中了解到,这应该可以做到。
编辑回复评论: 生成用于根据某些参数(例如在参数化模块中)生成 代码的重复和条件部分。例如:
generate
if(INPUT_PARAMETER)
assign out = in;
else //Tie low
assign out = 0;
endgenerate
或
genvar N;
generate
for(N = 0; N < INPUT_PARAMETER; N++) begin :la_someModule
someModule(.out(out[N]), .in(in[N]));
end
endgenerate
或两者兼而有之。 (注意标签 la_someModule
。在使用 generate for 时包含这个非常聪明,它简化了调试。)
具体回答您在这里提出的问题很难。您没有提供足够的信息让我了解您的需求。