verilator/test_regress/t/t_semaphore_class.v
2022-10-15 10:37:24 -04:00

34 lines
849 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 Wilson Snyder.
// SPDX-License-Identifier: CC0-1.0
class semaphore_cls;
// Test an implementation similar to what Verilator will do internally
int m_keys;
function new(int keyCount = 0);
m_keys = keyCount;
endfunction
function void put(int keyCount = 1);
m_keys += keyCount;
endfunction
task get(int keyCount = 1);
wait (m_keys >= keyCount);
m_keys -= keyCount;
endtask
function int try_get(int keyCount = 1);
if (m_keys >= keyCount) begin
m_keys -= keyCount;
return 1;
end
else begin
return 0;
end
endfunction
endclass
`define SEMAPHORE_T semaphore_cls
`include "t_semaphore.v"