例如
initial
begin
generate
for(genvar i; i < 4; i++)
//Code
endgenerate
end //initial
我在使用QuestaSim时遇到错误。 &#34;近生成:语法错误,意外生成&#34;
答案 0 :(得分:4)
否。 generate
块。虽然initial
,always
和其他程序块从零模拟时间开始,即运行时。参考Systemverilog IEEE 1800-2012:
在详细设计期间评估生成方案。 虽然生成方案使用类似于行为的语法 声明,重要的是要认识到他们不执行 模拟时间。
他们在精心制作时评估,并且 结果在模拟开始之前确定。所以,一切 生成方案中的表达式应为常量表达式, 确定性 详细时间。
在Verilog中,实例化模块意味着将额外硬件添加到主板。
必须在模拟开始之前添加此硬件(即在编译时)。您在运行时无法添加/删除硬件。您可以有条件地实例化模块或乘法实例化它,但绝不能在运行时。
请参阅generate block syntax error问题,了解您的错误。另请参阅this question for generate and genvar understanding。有关详情,请参阅IEEE 1800-2012第27章。
编辑:
要创建并传递多个接口实例,接口实例的总数必须由某些参数或宏<管理< / em>的。您可以在for
块的generate
循环中使用此参数来创建不同的实例,并使用不同的键设置每个参数,如下所示:
// 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 Multiple Interface链接处创建了一个完整的示例。可以从this question引用创建多个实例。