System verilog 当一个任务中存在多个实例时,当禁用块存在时,类任务行为错误

System verilog 当一个任务中存在多个实例时,当禁用块存在时,类任务行为错误,system-verilog,System Verilog,几周来,我一直在调试systemverilog代码中的一个神秘错误。 我的同事帮助我,发现禁用block_name语句导致了这些奇怪的行为 我的搜索得到Dave的以下评论: “如何从启动的多个线程中杀死一个线程并等待所有线程完成”(Mentor Verification Academy) 需要注意的一件事是,如果您试图将此代码移动到一个类中,并且该类有多个实例,那么disable语句将杀死所有名为Th3的线程 这解释了为什么我的systemverilog代码表现不好 但我现在不知道为什么syst

几周来,我一直在调试systemverilog代码中的一个神秘错误。 我的同事帮助我,发现禁用block_name语句导致了这些奇怪的行为

我的搜索得到Dave的以下评论: “如何从启动的多个线程中杀死一个线程并等待所有线程完成”(Mentor Verification Academy)

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

这解释了为什么我的systemverilog代码表现不好

但我现在不知道为什么systemverilog标准会指定这种方式。 有没有任何理由可以解释为什么标准是这样定义的?
由于类中的任务隐式声明为自动,我假设每个实例都是完全独立的。

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


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

谢谢Dave回答我的问题。Systemverilog从原始Verilog继承了货物和货物(限制)。我现在明白了为什么Systemverilog引入了“继续”和“中断”。