当多个实例中的任务中存在禁用块时,类任务行为不当

时间:2018-10-26 00:42:30

标签: system-verilog

我已经在系统verilog代码中调试了一个神秘的错误数周了。 我的同事帮了我,发现 disable block_name 语句引起了奇怪的行为。

我的搜索产生了戴夫的以下评论: “如何从启动的多个线程中杀死一个线程并等待所有线程完成”(Mentor验证学院)

  

您需要注意的一件事是,如果您尝试将这段代码移到一个类中,并且该类有多个实例,则disable语句将杀死所有名为Th3的线程。

这说明了为什么我的系统verilog代码行为异常。

但是我现在不知道为什么systemverilog标准指定了这种方式。 为何以这种方式定义标准? 由于类中的任务被隐式声明为自动,因此我假定每个实例都是完全独立的。

1 个答案:

答案 0 :(得分:2)

此行为来自Verilog,并且必须保持这种方式以实现向后兼容。 disable语句可以在禁用范围之外使用,并且没有语法可以指定范围的特定实例。

这种情况与在已命名的块或任务中声明静态变量有关。用于访问该静态变量的作用域名称也为 static