bug1 verilog中task默认是静态的, fork join中调用同一个参数化任务时冲突

 1 module test;
 2   reg clk;
 3 
 4   initial begin
 5     clk <=0;
 6     forever #10 clk <= ~clk;
 7   end
 8 
 9   initial begin
10 
11     fork
12       waita(0);
13       waita(1);
14     join
15   end 
16 
17 task waita;
18   input int c;
19   $display("c=%0d", c);
20 endtask

 

输出结果:

1   c=0
2   c=0

 

由于task是静态的,两次调用的waita是内存中的同一段代码,其局部变量是相同的。

同一时刻同时给局部变量c传递0和1,最后c只能是0或1

posted @ 2022-01-05 17:43  liutang2010  阅读(175)  评论(0)    收藏  举报