在Generatefor循环实例化中,将动态变量成员作为端口传递,
int clk[];
initial begin
N=clk.size();
end
initial begin
clk=new[4];
end
always @(*) begin
clk[0]=clk0_out;
clk[1]=clk1_out;
clk[2]=clk2_out;
clk[3]=clk3_out;
end
genvar i;
generate
for(i=0;i<N;i=i+1) begin: monitor_call
clock_mon cm1(.clock(clk[i]),.reset(reset));
end
endgenerate发生了以下错误:
当将静态数组作为生成循环实例化内部的端口传递时,没有这样的错误。为什么动态数组会出现问题?
它们不能在生成循环中使用吗?如果不是,我想要实例化模块'n‘时,有什么替代方案呢?
发布于 2018-06-20 12:47:11
静态数组的大小在编译时是固定的。动态数组的大小在运行时是固定的(也可以在运行时更改)。
生成循环的边界必须是静态的。也就是说,它们必须在编译时被修复。如果您想一想,原因是显而易见的:生成循环控制的界限,有多少硬件被模拟或合成。你不能有一个电路,它的大小可以根据某些输入变化。
因此,您需要使数组和生成循环的边界保持静态。也就是说,您需要在编译时修复数组的大小和generate循环的边界。
https://stackoverflow.com/questions/50944861
复制相似问题