请考虑SV接口中的代码:
genvar i;
generate
for (i = 0; i < 2; i++) begin : g1
task ab ();
///< something here
endtask
end
endgenerate根据LRM 1800-2012,第27.6节,从技术上讲,我应该能够通过以下方式访问这项任务(在监视器vif中考虑的是一个虚拟接口实例):
vif.g1[i].ab();这是正确的吗?如果是,那么模拟器有问题支持它,因为它报告找不到vif.g1 (精化时间)
我也尝试过它而没有命名块,它应该是:
vif.genblk1[i].ab();但没有运气。这里有什么问题?我认为监视器或任何其他类都有创建运行时的句柄,但是接口仍然应该是静态编译的,接口的所有元素都应该是可用的。
发布于 2016-06-25 03:12:45
您不能使用[]中的变量来引用任务。在模拟开始之前,生成循环在精化过程中会被夷为平地。
vif.g1[0].ab;这里是一个完整的完整的例子。请试着用同样的方式张贴你的问题。
interface itf;
for (genvar ii = 0; ii < 2; ii++) begin : g1
task ab ();
$display("%m");
endtask // ab
end : g1
endinterface : itf
module top;
itf i1();
virtual itf vif;
initial begin
vif = i1;
vif.g1[0].ab;
end
endmodule : tophttps://stackoverflow.com/questions/38024304
复制相似问题