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 50 51 52 53 54 55 56 57 58 59 60 61
|
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2020 by Wilson Snyder.
// SPDX-License-Identifier: CC0-1.0
// Methods defined by IEEE:
// class semaphore;
// function new(int keyCount = 0);
// function void put(int keyCount = 1);
// task get(int keyCount = 1);
// function int try_get(int keyCount = 1);
// endclass
`ifndef SEMAPHORE_T
`define SEMAPHORE_T semaphore
`endif
// verilator lint_off DECLFILENAME
module t(/*AUTOARG*/);
// From UVM:
`SEMAPHORE_T s;
`SEMAPHORE_T s2;
initial begin
s = new(1);
if (s.try_get() == 0) $stop;
if (s.try_get() != 0) $stop;
s = new;
if (s.try_get() != 0) $stop;
s.put();
s.get();
s.put(2);
s.get(2);
s.put(2);
if (s.try_get(2) <= 0) $stop;
fork
begin
#10; // So later then get() starts below
s.put(1);
s.put(1);
end
begin
if (s.try_get(1) != 0) $stop;
s.get(); // Blocks until put
s.get();
end
join
s2 = new;
if (s2.try_get() != 0) $stop;
$write("*-* All Finished *-*\n");
$finish;
end
endmodule
|