diff --git a/include/verilated_std.sv b/include/verilated_std.sv index 1c7e60e0e..354901753 100644 --- a/include/verilated_std.sv +++ b/include/verilated_std.sv @@ -26,93 +26,93 @@ // verilator lint_off TIMESCALEMOD // verilator lint_off UNUSEDSIGNAL package std; - // The process class is not implemented, but it's predeclared here, - // so the linter accepts references to it. - typedef class process; + // The process class is not implemented, but it's predeclared here, + // so the linter accepts references to it. + typedef class process; - class mailbox #(type T); - protected int m_bound; - protected T m_queue[$]; + class mailbox #(type T); + protected int m_bound; + protected T m_queue[$]; - function new(int bound = 0); - m_bound = bound; - endfunction + function new(int bound = 0); + m_bound = bound; + endfunction - function int num(); - return m_queue.size(); - endfunction + function int num(); + return m_queue.size(); + endfunction - task put(T message); - `ifdef VERILATOR_TIMING - if (m_bound != 0) - wait (m_queue.size() < m_bound); + task put(T message); +`ifdef VERILATOR_TIMING + if (m_bound != 0) + wait (m_queue.size() < m_bound); + m_queue.push_back(message); +`endif + endtask + + function int try_put(T message); + if (num() < m_bound) begin m_queue.push_back(message); - `endif - endtask + return 1; + end + return 0; + endfunction - function int try_put(T message); - if (num() < m_bound) begin - m_queue.push_back(message); - return 1; - end - return 0; - endfunction + task get(ref T message); +`ifdef VERILATOR_TIMING + wait (m_queue.size() > 0); + message = m_queue.pop_front(); +`endif + endtask - task get(ref T message); - `ifdef VERILATOR_TIMING - wait (m_queue.size() > 0); + function int try_get(ref T message); + if (num() > 0) begin message = m_queue.pop_front(); - `endif - endtask + return 1; + end + return 0; + endfunction - function int try_get(ref T message); - if (num() > 0) begin - message = m_queue.pop_front(); - return 1; - end - return 0; - endfunction + task peek(ref T message); +`ifdef VERILATOR_TIMING + wait (m_queue.size() > 0); + message = m_queue[0]; +`endif + endtask - task peek(ref T message); - `ifdef VERILATOR_TIMING - wait (m_queue.size() > 0); + function int try_peek(ref T message); + if (num() > 0) begin message = m_queue[0]; - `endif - endtask + return 1; + end + return 0; + endfunction + endclass - function int try_peek(ref T message); - if (num() > 0) begin - message = m_queue[0]; - return 1; - end - return 0; - endfunction - endclass + class semaphore; + protected int m_keyCount; - class semaphore; - protected int m_keyCount; + function new(int keyCount = 0); + m_keyCount = keyCount; + endfunction - function new(int keyCount = 0); - m_keyCount = keyCount; - endfunction + function void put(int keyCount = 1); + m_keyCount += keyCount; + endfunction - function void put(int keyCount = 1); - m_keyCount += keyCount; - endfunction + task get(int keyCount = 1); +`ifdef VERILATOR_TIMING + wait (m_keyCount >= keyCount); + m_keyCount -= keyCount; +`endif + endtask - task get(int keyCount = 1); - `ifdef VERILATOR_TIMING - wait (m_keyCount >= keyCount); + function int try_get(int keyCount = 1); + if (m_keyCount >= keyCount) begin m_keyCount -= keyCount; - `endif - endtask - - function int try_get(int keyCount = 1); - if (m_keyCount >= keyCount) begin - m_keyCount -= keyCount; - return 1; - end - return 0; - endfunction - endclass + return 1; + end + return 0; + endfunction + endclass endpackage