mirror of
https://github.com/verilator/verilator.git
synced 2025-02-08 06:32:24 +00:00
60 lines
1.4 KiB
Systemverilog
60 lines
1.4 KiB
Systemverilog
// 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
|
|
|
|
class Foo;
|
|
task do_something(int arg_v);
|
|
int dynscope_var;
|
|
int x;
|
|
dynscope_var = 0;
|
|
|
|
fork
|
|
#10 begin
|
|
x = 0;
|
|
// Test capturing a variable that needs to be modified
|
|
$display("Incremented dynscope_var: %d", ++dynscope_var);
|
|
if (dynscope_var != 1)
|
|
$stop;
|
|
|
|
// Check nested access
|
|
fork
|
|
#10 begin
|
|
$display("Incremented x: %d", ++x);
|
|
$display("Incremented dynscope_var: %d", ++dynscope_var);
|
|
if (dynscope_var != 2)
|
|
$stop;
|
|
end
|
|
join_none
|
|
end
|
|
#10 begin
|
|
// Same as the first check, but with an argument
|
|
// (so it needs to be copied to the dynamic scope instead of being moved there)
|
|
$display("Incremented arg_v: %d", ++arg_v);
|
|
if (arg_v != 2)
|
|
$stop;
|
|
end
|
|
join_none
|
|
|
|
// Check if regular access to arg_v has been substituted with access to its copy from
|
|
// a dynamic scope
|
|
$display("Incremented arg_v: %d", ++arg_v);
|
|
if (arg_v != 1)
|
|
$stop;
|
|
endtask
|
|
endclass
|
|
|
|
module t();
|
|
initial begin
|
|
Foo foo;
|
|
foo = new;
|
|
foo.do_something(0);
|
|
|
|
#99 begin
|
|
$write("*-* All Finished *-*\n");
|
|
$finish;
|
|
end
|
|
end
|
|
endmodule
|