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
|
// 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
|