动态数组可以在systemverilog中的generate for循环内使用吗

时间:2018-06-20 09:32:39

标签: verilog system-verilog

在将动态变量成员作为端口传递给generate进行循环实例化时,

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

发生以下错误:

  
      
  1. 非法的非恒定生成循环条件。
  2.   
  3. 不允许将动态变量(clk)的成员用作实际端口。
  4.   

虽然将静态数组作为端口传递给内部时会生成循环实例化,但没有此类错误。 为什么动态数组会出现问题?

不能在generate循环内使用它们吗?如果没有,那么与我要实例化模块“ n”次相同,还有什么替代方法?

1 个答案:

答案 0 :(得分:0)

静态数组的大小在编译时是固定的。动态数组的大小在运行时是固定的(也可以在运行时更改)。

generate循环的边界必须为 static 。也就是说,它们必须在编译时固定。如果考虑一下,其原因很明显:generate loop的边界控制着要模拟或综合多少硬件。您不能有一个电路的大小会根据某些输入而变化。

因此,您需要使数组和generate循环的边界保持静态。也就是说,您需要在编译时固定数组的大小和generate循环的边界。