Verilog,当我使用generate实例化模块时如何传递不同的参数?

问题描述 投票:0回答:2

我有一个关于参数传递的问题。我用generate来做模块实例化。但是如何将不同的参数传递给每个模块?例如:

generate
   for (i=0;i<N;i=i+1) begin:ModIns
       Mod #(.p1(?),.p2(?)) M (
       // Signal connection
       );
   end
endgenerate

对于N个模块,每个模块具有不同的p1和p2。怎么做?顺便说一句,参数的数量非常大,我可以将参数作为文件传递吗?谢谢!

parameter-passing verilog generate
2个回答
0
投票

第一:不,你不能从文件中读取它。必须在编译时知道参数,并且文件只能在运行时读取。

您可以从genvar派生它们或通过层次结构传递它们,但随后它或多或少地停止。也许你想要做的事情可以用不同的方式解决,但你在这里为我们概述的问题的范围是有限的。

一如既往:告诉我们您的问题,而不是您的解决方案。


0
投票

在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放在文件中。

© www.soinside.com 2019 - 2024. All rights reserved.