FORK-JOIN combinations in FOR loop (we have to extremely careful)
Combination Code Result
1 module tb;
initial time=0, i =5
begin time=0, i =5
for (int i=0; i<5; i++)
begin time=0, i =5
fork time=0, i =5
$display ("time=%0t, i =%0d”, i); time=0, i =5
join_none
end
end
endmodule
2 module tb;
initial time=0, i=5
begin
time=0, i=5
for (int i=0; i<5; i++)
begin time=0, i=5
fork time=0, i=5
#5; $display ("time=%0t, i=%0d", $time, i);
time=0, i=5
join_none
end
end
endmodule
3 module tb;
integer i;
initial time=0, i=1
begin time=0, i=2
for (i=0; i<5; i++)
time=0, i=3
begin
#0; time=0, i=4
fork time=0, i=5
$display ("time=%0t, i=%0d", $time, i);
join_none
end
end
endmodule
4 module tb;
static int j;
initial
time=0, j=5
begin
for (int i=0; i<5; i++) time=0, j=5
begin time=0, j=5
fork
time=0, j=5
j = i;
$display ("time=%0t, j=%0d", $time, j); time=0, j=5
join_none
end
end
endmodule
5 module tb;
initial
begin
time=0, j=4
for (int i=0; i<5; i++)
begin time=0, j=3
automatic int j = i; time=0, j=2
fork time=0, j=1
$display ("time=%0t, j=%0d", $time, j);
join_none time=0, j=0
end
end
endmodule
6 module tb;
initial
begin time=0, j=4
for (int i=0; i<5; i++) time=0, j=4
begin
time=0, j=4
int j;
j = i; time=0, j=4
fork time=0, j=4
$display ("time=%0t, i=%0d", $time, j);
join_none
end
end
endmodule
7 module tb;
initial time=0, j=4
begin
time=0, j=3
for (int i=0; i<5; i++)
begin time=0, j=2
fork time=0, j=1
automatic int j=i; time=0, j=0
$display ("time=%0t, j=%0d", $time, j);
join_none
end
end
endmodule
8 module tb;
initial
begin
for (int i=0; i<5; i++)
begin time=0, j=5
fork time=0, j=5
begin
time=0, j=5
automatic int j=i;
$display ("time=%0t, i=%0d", $time, j); time=0, j=5
end time=0, j=5
join_none
end
end
endmodule
9 module tb;
initial
begin
for (int i=0; i<5; i++)
begin time=0, i=0
fork time=0, i=1
begin
time=0, i=2
$display ("time=%0t, i=%0d", $time, i);
end time=0, i=3
join_none time=0, i=4
wait fork;
end
end
endmodule
10 module tb;
initial
begin
for (int i=0; i<5; i++)
begin time=0, i=0
fork time=0, i=1
begin
time=0, i=2
$display ("time=%0t, i=%0d", $time, i);
end time=0, i=3
join_any time=0, i=4
wait fork;
end
end
endmodule
11 module tb;
initial
begin
for (int i=0; i<5; i++)
begin time=0, i=0
fork time=0, i=1
begin
time=0, i=2
$display ("time=%0t, i=%0d", $time, i);
end time=0, i=3
join time=0, i=4
end
end
endmodule
EDA LINK: https://www.edaplayground.com/x/9Abt