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

  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 "../../../core/sc_time.hh"

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