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
|
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2024 by Liam Braun.
// SPDX-License-Identifier: CC0-1.0
module t();
mailbox #(int) m;
task automatic test_get;
int v;
m.get(v);
// Only one thread should be here at a time (mailbox empty)
$display("mailbox read %0t", $time);
#1;
m.put(v);
endtask
task automatic test_put;
int v;
m.put(42);
// Only one thread should be here at a time (mailbox full)
$display("mailbox write %0t", $time);
#1;
m.get(v);
endtask
initial begin
m = new(1);
m.put(42);
fork
test_get();
test_get();
test_get();
join
m = new(1);
fork
test_put();
test_put();
test_put();
join
$write("*-* All Finished *-*\n");
$finish;
end
endmodule
|