我对禁用其他进程的"fork disable“有一个问题。我已经把它包装在fork join".is“中了,有没有其他的解决方案?那就是代理中有问题的代码:
fork
begin
fork
begin
this.collect_tr();
ap.write(collected_trans);
collected_trans.i2c_trans_cg.sample();
end
begin
wait (this.flow_is_ok == 1'b0);
end
join_any;
disable fork;
end
join
“禁用”阻止了我的参考模型中的另一个分支的发生。(当我删除代理的禁用分支时,RM中的分支确实发生了。我尝试了一些打印,它发生在同一个时钟)
发布于 2014-03-25 17:21:02
我解决了这个问题。参考模型中禁用的"other fork“是从参考模型中的ap write()函数实现中调用的。由于代理中的ap.write()被禁用,因此参考模型中的write()也被禁用。所以我只是把ap.write()移到了fork之外。
fork
begin
fork
begin
this.collect_tr();
//ap.write(collected_trans);
//collected_trans.i2c_trans_cg.sample();
end
begin
wait (this.flow_is_ok == 1'b0);
end
join_any;
disable fork;
end
join
if(this.flow_is_ok == 1'b1)begin
ap.write(collected_trans);
collected_trans.i2c_trans_cg.sample();
end
`
发布于 2014-03-25 20:27:19
如果要禁用内部fork,可以命名fork块,然后禁用已命名的块。
示例:
fork: outer
begin
#10;
$display($stime, " outer");
end
begin
fork: inner
begin
#5;
$display($stime, " inner 1");
end
begin
#7;
$display($stime, " inner 2");
end
join_any
disable inner;
end
join
输出:
# 5 inner 1
# 10 outer
完整的可运行示例如下:http://www.edaplayground.com/x/26d
https://stackoverflow.com/questions/22628088
复制相似问题