首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在systemverilog中,动态数组可以在生成for循环中使用吗?

在systemverilog中,动态数组可以在生成for循环中使用吗?
EN

Stack Overflow用户
提问于 2018-06-20 09:32:39
回答 1查看 833关注 0票数 1

在Generatefor循环实例化中,将动态变量成员作为端口传递,

代码语言:javascript
复制
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. 动态变量(clk)的成员不允许作为实际端口。

当将静态数组作为生成循环实例化内部的端口传递时,没有这样的错误。为什么动态数组会出现问题?

它们不能在生成循环中使用吗?如果不是,我想要实例化模块'n‘时,有什么替代方案呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 12:47:11

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

生成循环的边界必须是静态的。也就是说,它们必须在编译时被修复。如果您想一想,原因是显而易见的:生成循环控制的界限,有多少硬件被模拟或合成。你不能有一个电路,它的大小可以根据某些输入变化。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50944861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档