verilator/test_regress/t/t_mailbox_concurrent.v

50 lines
1.0 KiB
Systemverilog

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