init
This commit is contained in:
75
code/v3_fork_examples.sv
Normal file
75
code/v3_fork_examples.sv
Normal file
@@ -0,0 +1,75 @@
|
||||
module fork_examples;
|
||||
|
||||
bit a, b;
|
||||
|
||||
initial begin
|
||||
a = 1'b0;
|
||||
b = 1'b0;
|
||||
repeat(5) begin
|
||||
#50 a = 1'b1;
|
||||
#50 b = 1'b1;
|
||||
#50 a = 1'b0;
|
||||
#50 a = 1'b1;
|
||||
#100 b = 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
initial begin
|
||||
// example 1
|
||||
fork
|
||||
forever begin
|
||||
@(a);
|
||||
$display("Example 1: Observed a change in a, new value = %b at %0t", a, $time);
|
||||
end
|
||||
@(negedge b);
|
||||
join_any
|
||||
disable fork;
|
||||
$display("Exiting example 1 at %0t", $time);
|
||||
|
||||
// example 2
|
||||
fork
|
||||
begin
|
||||
fork
|
||||
forever begin
|
||||
@(a);
|
||||
$display("Example 2: Observed a change in a, new value = %b at %0t", a, $time);
|
||||
end
|
||||
forever begin
|
||||
@(b);
|
||||
$display("Example 2: Observed a change in b, new value = %b at %0t", b, $time);
|
||||
end
|
||||
join_none
|
||||
end
|
||||
begin
|
||||
#300;
|
||||
$display("Example 2: After 300 at %0t", $time);
|
||||
end
|
||||
join
|
||||
$display("Exiting example 2 at %0t", $time);
|
||||
|
||||
// example 3
|
||||
fork
|
||||
begin
|
||||
#100;
|
||||
$display("Example 3: After 100 at %0t", $time);
|
||||
end
|
||||
wait(a == b);
|
||||
join
|
||||
$display("Exiting example 3 at %0t", $time);
|
||||
|
||||
// example 4 - which values of i will be displayed?
|
||||
for (int i = 0; i < 3; i++) begin
|
||||
fork
|
||||
$display("Example 4: i = %0d at %0t", i, $time);
|
||||
join_none
|
||||
end
|
||||
$display("Exiting example 4 at %0t", $time);
|
||||
|
||||
#200; // some delay
|
||||
|
||||
// example 5 - which threads will be killed?
|
||||
disable fork;
|
||||
$display("Exiting example 5 at %0t", $time);
|
||||
end
|
||||
|
||||
endmodule : fork_examples
|
||||
Reference in New Issue
Block a user