1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2023 by Antmicro Ltd.
// SPDX-License-Identifier: CC0-1.0
int static_var;
module t();
event evt;
task send_event();
->evt;
endtask
class Foo;
function void do_something(int captured_var);
fork
begin
int my_var;
int my_other_var;
my_var = captured_var;
my_other_var = captured_var; /* Capture the same value "twice" */
my_var++;
static_var++; /* Write to a value with static lifetime (valid) */
$display("Vars in forked process: %d %d", my_var, my_other_var);
if (my_var != 2)
$stop;
if (my_other_var != 1)
$stop;
send_event();
end
join_none
$display("Leaving fork's parent");
endfunction
endclass
initial begin
Foo foo;
foo = new;
static_var = 0;
foo.do_something(1);
end
always @(evt) begin
$display("Static variable: %d", static_var);
if (static_var != 1)
$stop;
fork
begin
automatic int my_auto_var = 0;
my_auto_var++;
$display("Automatic variable in fork: %d", my_auto_var);
if (my_auto_var != 1) $stop;
end
join_none
$write("*-* All Finished *-*\n");
$finish;
end
endmodule
|