Professional Documents
Culture Documents
Systemverilog 1
Memory Read
join_any join_none
begin
fork
fork
…
other blocks …
… continue as dynamic
join_none // no waiting at all
… threads
@(sig1);
join_any // any block finished end
fork… join : Example 1
initial begin
$display("**********After Fork..Join**********");
$finish;
end
fork… join : Example 2
initial begin
#7 $display($time,"\tThread E");
$display("**********After Fork..Join**********");
fork… join_any: Example 1
initial begin
fork-join_any: waits for the first of
$display("********Before Fork..Join_any********"); all the parallel processes to complete
before continuing the sequential process
fork
#15 $display($time,"\tThread A");
#5 $display($time,"\tThread B");
#10 $display($time,"\tThread C");
Join_any
********Before Fork..Join_any********
#2 $display($time,"\tThread D"); 5 Thread B
#12 $display($time,"\tThread E"); 7 Thread D
10 Thread C
$display("********After Fork..Join_any**********"); 15 Thread A
19 Thread E
end ********After Fork..Join_any**********
fork… join_any: Example 2
initial begin
$display("********Before Fork..Join_any********");
****** Before Fork..Join_any ******
fork
begin 10 Thread C
#20 $display($time,"\t Thread A"); 12 Thread D
#25 $display($time,"\t Thread B"); 16 Thread E
end 19 Thread F
begin *******After Fork..Join_any*******
#10 $display($time,"\t Thread C"); 20 Thread A
#2 $display($time,"\t Thread D"); 45 Thread B
end
join_any
#4 $display($time,"\t Thread E");
#3 $display($time,"\t Thread F");
$display("********After Fork..Join_any**********");
end
fork… join_none: Example 1
fork-join_none: does not wait for any of
initial begin the parallel processes to complete before
continuing the sequential process.
$display("*********Before Fork..Join_none********");
fork
#15 $display($time,"\t Thread A");
#5 $display($time,"\t Thread B");
*********Before Fork..Join_none********
#10 $display($time,"\t Thread C");
2 Thread D
join_none
5 Thread B
10 Thread C
#2 $display($time,"\t Thread D");
14 Thread E
#12 $display($time,"\t Thread E");
*********After Fork..Join_none*********
15 Thread A
$display("*********After Fork..Join_none*********");
fork… join_none: Example 2
initial begin
$display("*********Before Fork..Join_none********");
fork
begin
$display($time,"\t Thread A");
#15; *********Before Fork..Join_none********
$display($time,"\t Thread B"); *********After Fork..Join_none*********
end 0 Thread A
0 Thread C
begin 15 Thread B
$display($time,"\t Thread C"); 30 Thread D
#30;
$display($time,"\t Thread D");
end
join_none
$display("*********After Fork..Join_none*********");
end
Wait for fork: Example 1
initial begin
$display("**********BEFORE_FORK**********");
fork
begin
$display($time,"\tThread A");
#15; *********BEFORE_FORK**********
$display($time,"\tThread B"); 0 Thread A
end 0 Thread C
15 Thread B
begin *********AFTER_FORK**********
$display($time,"\tThread C");
#30;
$display($time,"\tThread D");
end
join_any
$display("**********AFTER_FORK**********");
$finish;
end
Wait for fork: Example 2
initial begin
$display("**********BEFORE_WAIT_FORK**********");
fork
begin
$display($time,"\tThread A");
#15; ******** BEFORE_WAIT_FORK ******
$display($time,"\tThread B"); 0 Thread A
end 0 Thread C
begin 15 Thread B
$display($time,"\tThread C"); 30 Thread D
#30;
$display($time,"\tThread D"); ******** AFTER_WAIT_FORK ******
end
join_any
$display("**********AFTER_WAIT_FORK**********");
$finish;
end
Disable fork: Example 1
initial begin
$display("**Before Disable fork**"); begin
$display($time,"\tThread C1");
fork #30;
begin $display($time,"\tThread D1");
$display($time,"\tThread A"); end **Before Disable fork**
#15; join_none 0 Thread A
$display($time,"\tThread B"); 0 Thread C
end disable fork;
15 Thread B
begin $display("**After Disable Fork**"); **After Disable Fork**
$display($time,"\tThread C");
#30; $finish;
$display($time,"\tThread D");
end end
join_any
fork
begin
$display($time,"\tThread A1");
#15;
$display($time,"\tThread B1");
end
Disable fork: Example 2
initial begin
$display("**BEFORE_DISABLE_FORK**");
fork
begin : A1
$display($time,"\t Thread A");
#30; **BEFORE_DISABLE_SPECIFIC_THREAD**
$display($time,"\t Thread B"); 0 Thread A
end 0 Thread C
15 Thread D
begin : B1 **AFTER_DISABLE_SPECIFIC_THREAD**
$display($time,"\t Thread C");
#15;
$display($time,"\t Thread D");
end
join_any
disable A1;
$display("**AFTER_DISABLE_FORK**");
$finish;
end
fork… join : Sending Reads and Writes
V2K Assertion
SVA Assertion
Summary : Multithreading