我有一组模块,比如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
通过这样做,我可以使用generate语句轻松生成更高级别模块中的代码。有没有人尝试过此方法?它可以像我想要的那样表现吗?合成后,它是否相当于强力溶液?
答案 0 :(得分:1)
这样的东西?
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用于基于某些参数(例如在参数化模块中)生成代码的重复和条件部分。例如:
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 时包含此内容非常明智,它简化了调试。)
特别回答你在这里提出的问题很难。您没有提供足够的信息来了解您的需求。