我有一个关于参数传递的问题。我用generate来做模块实例化。但是如何将不同的参数传递给每个模块?例如:
generate
for (i=0;i<N;i=i+1) begin:ModIns
Mod #(.p1(?),.p2(?)) M (
// Signal connection
);
end
endgenerate
对于N个模块,每个模块具有不同的p1和p2。怎么做?顺便说一句,参数的数量非常大,我可以将参数作为文件传递吗?谢谢!
第一:不,你不能从文件中读取它。必须在编译时知道参数,并且文件只能在运行时读取。
您可以从genvar派生它们或通过层次结构传递它们,但随后它或多或少地停止。也许你想要做的事情可以用不同的方式解决,但你在这里为我们概述的问题的范围是有限的。
一如既往:告诉我们您的问题,而不是您的解决方案。
在SystemVerilog中执行此操作会更容易,因为参数可以是一个数组,并且您的生成循环可以为循环的每次迭代选择一个元素。在Verilog中,您可以将元素打包成位向量,并且生成循环可以为循环的每次迭代选择一个切片。
parameter A1={8'd1, 8'd2, 8'd3, 8'd4, ...};
parameter A2={8'd9, 8'd8, 8'd7, 8'd6, ...};
generate
for (i=0;i<N;i=i+1) begin:ModIns
Mod #(.p1(A1[i*8+:8),.p2(A2[i*8+:8])) M (
// Signal connection
);
end
endgenerate
如果要从文件中定义参数,可以将参数声明放在单独的文件中,并将`include
放在文件中。