静态任务函数声明中的引用参数是非法的是什么意思?

Reference argument is illegal inside static task function declaration what is meaning?

Resource

program main(); 
int a; 

initial 
begin 
#10 a = 10; 
#10 a = 20; 
#10 a = 30; 
#10 $finish; 
end 

task pass_by_val(int i); 
forever 
@i $display("pass_by_val: I is %0d",i); 
endtask 


task pass_by_ref(ref int i); 
forever 
@i $display("pass_by_ref: I is %0d",i); 
endtask 

initial 
pass_by_val(a); 

initial 
pass_by_ref(a);

我指的是上面的网站 运行 但我有一些这样的错误消息。

Reference argument is illegal inside static task function declaration.

通常 tasks/functions inside module/programs 默认是静态的,根据第 13.5.2 节 IEEE 1800 - 2012

的引用传递

It shall be illegal to use argument passing by reference for subroutines with a lifetime of static.

要解决仅使用引用传递 'ref' 到自动 task/function

task automatic pass_by_ref(ref int i); 
forever 
@i $display("pass_by_ref: I is %0d",i); 
endtask