/*****************************************************************************

  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
  more contributor license agreements.  See the NOTICE file distributed
  with this work for additional information regarding copyright ownership.
  Accellera licenses this file to you under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with the
  License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  implied.  See the License for the specific language governing
  permissions and limitations under the License.

 *****************************************************************************/

#ifndef __SYSTEMC_EXT_TLM_CORE_2_QUANTUM_GLOBAL_QUANTUM_HH__
#define __SYSTEMC_EXT_TLM_CORE_2_QUANTUM_GLOBAL_QUANTUM_HH__

#include <systemc>

namespace tlm
{

//
// tlm_global_quantum class
//
// The global quantum is the maximum time an initiator can run ahead of
// SystemC time. All initiators should synchronize on timingpoints that
// are multiples of the global quantum value.
//
// sc_set_time_resolution can only be called before the first
// sc_time object is created. This means that after setting the
// global quantum it will not be possible to call sc_set_time_resolution.
// If sc_set_time_resolution must be called this must be done before
// the global quantum is set.
//

class tlm_global_quantum
{
  public:
    //
    // Returns a reference to the tlm_global_quantum singleton
    //
    static tlm_global_quantum &instance();

  public:

    //
    // Setter/getter for the global quantum
    //
    void set(const sc_core::sc_time &t) { m_global_quantum = t; }
    const sc_core::sc_time &get() const { return m_global_quantum; }

    //
    // This function will calculate the maximum value for the next local
    // quantum for an initiator. All initiators should synchronize on
    // integer multiples of the global quantum value. The value for the
    // local quantum of an initiator can be smaller, but should never be
    // greater than the value returned by this method.
    //
    sc_core::sc_time compute_local_quantum();

  protected:
    tlm_global_quantum();

  protected:
    sc_core::sc_time m_global_quantum;
};

} // namespace tlm

#endif /* __SYSTEMC_EXT_TLM_CORE_2_QUANTUM_GLOBAL_QUANTUM_HH__ */
