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
浙公网安备 33010602011771号