112027Sjungma@eit.uni-kl.de/*****************************************************************************
212027Sjungma@eit.uni-kl.de
312027Sjungma@eit.uni-kl.de  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412027Sjungma@eit.uni-kl.de  more contributor license agreements.  See the NOTICE file distributed
512027Sjungma@eit.uni-kl.de  with this work for additional information regarding copyright ownership.
612027Sjungma@eit.uni-kl.de  Accellera licenses this file to you under the Apache License, Version 2.0
712027Sjungma@eit.uni-kl.de  (the "License"); you may not use this file except in compliance with the
812027Sjungma@eit.uni-kl.de  License.  You may obtain a copy of the License at
912027Sjungma@eit.uni-kl.de
1012027Sjungma@eit.uni-kl.de    http://www.apache.org/licenses/LICENSE-2.0
1112027Sjungma@eit.uni-kl.de
1212027Sjungma@eit.uni-kl.de  Unless required by applicable law or agreed to in writing, software
1312027Sjungma@eit.uni-kl.de  distributed under the License is distributed on an "AS IS" BASIS,
1412027Sjungma@eit.uni-kl.de  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512027Sjungma@eit.uni-kl.de  implied.  See the License for the specific language governing
1612027Sjungma@eit.uni-kl.de  permissions and limitations under the License.
1712027Sjungma@eit.uni-kl.de
1812027Sjungma@eit.uni-kl.de *****************************************************************************/
1912027Sjungma@eit.uni-kl.de
2012027Sjungma@eit.uni-kl.de/*****************************************************************************
2112027Sjungma@eit.uni-kl.de
2212027Sjungma@eit.uni-kl.de  sc_signal.h -- The sc_signal<T> primitive channel class.
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21
2512027Sjungma@eit.uni-kl.de
2612027Sjungma@eit.uni-kl.de  CHANGE LOG IS AT THE END OF THE FILE
2712027Sjungma@eit.uni-kl.de *****************************************************************************/
2812027Sjungma@eit.uni-kl.de
2912027Sjungma@eit.uni-kl.de#ifndef SC_SIGNAL_H
3012027Sjungma@eit.uni-kl.de#define SC_SIGNAL_H
3112027Sjungma@eit.uni-kl.de
3212027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_port.h"
3312027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_prim_channel.h"
3412027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_signal_ifs.h"
3512027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_writer_policy.h"
3612027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_event.h"
3712027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_process.h"
3812027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_simcontext.h"
3912027Sjungma@eit.uni-kl.de#include "sysc/datatypes/bit/sc_logic.h"
4012027Sjungma@eit.uni-kl.de#include "sysc/tracing/sc_trace.h"
4112027Sjungma@eit.uni-kl.de#include <typeinfo>
4212027Sjungma@eit.uni-kl.de
4312027Sjungma@eit.uni-kl.denamespace sc_core {
4412027Sjungma@eit.uni-kl.de
4512027Sjungma@eit.uni-kl.de// to avoid code bloat in sc_signal<T>
4612027Sjungma@eit.uni-kl.de
4712027Sjungma@eit.uni-kl.deextern void sc_deprecated_get_data_ref();
4812027Sjungma@eit.uni-kl.deextern void sc_deprecated_get_new_value();
4912027Sjungma@eit.uni-kl.deextern void sc_deprecated_trace();
5012027Sjungma@eit.uni-kl.deextern sc_event * sc_lazy_kernel_event( sc_event**, const char* name );
5112027Sjungma@eit.uni-kl.de
5212027Sjungma@eit.uni-kl.deinline
5312027Sjungma@eit.uni-kl.debool
5412027Sjungma@eit.uni-kl.desc_writer_policy_check_write::check_write( sc_object* target, bool )
5512027Sjungma@eit.uni-kl.de{
5612027Sjungma@eit.uni-kl.de  sc_object* writer_p = sc_get_curr_simcontext()->get_current_writer();
5712027Sjungma@eit.uni-kl.de  if( SC_UNLIKELY_(m_writer_p == 0) ) {
5812027Sjungma@eit.uni-kl.de       m_writer_p = writer_p;
5912027Sjungma@eit.uni-kl.de  } else if( SC_UNLIKELY_(m_writer_p != writer_p && writer_p != 0) ) {
6012027Sjungma@eit.uni-kl.de       sc_signal_invalid_writer( target, m_writer_p, writer_p, m_check_delta );
6112027Sjungma@eit.uni-kl.de       // error has been suppressed, ignore check as well
6212027Sjungma@eit.uni-kl.de       // return false;
6312027Sjungma@eit.uni-kl.de  }
6412027Sjungma@eit.uni-kl.de  return true;
6512027Sjungma@eit.uni-kl.de}
6612027Sjungma@eit.uni-kl.de
6712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
6812027Sjungma@eit.uni-kl.de//  CLASS : sc_signal<T>
6912027Sjungma@eit.uni-kl.de//
7012027Sjungma@eit.uni-kl.de//  The sc_signal<T> primitive channel class.
7112027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
7212027Sjungma@eit.uni-kl.de
7312027Sjungma@eit.uni-kl.detemplate< class T, sc_writer_policy POL /* = SC_DEFAULT_WRITER_POLICY */ >
7412027Sjungma@eit.uni-kl.declass sc_signal
7512027Sjungma@eit.uni-kl.de  : public    sc_signal_inout_if<T>
7612027Sjungma@eit.uni-kl.de  , public    sc_prim_channel
7712027Sjungma@eit.uni-kl.de  , protected sc_writer_policy_check<POL>
7812027Sjungma@eit.uni-kl.de{
7912027Sjungma@eit.uni-kl.deprotected:
8012027Sjungma@eit.uni-kl.de    typedef sc_signal_inout_if<T>       if_type;
8112027Sjungma@eit.uni-kl.de    typedef sc_signal<T,POL>            this_type;
8212027Sjungma@eit.uni-kl.de    typedef sc_writer_policy_check<POL> policy_type;
8312027Sjungma@eit.uni-kl.de
8412027Sjungma@eit.uni-kl.depublic: // constructors and destructor:
8512027Sjungma@eit.uni-kl.de
8612027Sjungma@eit.uni-kl.de    sc_signal()
8712027Sjungma@eit.uni-kl.de	: sc_prim_channel( sc_gen_unique_name( "signal" ) ),
8812027Sjungma@eit.uni-kl.de	  m_change_event_p( 0 ), m_cur_val( T() ),
8912027Sjungma@eit.uni-kl.de	  m_change_stamp( ~sc_dt::UINT64_ONE ), m_new_val( T() )
9012027Sjungma@eit.uni-kl.de	{}
9112027Sjungma@eit.uni-kl.de
9212027Sjungma@eit.uni-kl.de    explicit sc_signal( const char* name_)
9312027Sjungma@eit.uni-kl.de	: sc_prim_channel( name_ ),
9412027Sjungma@eit.uni-kl.de	  m_change_event_p( 0 ), m_cur_val( T() ),
9512027Sjungma@eit.uni-kl.de	  m_change_stamp( ~sc_dt::UINT64_ONE ), m_new_val( T() )
9612027Sjungma@eit.uni-kl.de    {}
9712027Sjungma@eit.uni-kl.de
9812027Sjungma@eit.uni-kl.de    sc_signal( const char* name_, const T& initial_value_ )
9912027Sjungma@eit.uni-kl.de      : sc_prim_channel( name_ )
10012027Sjungma@eit.uni-kl.de      , m_change_event_p( 0 )
10112027Sjungma@eit.uni-kl.de      , m_cur_val( initial_value_ )
10212027Sjungma@eit.uni-kl.de      , m_change_stamp( ~sc_dt::UINT64_ONE )
10312027Sjungma@eit.uni-kl.de      , m_new_val( initial_value_ )
10412027Sjungma@eit.uni-kl.de    {}
10512027Sjungma@eit.uni-kl.de
10612027Sjungma@eit.uni-kl.de    virtual ~sc_signal()
10712027Sjungma@eit.uni-kl.de	{
10812027Sjungma@eit.uni-kl.de	    delete m_change_event_p;
10912027Sjungma@eit.uni-kl.de	}
11012027Sjungma@eit.uni-kl.de
11112027Sjungma@eit.uni-kl.de
11212027Sjungma@eit.uni-kl.de    // interface methods
11312027Sjungma@eit.uni-kl.de
11412027Sjungma@eit.uni-kl.de    virtual void register_port( sc_port_base&, const char* );
11512027Sjungma@eit.uni-kl.de
11612027Sjungma@eit.uni-kl.de    virtual sc_writer_policy get_writer_policy() const
11712027Sjungma@eit.uni-kl.de      { return POL; }
11812027Sjungma@eit.uni-kl.de
11912027Sjungma@eit.uni-kl.de    // get the default event
12012027Sjungma@eit.uni-kl.de    virtual const sc_event& default_event() const
12112027Sjungma@eit.uni-kl.de      { return value_changed_event(); }
12212027Sjungma@eit.uni-kl.de
12312027Sjungma@eit.uni-kl.de    // get the value changed event
12412027Sjungma@eit.uni-kl.de    virtual const sc_event& value_changed_event() const
12512027Sjungma@eit.uni-kl.de    {
12612027Sjungma@eit.uni-kl.de        return *sc_lazy_kernel_event( &m_change_event_p
12712027Sjungma@eit.uni-kl.de                                    , "value_changed_event");
12812027Sjungma@eit.uni-kl.de    }
12912027Sjungma@eit.uni-kl.de
13012027Sjungma@eit.uni-kl.de
13112027Sjungma@eit.uni-kl.de    // read the current value
13212027Sjungma@eit.uni-kl.de    virtual const T& read() const
13312027Sjungma@eit.uni-kl.de	{ return m_cur_val; }
13412027Sjungma@eit.uni-kl.de
13512027Sjungma@eit.uni-kl.de    // get a reference to the current value (for tracing)
13612027Sjungma@eit.uni-kl.de    virtual const T& get_data_ref() const
13712027Sjungma@eit.uni-kl.de        { sc_deprecated_get_data_ref(); return m_cur_val; }
13812027Sjungma@eit.uni-kl.de
13912027Sjungma@eit.uni-kl.de
14012027Sjungma@eit.uni-kl.de    // was there an event?
14112027Sjungma@eit.uni-kl.de    virtual bool event() const
14212027Sjungma@eit.uni-kl.de        { return simcontext()->event_occurred(m_change_stamp); }
14312027Sjungma@eit.uni-kl.de
14412027Sjungma@eit.uni-kl.de    // write the new value
14512027Sjungma@eit.uni-kl.de    virtual void write( const T& );
14612027Sjungma@eit.uni-kl.de
14712027Sjungma@eit.uni-kl.de
14812027Sjungma@eit.uni-kl.de    // other methods
14912027Sjungma@eit.uni-kl.de
15012027Sjungma@eit.uni-kl.de    operator const T& () const
15112027Sjungma@eit.uni-kl.de	{ return read(); }
15212027Sjungma@eit.uni-kl.de
15312027Sjungma@eit.uni-kl.de
15412027Sjungma@eit.uni-kl.de    this_type& operator = ( const T& a )
15512027Sjungma@eit.uni-kl.de	{ write( a ); return *this; }
15612027Sjungma@eit.uni-kl.de
15712027Sjungma@eit.uni-kl.de    this_type& operator = ( const sc_signal_in_if<T>& a )
15812027Sjungma@eit.uni-kl.de	{ write( a.read() ); return *this; }
15912027Sjungma@eit.uni-kl.de
16012027Sjungma@eit.uni-kl.de    this_type& operator = ( const this_type& a )
16112027Sjungma@eit.uni-kl.de	{ write( a.read() ); return *this; }
16212027Sjungma@eit.uni-kl.de
16312027Sjungma@eit.uni-kl.de
16412027Sjungma@eit.uni-kl.de    const T& get_new_value() const
16512027Sjungma@eit.uni-kl.de        { sc_deprecated_get_new_value(); return m_new_val; }
16612027Sjungma@eit.uni-kl.de
16712027Sjungma@eit.uni-kl.de
16812027Sjungma@eit.uni-kl.de    void trace( sc_trace_file* tf ) const
16912027Sjungma@eit.uni-kl.de	{
17012027Sjungma@eit.uni-kl.de	    sc_deprecated_trace();
17112027Sjungma@eit.uni-kl.de#           ifdef DEBUG_SYSTEMC
17212027Sjungma@eit.uni-kl.de	        sc_trace( tf, read(), name() );
17312027Sjungma@eit.uni-kl.de#           else
17412027Sjungma@eit.uni-kl.de                if ( tf ) {}
17512027Sjungma@eit.uni-kl.de#	    endif
17612027Sjungma@eit.uni-kl.de	}
17712027Sjungma@eit.uni-kl.de
17812027Sjungma@eit.uni-kl.de
17912027Sjungma@eit.uni-kl.de    virtual void print( ::std::ostream& = ::std::cout ) const;
18012027Sjungma@eit.uni-kl.de    virtual void dump( ::std::ostream& = ::std::cout ) const;
18112027Sjungma@eit.uni-kl.de
18212027Sjungma@eit.uni-kl.de    virtual const char* kind() const
18312027Sjungma@eit.uni-kl.de        { return "sc_signal"; }
18412027Sjungma@eit.uni-kl.de
18512027Sjungma@eit.uni-kl.deprotected:
18612027Sjungma@eit.uni-kl.de
18712027Sjungma@eit.uni-kl.de    virtual void update();
18812027Sjungma@eit.uni-kl.de            void do_update();
18912027Sjungma@eit.uni-kl.de
19012027Sjungma@eit.uni-kl.deprotected:
19112027Sjungma@eit.uni-kl.de
19212027Sjungma@eit.uni-kl.de    mutable sc_event*  m_change_event_p;
19312027Sjungma@eit.uni-kl.de    T                  m_cur_val;
19412027Sjungma@eit.uni-kl.de    sc_dt::uint64      m_change_stamp;   // delta of last event
19512027Sjungma@eit.uni-kl.de    T                  m_new_val;
19612027Sjungma@eit.uni-kl.de
19712027Sjungma@eit.uni-kl.deprivate:
19812027Sjungma@eit.uni-kl.de
19912027Sjungma@eit.uni-kl.de    // disabled
20012027Sjungma@eit.uni-kl.de    sc_signal( const this_type& );
20112027Sjungma@eit.uni-kl.de};
20212027Sjungma@eit.uni-kl.de
20312027Sjungma@eit.uni-kl.de
20412027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
20512027Sjungma@eit.uni-kl.de
20612027Sjungma@eit.uni-kl.de
20712027Sjungma@eit.uni-kl.detemplate< class T, sc_writer_policy POL >
20812027Sjungma@eit.uni-kl.deinline
20912027Sjungma@eit.uni-kl.devoid
21012027Sjungma@eit.uni-kl.desc_signal<T,POL>::register_port( sc_port_base& port_
21112027Sjungma@eit.uni-kl.de                               , const char* if_typename_ )
21212027Sjungma@eit.uni-kl.de{
21312027Sjungma@eit.uni-kl.de
21412027Sjungma@eit.uni-kl.de    bool is_output = std::string( if_typename_ ) == typeid(if_type).name();
21512027Sjungma@eit.uni-kl.de    if( !policy_type::check_port( this, &port_, is_output ) )
21612027Sjungma@eit.uni-kl.de       ((void)0); // fallback? error has been suppressed ...
21712027Sjungma@eit.uni-kl.de}
21812027Sjungma@eit.uni-kl.de
21912027Sjungma@eit.uni-kl.de
22012027Sjungma@eit.uni-kl.de// write the new value
22112027Sjungma@eit.uni-kl.de
22212027Sjungma@eit.uni-kl.detemplate< class T, sc_writer_policy POL >
22312027Sjungma@eit.uni-kl.deinline
22412027Sjungma@eit.uni-kl.devoid
22512027Sjungma@eit.uni-kl.desc_signal<T,POL>::write( const T& value_ )
22612027Sjungma@eit.uni-kl.de{
22712027Sjungma@eit.uni-kl.de    bool value_changed = !( m_cur_val == value_ );
22812027Sjungma@eit.uni-kl.de    if ( !policy_type::check_write(this, value_changed) )
22912027Sjungma@eit.uni-kl.de        return;
23012027Sjungma@eit.uni-kl.de
23112027Sjungma@eit.uni-kl.de    m_new_val = value_;
23212027Sjungma@eit.uni-kl.de    if( value_changed ) {
23312027Sjungma@eit.uni-kl.de        request_update();
23412027Sjungma@eit.uni-kl.de    }
23512027Sjungma@eit.uni-kl.de}
23612027Sjungma@eit.uni-kl.de
23712027Sjungma@eit.uni-kl.de
23812027Sjungma@eit.uni-kl.detemplate< class T, sc_writer_policy POL >
23912027Sjungma@eit.uni-kl.deinline
24012027Sjungma@eit.uni-kl.devoid
24112027Sjungma@eit.uni-kl.desc_signal<T,POL>::print( ::std::ostream& os ) const
24212027Sjungma@eit.uni-kl.de{
24312027Sjungma@eit.uni-kl.de    os << m_cur_val;
24412027Sjungma@eit.uni-kl.de}
24512027Sjungma@eit.uni-kl.de
24612027Sjungma@eit.uni-kl.detemplate< class T, sc_writer_policy POL >
24712027Sjungma@eit.uni-kl.devoid
24812027Sjungma@eit.uni-kl.desc_signal<T,POL>::dump( ::std::ostream& os ) const
24912027Sjungma@eit.uni-kl.de{
25012027Sjungma@eit.uni-kl.de    os << "     name = " << name() << ::std::endl;
25112027Sjungma@eit.uni-kl.de    os << "    value = " << m_cur_val << ::std::endl;
25212027Sjungma@eit.uni-kl.de    os << "new value = " << m_new_val << ::std::endl;
25312027Sjungma@eit.uni-kl.de}
25412027Sjungma@eit.uni-kl.de
25512027Sjungma@eit.uni-kl.de
25612027Sjungma@eit.uni-kl.detemplate< class T, sc_writer_policy POL >
25712027Sjungma@eit.uni-kl.devoid
25812027Sjungma@eit.uni-kl.desc_signal<T,POL>::update()
25912027Sjungma@eit.uni-kl.de{
26012027Sjungma@eit.uni-kl.de    policy_type::update();
26112027Sjungma@eit.uni-kl.de    if( !( m_new_val == m_cur_val ) ) {
26212027Sjungma@eit.uni-kl.de        do_update();
26312027Sjungma@eit.uni-kl.de    }
26412027Sjungma@eit.uni-kl.de}
26512027Sjungma@eit.uni-kl.de
26612027Sjungma@eit.uni-kl.detemplate< class T, sc_writer_policy POL >
26712027Sjungma@eit.uni-kl.devoid
26812027Sjungma@eit.uni-kl.desc_signal<T,POL>::do_update()
26912027Sjungma@eit.uni-kl.de{
27012027Sjungma@eit.uni-kl.de    m_cur_val = m_new_val;
27112027Sjungma@eit.uni-kl.de    if ( m_change_event_p ) m_change_event_p->notify_next_delta();
27212027Sjungma@eit.uni-kl.de    m_change_stamp = simcontext()->change_stamp();
27312027Sjungma@eit.uni-kl.de}
27412027Sjungma@eit.uni-kl.de
27512027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
27612027Sjungma@eit.uni-kl.de//  CLASS : sc_signal<bool>
27712027Sjungma@eit.uni-kl.de//
27812027Sjungma@eit.uni-kl.de//  Specialization of sc_signal<T> for type bool.
27912027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
28012027Sjungma@eit.uni-kl.de
28112027Sjungma@eit.uni-kl.declass sc_reset;
28212027Sjungma@eit.uni-kl.de
28312027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
28412027Sjungma@eit.uni-kl.declass sc_signal<bool,POL>
28512027Sjungma@eit.uni-kl.de  : public    sc_signal_inout_if<bool>
28612027Sjungma@eit.uni-kl.de  , public    sc_prim_channel
28712027Sjungma@eit.uni-kl.de  , protected sc_writer_policy_check<POL>
28812027Sjungma@eit.uni-kl.de{
28912027Sjungma@eit.uni-kl.deprotected:
29012027Sjungma@eit.uni-kl.de    typedef sc_signal_inout_if<bool>    if_type;
29112027Sjungma@eit.uni-kl.de    typedef sc_signal<bool,POL>         this_type;
29212027Sjungma@eit.uni-kl.de    typedef sc_writer_policy_check<POL> policy_type;
29312027Sjungma@eit.uni-kl.de
29412027Sjungma@eit.uni-kl.depublic: // constructors and destructor:
29512027Sjungma@eit.uni-kl.de
29612027Sjungma@eit.uni-kl.de    sc_signal()
29712027Sjungma@eit.uni-kl.de	: sc_prim_channel( sc_gen_unique_name( "signal" ) ),
29812027Sjungma@eit.uni-kl.de	  m_change_event_p( 0 ),
29912027Sjungma@eit.uni-kl.de          m_cur_val( false ),
30012027Sjungma@eit.uni-kl.de          m_change_stamp( ~sc_dt::UINT64_ONE ),
30112027Sjungma@eit.uni-kl.de	  m_negedge_event_p( 0 ),
30212027Sjungma@eit.uni-kl.de          m_new_val( false ),
30312027Sjungma@eit.uni-kl.de	  m_posedge_event_p( 0 ),
30412027Sjungma@eit.uni-kl.de          m_reset_p( 0 )
30512027Sjungma@eit.uni-kl.de	{}
30612027Sjungma@eit.uni-kl.de
30712027Sjungma@eit.uni-kl.de    explicit sc_signal( const char* name_ )
30812027Sjungma@eit.uni-kl.de	: sc_prim_channel( name_ ),
30912027Sjungma@eit.uni-kl.de	  m_change_event_p( 0 ),
31012027Sjungma@eit.uni-kl.de          m_cur_val( false ),
31112027Sjungma@eit.uni-kl.de          m_change_stamp( ~sc_dt::UINT64_ONE ),
31212027Sjungma@eit.uni-kl.de	  m_negedge_event_p( 0 ),
31312027Sjungma@eit.uni-kl.de          m_new_val( false ),
31412027Sjungma@eit.uni-kl.de	  m_posedge_event_p( 0 ),
31512027Sjungma@eit.uni-kl.de          m_reset_p( 0 )
31612027Sjungma@eit.uni-kl.de	{}
31712027Sjungma@eit.uni-kl.de
31812027Sjungma@eit.uni-kl.de    sc_signal( const char* name_, bool initial_value_ )
31912027Sjungma@eit.uni-kl.de      : sc_prim_channel( name_ )
32012027Sjungma@eit.uni-kl.de      , m_change_event_p( 0 )
32112027Sjungma@eit.uni-kl.de      , m_cur_val( initial_value_ )
32212027Sjungma@eit.uni-kl.de      , m_change_stamp( ~sc_dt::UINT64_ONE )
32312027Sjungma@eit.uni-kl.de      , m_negedge_event_p( 0 )
32412027Sjungma@eit.uni-kl.de      , m_new_val( initial_value_ )
32512027Sjungma@eit.uni-kl.de      , m_posedge_event_p( 0 )
32612027Sjungma@eit.uni-kl.de      , m_reset_p( 0 )
32712027Sjungma@eit.uni-kl.de    {}
32812027Sjungma@eit.uni-kl.de
32912027Sjungma@eit.uni-kl.de    virtual ~sc_signal();
33012027Sjungma@eit.uni-kl.de
33112027Sjungma@eit.uni-kl.de
33212027Sjungma@eit.uni-kl.de    // interface methods
33312027Sjungma@eit.uni-kl.de
33412027Sjungma@eit.uni-kl.de    virtual void register_port( sc_port_base&, const char* );
33512027Sjungma@eit.uni-kl.de
33612027Sjungma@eit.uni-kl.de    virtual sc_writer_policy get_writer_policy() const
33712027Sjungma@eit.uni-kl.de        { return POL; }
33812027Sjungma@eit.uni-kl.de
33912027Sjungma@eit.uni-kl.de    // get the default event
34012027Sjungma@eit.uni-kl.de    virtual const sc_event& default_event() const
34112027Sjungma@eit.uni-kl.de        { return value_changed_event(); }
34212027Sjungma@eit.uni-kl.de
34312027Sjungma@eit.uni-kl.de    // get the value changed event
34412027Sjungma@eit.uni-kl.de    virtual const sc_event& value_changed_event() const;
34512027Sjungma@eit.uni-kl.de
34612027Sjungma@eit.uni-kl.de    // get the positive edge event
34712027Sjungma@eit.uni-kl.de    virtual const sc_event& posedge_event() const;
34812027Sjungma@eit.uni-kl.de
34912027Sjungma@eit.uni-kl.de    // get the negative edge event
35012027Sjungma@eit.uni-kl.de    virtual const sc_event& negedge_event() const;
35112027Sjungma@eit.uni-kl.de
35212027Sjungma@eit.uni-kl.de
35312027Sjungma@eit.uni-kl.de    // read the current value
35412027Sjungma@eit.uni-kl.de    virtual const bool& read() const
35512027Sjungma@eit.uni-kl.de	{ return m_cur_val; }
35612027Sjungma@eit.uni-kl.de
35712027Sjungma@eit.uni-kl.de    // get a reference to the current value (for tracing)
35812027Sjungma@eit.uni-kl.de    virtual const bool& get_data_ref() const
35912027Sjungma@eit.uni-kl.de        { sc_deprecated_get_data_ref(); return m_cur_val; }
36012027Sjungma@eit.uni-kl.de
36112027Sjungma@eit.uni-kl.de
36212027Sjungma@eit.uni-kl.de    // was there a value changed event?
36312027Sjungma@eit.uni-kl.de    virtual bool event() const
36412027Sjungma@eit.uni-kl.de        { return simcontext()->event_occurred(m_change_stamp); }
36512027Sjungma@eit.uni-kl.de
36612027Sjungma@eit.uni-kl.de    // was there a positive edge event?
36712027Sjungma@eit.uni-kl.de    virtual bool posedge() const
36812027Sjungma@eit.uni-kl.de	{ return ( event() && m_cur_val ); }
36912027Sjungma@eit.uni-kl.de
37012027Sjungma@eit.uni-kl.de    // was there a negative edge event?
37112027Sjungma@eit.uni-kl.de    virtual bool negedge() const
37212027Sjungma@eit.uni-kl.de	{ return ( event() && ! m_cur_val ); }
37312027Sjungma@eit.uni-kl.de
37412027Sjungma@eit.uni-kl.de    // write the new value
37512027Sjungma@eit.uni-kl.de    virtual void write( const bool& );
37612027Sjungma@eit.uni-kl.de
37712027Sjungma@eit.uni-kl.de    // other methods
37812027Sjungma@eit.uni-kl.de
37912027Sjungma@eit.uni-kl.de    operator const bool& () const
38012027Sjungma@eit.uni-kl.de	{ return read(); }
38112027Sjungma@eit.uni-kl.de
38212027Sjungma@eit.uni-kl.de
38312027Sjungma@eit.uni-kl.de    this_type& operator = ( const bool& a )
38412027Sjungma@eit.uni-kl.de	{ write( a ); return *this; }
38512027Sjungma@eit.uni-kl.de
38612027Sjungma@eit.uni-kl.de    this_type& operator = ( const sc_signal_in_if<bool>& a )
38712027Sjungma@eit.uni-kl.de	{ write( a.read() ); return *this; }
38812027Sjungma@eit.uni-kl.de
38912027Sjungma@eit.uni-kl.de    this_type& operator = ( const this_type& a )
39012027Sjungma@eit.uni-kl.de	{ write( a.read() ); return *this; }
39112027Sjungma@eit.uni-kl.de
39212027Sjungma@eit.uni-kl.de
39312027Sjungma@eit.uni-kl.de    const bool& get_new_value() const
39412027Sjungma@eit.uni-kl.de	{ sc_deprecated_get_new_value(); return m_new_val; }
39512027Sjungma@eit.uni-kl.de
39612027Sjungma@eit.uni-kl.de
39712027Sjungma@eit.uni-kl.de    void trace( sc_trace_file* tf ) const
39812027Sjungma@eit.uni-kl.de	{
39912027Sjungma@eit.uni-kl.de	    sc_deprecated_trace();
40012027Sjungma@eit.uni-kl.de#           ifdef DEBUG_SYSTEMC
40112027Sjungma@eit.uni-kl.de	        sc_trace( tf, read(), name() );
40212027Sjungma@eit.uni-kl.de#           else
40312027Sjungma@eit.uni-kl.de                if ( tf ) {}
40412027Sjungma@eit.uni-kl.de#           endif
40512027Sjungma@eit.uni-kl.de	}
40612027Sjungma@eit.uni-kl.de
40712027Sjungma@eit.uni-kl.de
40812027Sjungma@eit.uni-kl.de    virtual void print( ::std::ostream& = ::std::cout ) const;
40912027Sjungma@eit.uni-kl.de    virtual void dump( ::std::ostream& = ::std::cout ) const;
41012027Sjungma@eit.uni-kl.de
41112027Sjungma@eit.uni-kl.de    virtual const char* kind() const
41212027Sjungma@eit.uni-kl.de        { return "sc_signal"; }
41312027Sjungma@eit.uni-kl.de
41412027Sjungma@eit.uni-kl.deprotected:
41512027Sjungma@eit.uni-kl.de
41612027Sjungma@eit.uni-kl.de    virtual void update();
41712027Sjungma@eit.uni-kl.de            void do_update();
41812027Sjungma@eit.uni-kl.de
41912027Sjungma@eit.uni-kl.de    virtual bool is_clock() const { return false; }
42012027Sjungma@eit.uni-kl.de
42112027Sjungma@eit.uni-kl.deprotected:
42212027Sjungma@eit.uni-kl.de    mutable sc_event* m_change_event_p;  // value change event if present.
42312027Sjungma@eit.uni-kl.de    bool              m_cur_val;         // current value of object.
42412027Sjungma@eit.uni-kl.de    sc_dt::uint64     m_change_stamp;    // delta of last event
42512027Sjungma@eit.uni-kl.de    mutable sc_event* m_negedge_event_p; // negative edge event if present.
42612027Sjungma@eit.uni-kl.de    bool              m_new_val;         // next value of object.
42712027Sjungma@eit.uni-kl.de    mutable sc_event* m_posedge_event_p; // positive edge event if present.
42812027Sjungma@eit.uni-kl.de    mutable sc_reset* m_reset_p;         // reset mechanism if present.
42912027Sjungma@eit.uni-kl.de
43012027Sjungma@eit.uni-kl.deprivate:
43112027Sjungma@eit.uni-kl.de
43212027Sjungma@eit.uni-kl.de    // reset creation
43312027Sjungma@eit.uni-kl.de    virtual sc_reset* is_reset() const;
43412027Sjungma@eit.uni-kl.de
43512027Sjungma@eit.uni-kl.de    // disabled
43612027Sjungma@eit.uni-kl.de    sc_signal( const this_type& );
43712027Sjungma@eit.uni-kl.de};
43812027Sjungma@eit.uni-kl.de
43912027Sjungma@eit.uni-kl.de
44012027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
44112027Sjungma@eit.uni-kl.de//  CLASS : sc_signal<sc_dt::sc_logic>
44212027Sjungma@eit.uni-kl.de//
44312027Sjungma@eit.uni-kl.de//  Specialization of sc_signal<T> for type sc_dt::sc_logic.
44412027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
44512027Sjungma@eit.uni-kl.de
44612027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
44712027Sjungma@eit.uni-kl.declass sc_signal<sc_dt::sc_logic,POL>
44812027Sjungma@eit.uni-kl.de  : public    sc_signal_inout_if<sc_dt::sc_logic>
44912027Sjungma@eit.uni-kl.de  , public    sc_prim_channel
45012027Sjungma@eit.uni-kl.de  , protected sc_writer_policy_check<POL>
45112027Sjungma@eit.uni-kl.de{
45212027Sjungma@eit.uni-kl.deprotected:
45312027Sjungma@eit.uni-kl.de    typedef sc_signal_inout_if<sc_dt::sc_logic> if_type;
45412027Sjungma@eit.uni-kl.de    typedef sc_signal<sc_dt::sc_logic,POL>      this_type;
45512027Sjungma@eit.uni-kl.de    typedef sc_writer_policy_check<POL>         policy_type;
45612027Sjungma@eit.uni-kl.de
45712027Sjungma@eit.uni-kl.depublic: // constructors and destructor:
45812027Sjungma@eit.uni-kl.de
45912027Sjungma@eit.uni-kl.de    sc_signal()
46012027Sjungma@eit.uni-kl.de	: sc_prim_channel( sc_gen_unique_name( "signal" ) ),
46112027Sjungma@eit.uni-kl.de	  m_change_event_p( 0 ),
46212027Sjungma@eit.uni-kl.de	  m_cur_val(),
46312027Sjungma@eit.uni-kl.de          m_change_stamp( ~sc_dt::UINT64_ONE ),
46412027Sjungma@eit.uni-kl.de	  m_negedge_event_p( 0 ),
46512027Sjungma@eit.uni-kl.de	  m_new_val(),
46612027Sjungma@eit.uni-kl.de	  m_posedge_event_p( 0 )
46712027Sjungma@eit.uni-kl.de	{}
46812027Sjungma@eit.uni-kl.de
46912027Sjungma@eit.uni-kl.de    explicit sc_signal( const char* name_ )
47012027Sjungma@eit.uni-kl.de	: sc_prim_channel( name_ ),
47112027Sjungma@eit.uni-kl.de	  m_change_event_p( 0 ),
47212027Sjungma@eit.uni-kl.de	  m_cur_val(),
47312027Sjungma@eit.uni-kl.de          m_change_stamp( ~sc_dt::UINT64_ONE ),
47412027Sjungma@eit.uni-kl.de	  m_negedge_event_p( 0 ),
47512027Sjungma@eit.uni-kl.de	  m_new_val(),
47612027Sjungma@eit.uni-kl.de	  m_posedge_event_p( 0 )
47712027Sjungma@eit.uni-kl.de	{}
47812027Sjungma@eit.uni-kl.de
47912027Sjungma@eit.uni-kl.de    sc_signal( const char* name_, sc_dt::sc_logic initial_value_ )
48012027Sjungma@eit.uni-kl.de      : sc_prim_channel( name_ )
48112027Sjungma@eit.uni-kl.de      , m_change_event_p( 0 )
48212027Sjungma@eit.uni-kl.de      , m_cur_val( initial_value_ )
48312027Sjungma@eit.uni-kl.de      , m_change_stamp( ~sc_dt::UINT64_ONE )
48412027Sjungma@eit.uni-kl.de      , m_negedge_event_p( 0 )
48512027Sjungma@eit.uni-kl.de      , m_new_val( initial_value_ )
48612027Sjungma@eit.uni-kl.de      , m_posedge_event_p( 0 )
48712027Sjungma@eit.uni-kl.de    {}
48812027Sjungma@eit.uni-kl.de
48912027Sjungma@eit.uni-kl.de    virtual ~sc_signal()
49012027Sjungma@eit.uni-kl.de	{
49112027Sjungma@eit.uni-kl.de	    delete m_change_event_p;
49212027Sjungma@eit.uni-kl.de	    delete m_negedge_event_p;
49312027Sjungma@eit.uni-kl.de	    delete m_posedge_event_p;
49412027Sjungma@eit.uni-kl.de	}
49512027Sjungma@eit.uni-kl.de
49612027Sjungma@eit.uni-kl.de
49712027Sjungma@eit.uni-kl.de    // interface methods
49812027Sjungma@eit.uni-kl.de
49912027Sjungma@eit.uni-kl.de    virtual void register_port( sc_port_base&, const char* );
50012027Sjungma@eit.uni-kl.de
50112027Sjungma@eit.uni-kl.de    virtual sc_writer_policy get_writer_policy() const
50212027Sjungma@eit.uni-kl.de        { return POL; }
50312027Sjungma@eit.uni-kl.de
50412027Sjungma@eit.uni-kl.de    // get the default event
50512027Sjungma@eit.uni-kl.de    virtual const sc_event& default_event() const
50612027Sjungma@eit.uni-kl.de        { return value_changed_event(); }
50712027Sjungma@eit.uni-kl.de
50812027Sjungma@eit.uni-kl.de    // get the value changed event
50912027Sjungma@eit.uni-kl.de    virtual const sc_event& value_changed_event() const;
51012027Sjungma@eit.uni-kl.de
51112027Sjungma@eit.uni-kl.de    // get the positive edge event
51212027Sjungma@eit.uni-kl.de    virtual const sc_event& posedge_event() const;
51312027Sjungma@eit.uni-kl.de
51412027Sjungma@eit.uni-kl.de    // get the negative edge event
51512027Sjungma@eit.uni-kl.de    virtual const sc_event& negedge_event() const;
51612027Sjungma@eit.uni-kl.de
51712027Sjungma@eit.uni-kl.de
51812027Sjungma@eit.uni-kl.de    // read the current value
51912027Sjungma@eit.uni-kl.de    virtual const sc_dt::sc_logic& read() const
52012027Sjungma@eit.uni-kl.de	{ return m_cur_val; }
52112027Sjungma@eit.uni-kl.de
52212027Sjungma@eit.uni-kl.de    // get a reference to the current value (for tracing)
52312027Sjungma@eit.uni-kl.de    virtual const sc_dt::sc_logic& get_data_ref() const
52412027Sjungma@eit.uni-kl.de        { sc_deprecated_get_data_ref(); return m_cur_val; }
52512027Sjungma@eit.uni-kl.de
52612027Sjungma@eit.uni-kl.de
52712027Sjungma@eit.uni-kl.de    // was there an event?
52812027Sjungma@eit.uni-kl.de    virtual bool event() const
52912027Sjungma@eit.uni-kl.de        { return simcontext()->event_occurred(m_change_stamp); }
53012027Sjungma@eit.uni-kl.de
53112027Sjungma@eit.uni-kl.de    // was there a positive edge event?
53212027Sjungma@eit.uni-kl.de    virtual bool posedge() const
53312027Sjungma@eit.uni-kl.de	{ return ( event() && m_cur_val == sc_dt::SC_LOGIC_1 ); }
53412027Sjungma@eit.uni-kl.de
53512027Sjungma@eit.uni-kl.de    // was there a negative edge event?
53612027Sjungma@eit.uni-kl.de    virtual bool negedge() const
53712027Sjungma@eit.uni-kl.de	{ return ( event() && m_cur_val == sc_dt::SC_LOGIC_0 ); }
53812027Sjungma@eit.uni-kl.de
53912027Sjungma@eit.uni-kl.de
54012027Sjungma@eit.uni-kl.de    // write the new value
54112027Sjungma@eit.uni-kl.de    virtual void write( const sc_dt::sc_logic& );
54212027Sjungma@eit.uni-kl.de
54312027Sjungma@eit.uni-kl.de
54412027Sjungma@eit.uni-kl.de    // other methods
54512027Sjungma@eit.uni-kl.de
54612027Sjungma@eit.uni-kl.de    operator const sc_dt::sc_logic& () const
54712027Sjungma@eit.uni-kl.de	{ return read(); }
54812027Sjungma@eit.uni-kl.de
54912027Sjungma@eit.uni-kl.de
55012027Sjungma@eit.uni-kl.de    this_type& operator = ( const sc_dt::sc_logic& a )
55112027Sjungma@eit.uni-kl.de	{ write( a ); return *this; }
55212027Sjungma@eit.uni-kl.de
55312027Sjungma@eit.uni-kl.de    this_type& operator = ( const sc_signal_in_if<sc_dt::sc_logic>& a )
55412027Sjungma@eit.uni-kl.de	{ write( a.read() ); return *this; }
55512027Sjungma@eit.uni-kl.de
55612027Sjungma@eit.uni-kl.de    this_type& operator = (const this_type& a)
55712027Sjungma@eit.uni-kl.de	{ write( a.read() ); return *this; }
55812027Sjungma@eit.uni-kl.de
55912027Sjungma@eit.uni-kl.de
56012027Sjungma@eit.uni-kl.de    const sc_dt::sc_logic& get_new_value() const
56112027Sjungma@eit.uni-kl.de        { sc_deprecated_get_new_value();  return m_new_val; }
56212027Sjungma@eit.uni-kl.de
56312027Sjungma@eit.uni-kl.de
56412027Sjungma@eit.uni-kl.de    void trace( sc_trace_file* tf ) const
56512027Sjungma@eit.uni-kl.de	{
56612027Sjungma@eit.uni-kl.de	    sc_deprecated_trace();
56712027Sjungma@eit.uni-kl.de#           ifdef DEBUG_SYSTEMC
56812027Sjungma@eit.uni-kl.de	        sc_trace( tf, read(), name() );
56912027Sjungma@eit.uni-kl.de#           else
57012027Sjungma@eit.uni-kl.de                if ( tf ) {}
57112027Sjungma@eit.uni-kl.de#           endif
57212027Sjungma@eit.uni-kl.de	}
57312027Sjungma@eit.uni-kl.de
57412027Sjungma@eit.uni-kl.de    virtual void print( ::std::ostream& = ::std::cout ) const;
57512027Sjungma@eit.uni-kl.de    virtual void dump( ::std::ostream& = ::std::cout ) const;
57612027Sjungma@eit.uni-kl.de
57712027Sjungma@eit.uni-kl.de    virtual const char* kind() const
57812027Sjungma@eit.uni-kl.de        { return "sc_signal"; }
57912027Sjungma@eit.uni-kl.de
58012027Sjungma@eit.uni-kl.deprotected:
58112027Sjungma@eit.uni-kl.de
58212027Sjungma@eit.uni-kl.de    virtual void update();
58312027Sjungma@eit.uni-kl.de            void do_update();
58412027Sjungma@eit.uni-kl.de
58512027Sjungma@eit.uni-kl.deprotected:
58612027Sjungma@eit.uni-kl.de
58712027Sjungma@eit.uni-kl.de    mutable sc_event* m_change_event_p;  // value change event if present.
58812027Sjungma@eit.uni-kl.de    sc_dt::sc_logic   m_cur_val;         // current value of object.
58912027Sjungma@eit.uni-kl.de    sc_dt::uint64     m_change_stamp;    // delta of last event
59012027Sjungma@eit.uni-kl.de    mutable sc_event* m_negedge_event_p; // negative edge event if present.
59112027Sjungma@eit.uni-kl.de    sc_dt::sc_logic   m_new_val;         // next value of object.
59212027Sjungma@eit.uni-kl.de    mutable sc_event* m_posedge_event_p; // positive edge event if present.
59312027Sjungma@eit.uni-kl.de
59412027Sjungma@eit.uni-kl.deprivate:
59512027Sjungma@eit.uni-kl.de
59612027Sjungma@eit.uni-kl.de    // disabled
59712027Sjungma@eit.uni-kl.de    sc_signal( const this_type& );
59812027Sjungma@eit.uni-kl.de};
59912027Sjungma@eit.uni-kl.de
60012027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
60112027Sjungma@eit.uni-kl.de
60212027Sjungma@eit.uni-kl.detemplate< typename T, sc_writer_policy POL >
60312027Sjungma@eit.uni-kl.deinline
60412027Sjungma@eit.uni-kl.de::std::ostream&
60512027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, const sc_signal<T,POL>& a )
60612027Sjungma@eit.uni-kl.de{
60712027Sjungma@eit.uni-kl.de    return ( os << a.read() );
60812027Sjungma@eit.uni-kl.de}
60912027Sjungma@eit.uni-kl.de
61012027Sjungma@eit.uni-kl.de
61112027Sjungma@eit.uni-kl.de
61212027Sjungma@eit.uni-kl.de} // namespace sc_core
61312027Sjungma@eit.uni-kl.de
61412027Sjungma@eit.uni-kl.de/*****************************************************************************
61512027Sjungma@eit.uni-kl.de
61612027Sjungma@eit.uni-kl.de  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
61712027Sjungma@eit.uni-kl.de  changes you are making here.
61812027Sjungma@eit.uni-kl.de
61912027Sjungma@eit.uni-kl.de      Name, Affiliation, Date:
62012027Sjungma@eit.uni-kl.de  Description of Modification:
62112027Sjungma@eit.uni-kl.de
62212027Sjungma@eit.uni-kl.de *****************************************************************************/
62312027Sjungma@eit.uni-kl.de//$Log: sc_signal.h,v $
62412027Sjungma@eit.uni-kl.de//Revision 1.16  2011/08/26 20:45:42  acg
62512027Sjungma@eit.uni-kl.de// Andy Goodrich: moved the modification log to the end of the file to
62612027Sjungma@eit.uni-kl.de// eliminate source line number skew when check-ins are done.
62712027Sjungma@eit.uni-kl.de//
62812027Sjungma@eit.uni-kl.de//Revision 1.15  2011/08/15 16:43:24  acg
62912027Sjungma@eit.uni-kl.de// Torsten Maehne: changes to remove unused argument warnings.
63012027Sjungma@eit.uni-kl.de//
63112027Sjungma@eit.uni-kl.de//Revision 1.14  2011/06/25 17:08:38  acg
63212027Sjungma@eit.uni-kl.de// Andy Goodrich: Jerome Cornet's changes to use libtool to build the
63312027Sjungma@eit.uni-kl.de// library.
63412027Sjungma@eit.uni-kl.de//
63512027Sjungma@eit.uni-kl.de//Revision 1.13  2011/04/13 02:59:09  acg
63612027Sjungma@eit.uni-kl.de// Andy Goodrich: made events internal to signals into kernel events.
63712027Sjungma@eit.uni-kl.de//
63812027Sjungma@eit.uni-kl.de//Revision 1.12  2011/04/08 18:22:46  acg
63912027Sjungma@eit.uni-kl.de// Philipp A. Hartmann: use the context of the primitive channel to get
64012027Sjungma@eit.uni-kl.de// the change stamp value.
64112027Sjungma@eit.uni-kl.de//
64212027Sjungma@eit.uni-kl.de//Revision 1.11  2011/04/05 20:48:09  acg
64312027Sjungma@eit.uni-kl.de// Andy Goodrich: changes to make sure that event(), posedge() and negedge()
64412027Sjungma@eit.uni-kl.de// only return true if the clock has not moved.
64512027Sjungma@eit.uni-kl.de//
64612027Sjungma@eit.uni-kl.de//Revision 1.10  2011/04/05 07:10:55  acg
64712027Sjungma@eit.uni-kl.de// Andy Goodrich: added line that I dropped in sc_signal<sc_dt::sc_logic>.
64812027Sjungma@eit.uni-kl.de//
64912027Sjungma@eit.uni-kl.de//Revision 1.9  2011/04/05 06:15:18  acg
65012027Sjungma@eit.uni-kl.de// Philipp A. Hartmann: sc_writer_policy: ignore no-ops in delta check.
65112027Sjungma@eit.uni-kl.de//
65212027Sjungma@eit.uni-kl.de//Revision 1.8  2011/03/23 16:17:22  acg
65312027Sjungma@eit.uni-kl.de// Andy Goodrich: hide the sc_events that are kernel related.
65412027Sjungma@eit.uni-kl.de//
65512027Sjungma@eit.uni-kl.de//Revision 1.7  2011/03/06 15:55:08  acg
65612027Sjungma@eit.uni-kl.de// Andy Goodrich: Changes for named events.
65712027Sjungma@eit.uni-kl.de//
65812027Sjungma@eit.uni-kl.de//Revision 1.6  2011/02/18 20:23:45  acg
65912027Sjungma@eit.uni-kl.de// Andy Goodrich: Copyright update.
66012027Sjungma@eit.uni-kl.de//
66112027Sjungma@eit.uni-kl.de//Revision 1.5  2011/02/07 19:16:50  acg
66212027Sjungma@eit.uni-kl.de// Andy Goodrich: changes for handling multiple writers.
66312027Sjungma@eit.uni-kl.de//
66412027Sjungma@eit.uni-kl.de//Revision 1.4  2011/01/25 20:50:37  acg
66512027Sjungma@eit.uni-kl.de// Andy Goodrich: changes for IEEE 1666 2011.
66612027Sjungma@eit.uni-kl.de//
66712027Sjungma@eit.uni-kl.de//Revision 1.3  2010/12/07 19:50:37  acg
66812027Sjungma@eit.uni-kl.de// Andy Goodrich: addition of writer policies, courtesy of Philipp Hartmann.
66912027Sjungma@eit.uni-kl.de//
67012027Sjungma@eit.uni-kl.de//Revision 1.1.1.1  2006/12/15 20:20:04  acg
67112027Sjungma@eit.uni-kl.de//SystemC 2.3
67212027Sjungma@eit.uni-kl.de//
67312027Sjungma@eit.uni-kl.de//Revision 1.14  2006/05/08 17:52:47  acg
67412027Sjungma@eit.uni-kl.de// Andy Goodrich:
67512027Sjungma@eit.uni-kl.de//   (1) added David Long's forward declarations for friend functions,
67612027Sjungma@eit.uni-kl.de//       methods, and operators to keep the Microsoft compiler happy.
67712027Sjungma@eit.uni-kl.de//   (2) Added delta_count() method to sc_prim_channel for use by
67812027Sjungma@eit.uni-kl.de//       sc_signal so that the friend declaration in sc_simcontext.h
67912027Sjungma@eit.uni-kl.de//	   can be for a non-templated class (i.e., sc_prim_channel.)
68012027Sjungma@eit.uni-kl.de//
68112027Sjungma@eit.uni-kl.de//Revision 1.12  2006/04/11 23:11:57  acg
68212027Sjungma@eit.uni-kl.de//  Andy Goodrich: Changes for reset support that only includes
68312027Sjungma@eit.uni-kl.de//  sc_cthread_process instances.
68412027Sjungma@eit.uni-kl.de//
68512027Sjungma@eit.uni-kl.de//Revision 1.11  2006/03/13 20:19:44  acg
68612027Sjungma@eit.uni-kl.de// Andy Goodrich: changed sc_event instances into pointers to sc_event instances
68712027Sjungma@eit.uni-kl.de// that are allocated as needed. This saves considerable storage for large
68812027Sjungma@eit.uni-kl.de// numbers of signals, etc.
68912027Sjungma@eit.uni-kl.de//
69012027Sjungma@eit.uni-kl.de//Revision 1.10  2006/01/26 21:00:50  acg
69112027Sjungma@eit.uni-kl.de// Andy Goodrich: conversion to use sc_event::notify(SC_ZERO_TIME) instead of
69212027Sjungma@eit.uni-kl.de// sc_event::notify_delayed()
69312027Sjungma@eit.uni-kl.de//
69412027Sjungma@eit.uni-kl.de//Revision 1.9  2006/01/24 20:45:41  acg
69512027Sjungma@eit.uni-kl.de//Andy Goodrich: converted notify_delayed() calls into notify_next_delta() calls
69612027Sjungma@eit.uni-kl.de//to eliminate deprecation warnings. notify_next_delta() is an implemenation-
69712027Sjungma@eit.uni-kl.de//dependent method of sc_event. It is simpler than notify_delayed(), and should
69812027Sjungma@eit.uni-kl.de//speed up simulation speeds.
69912027Sjungma@eit.uni-kl.de//
70012027Sjungma@eit.uni-kl.de//Revision 1.8  2006/01/19 19:18:25  acg
70112027Sjungma@eit.uni-kl.de//Andy Goodrich: eliminated check_writer in favor of inline code within the
70212027Sjungma@eit.uni-kl.de//write() method since we always execute the check_writer code even when
70312027Sjungma@eit.uni-kl.de//check writing is turned off.
70412027Sjungma@eit.uni-kl.de//
70512027Sjungma@eit.uni-kl.de//Revision 1.7  2006/01/19 00:30:57  acg
70612027Sjungma@eit.uni-kl.de//Andy Goodrich: Yet another implementation for disabling write checks on
70712027Sjungma@eit.uni-kl.de//signals. This version uses an environment variable, SC_SIGNAL_WRITE_CHECK,
70812027Sjungma@eit.uni-kl.de//that when set to DISABLE will turn off write checking.
70912027Sjungma@eit.uni-kl.de//
71012027Sjungma@eit.uni-kl.de//Revision 1.6  2006/01/18 21:42:26  acg
71112027Sjungma@eit.uni-kl.de//Andy Goodrich: Changes for check writer support, and tightening up sc_clock
71212027Sjungma@eit.uni-kl.de//port usage.
71312027Sjungma@eit.uni-kl.de//
71412027Sjungma@eit.uni-kl.de//Revision 1.5  2006/01/13 20:41:59  acg
71512027Sjungma@eit.uni-kl.de//Andy Goodrich: Changes to add port registration to the things that are
71612027Sjungma@eit.uni-kl.de//checked when SC_NO_WRITE_CHECK is not defined.
71712027Sjungma@eit.uni-kl.de//
71812027Sjungma@eit.uni-kl.de//Revision 1.4  2006/01/13 18:47:20  acg
71912027Sjungma@eit.uni-kl.de//Reversed sense of multiwriter signal check. It now defaults to ON unless the
72012027Sjungma@eit.uni-kl.de//user defines SC_NO_WRITE_CHEK before inclusion of the file.
72112027Sjungma@eit.uni-kl.de//
72212027Sjungma@eit.uni-kl.de//Revision 1.3  2006/01/03 23:18:26  acg
72312027Sjungma@eit.uni-kl.de//Changed copyright to include 2006.
72412027Sjungma@eit.uni-kl.de//
72512027Sjungma@eit.uni-kl.de//Revision 1.2  2005/12/20 21:58:18  acg
72612027Sjungma@eit.uni-kl.de//Removed Makefile.in, changed the event() methods to use sc_simcontext::event_occurred.
72712027Sjungma@eit.uni-kl.de//
72812027Sjungma@eit.uni-kl.de//Revision 1.1.1.1  2005/12/19 23:16:43  acg
72912027Sjungma@eit.uni-kl.de//First check in of SystemC 2.1 into its own archive.
73012027Sjungma@eit.uni-kl.de//
73112027Sjungma@eit.uni-kl.de//Revision 1.19  2005/09/15 23:01:51  acg
73212027Sjungma@eit.uni-kl.de//Added std:: prefix to appropriate methods and types to get around
73312027Sjungma@eit.uni-kl.de//issues with the Edison Front End.
73412027Sjungma@eit.uni-kl.de//
73512027Sjungma@eit.uni-kl.de//Revision 1.18  2005/06/10 22:43:55  acg
73612027Sjungma@eit.uni-kl.de//Added CVS change log annotation.
73712027Sjungma@eit.uni-kl.de//
73812027Sjungma@eit.uni-kl.de
73912027Sjungma@eit.uni-kl.de#endif
74012027Sjungma@eit.uni-kl.de
74112027Sjungma@eit.uni-kl.de// Taf!
742