forked from github/verilator
44 lines
935 B
Systemverilog
44 lines
935 B
Systemverilog
|
// DESCRIPTION: Verilator: Verilog Test module
|
||
|
//
|
||
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
||
|
// any use, without warranty, 2022 by Antmicro Ltd.
|
||
|
// SPDX-License-Identifier: CC0-1.0
|
||
|
|
||
|
module t;
|
||
|
int counter = 0;
|
||
|
|
||
|
// As Verilator doesn't support recursive calls, let's use macros to generate tasks
|
||
|
`define FORK2_END(i) \
|
||
|
task fork2_``i; \
|
||
|
#1 counter++; \
|
||
|
endtask
|
||
|
|
||
|
`define FORK2(i, j) \
|
||
|
task fork2_``i; \
|
||
|
fork \
|
||
|
#1 fork2_``j; \
|
||
|
#1 fork2_``j; \
|
||
|
join \
|
||
|
endtask
|
||
|
|
||
|
`FORK2_END(0);
|
||
|
`FORK2(1, 0);
|
||
|
`FORK2(2, 1);
|
||
|
`FORK2(3, 2);
|
||
|
`FORK2(4, 3);
|
||
|
`FORK2(5, 4);
|
||
|
`FORK2(6, 5);
|
||
|
`FORK2(7, 6);
|
||
|
`FORK2(8, 7);
|
||
|
|
||
|
initial begin
|
||
|
fork2_8;
|
||
|
`ifdef TEST_VERBOSE
|
||
|
$write("[%0t] process counter == %0d\n", $time, counter);
|
||
|
`endif
|
||
|
if (counter != 1 << 8) $stop;
|
||
|
$write("*-* All Finished *-*\n");
|
||
|
$finish;
|
||
|
end
|
||
|
endmodule
|