class forever_ex;
int dt2, dt3;
task forever_lp_check();
forever begin
$display("Inside forever loop: erealtime = %0t, time = %0t", $realtime, $time);
@(dt2)
$display("dt2=%d", dt2);
dt3 = dt2;
$display(dt2, dt3);
end
endtask
task incr_dt2();
for(int ii=0; ii<10; ii++) begin
//#1ns;
dt2 +=10;
$display("Inside dt2 incr : realtime = %0t, time = %0t", $realtime, $time);
$display(dt2);
end
endtask
endclass
module top();
initial begin
forever_ex forever_ex_ii;
forever_ex_ii = new();
fork
$display("Before forever loop call: realtime = %0t, time = %0t", $realtime, $time);
forever_ex_ii.forever_lp_check();
join_none
$display("Before d2 incr call: realtime = %0t, time = %0t", $realtime, $time);
forever_ex_ii.incr_dt2();
$display("here1");
end
endmodule
Result:
Before d2 incr call: realtime = 0, time = 0
Inside dt2 incr : realtime = 0, time = 0
10
Inside dt2 incr : realtime = 0, time = 0
20
Inside dt2 incr : realtime = 0, time = 0
30
Inside dt2 incr : realtime = 0, time = 0
40
Inside dt2 incr : realtime = 0, time = 0
50
Inside dt2 incr : realtime = 0, time = 0
60
Inside dt2 incr : realtime = 0, time = 0
70
Inside dt2 incr : realtime = 0, time = 0
80
Inside dt2 incr : realtime = 0, time = 0
90
Inside dt2 incr : realtime = 0, time = 0
100
here1
Before forever loop call: realtime = 0, time = 0
Inside forever loop: erealtime = 0, time = 0
Question:
Although I understand the execution of the forever_lp_check() task call within fork-join_none can be random - either before or after incr_dt2() is executed, what I cannot understand is how can for loop increment at 0 realtime as well as sim time. Could you please help explaining.