繁体   English   中英

我可以在SystemVerilog的initial中使用generate-endgenerate块吗?

[英]Can I use generate-endgenerate block inside initial in SystemVerilog?

例如

initial
begin

generate
for(genvar i; i < 4; i++)
//Code
endgenerate

end //initial

使用QuestaSim和该概念时出现错误。 “临近生成:语法错误,意外生成”

generate阐述时间块进行评估。 initialalways和其他过程块在零模拟时间 (即运行时)开始时。 参考Systemverilog IEEE 1800-2012

生成方案在设计详细过程进行评估 尽管生成方案使用的语法类似于行为声明,但重要的是要认识到它们不会仿真时 执行

在精心设计的时候对它们进行评估,并在仿真开始之前确定结果 因此,生成方案中的所有表达式都应为常量表达式 ,并在详细说明时 确定

在Verilog中, 实例化模块意味着在板上添加了额外的硬件

必须在仿真开始之前 (即在编译时)添加此硬件。 不能在运行时添加/删除硬件 您可以有条件地实例化模块或乘以实例模块,但决不能在运行时。

有关错误的想法,请参考“ 生成块语法错误”问题。 另外,请参考此问题以了解生成和genvar 有关更多信息,请参考IEEE 1800-2012第27章。


编辑

要创建并传递多个接口实例接口实例总数必须由某个参数宏控制 您可以在generate块中的for循环中使用此参数来创建不同的实例 ,并使用不同的键来设置每个实例 ,如下所示:

  // Generate multiple instances of interface
  genvar i;
  generate
    for(i=0;i<NUM_OF_INTERFACES;i++)
    begin
      // Generate clk with different period for each instance
      always #(i+1) clk[i] = ~clk[i];

      inter in(clk[i]);  // Create multiple instances here

    initial
      begin
        // Set each and every instance
        uvm_config_db#(virtual inter)::set(null,"*",$sformatf("in_%0d",i),in);
      end
    end
  endgenerate

EDAPlayground多接口链接中创建了一个完整的示例。 这个问题可以参考创建多个实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM