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.cpp -- 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
3012027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_communication_ids.h"
3112027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_utils_ids.h"
3212027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_signal.h"
3312027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_signed.h"
3412027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_unsigned.h"
3512027Sjungma@eit.uni-kl.de#include "sysc/datatypes/bit/sc_lv_base.h"
3612027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_reset.h"
3712027Sjungma@eit.uni-kl.de
3812027Sjungma@eit.uni-kl.de#include <sstream>
3912027Sjungma@eit.uni-kl.de
4012027Sjungma@eit.uni-kl.deusing sc_dt::sc_lv_base;
4112027Sjungma@eit.uni-kl.deusing sc_dt::sc_signed;
4212027Sjungma@eit.uni-kl.deusing sc_dt::sc_unsigned;
4312027Sjungma@eit.uni-kl.deusing sc_dt::int64;
4412027Sjungma@eit.uni-kl.deusing sc_dt::uint64;
4512027Sjungma@eit.uni-kl.de
4612027Sjungma@eit.uni-kl.denamespace sc_core {
4712027Sjungma@eit.uni-kl.de
4812027Sjungma@eit.uni-kl.de// to avoid code bloat in sc_signal<T>
4912027Sjungma@eit.uni-kl.de
5012027Sjungma@eit.uni-kl.devoid
5112027Sjungma@eit.uni-kl.desc_signal_invalid_writer( sc_object* target, sc_object* first_writer,
5212027Sjungma@eit.uni-kl.de                          sc_object* second_writer, bool check_delta )
5312027Sjungma@eit.uni-kl.de{
5412027Sjungma@eit.uni-kl.de    if ( second_writer )
5512027Sjungma@eit.uni-kl.de    {
5612027Sjungma@eit.uni-kl.de        std::stringstream msg;
5712027Sjungma@eit.uni-kl.de
5812027Sjungma@eit.uni-kl.de        msg
5912027Sjungma@eit.uni-kl.de            << "\n signal "
6012027Sjungma@eit.uni-kl.de               "`" << target->name() << "' "
6112027Sjungma@eit.uni-kl.de               "(" << target->kind() << ")"
6212027Sjungma@eit.uni-kl.de            << "\n first driver "
6312027Sjungma@eit.uni-kl.de               "`" << first_writer->name() << "' "
6412027Sjungma@eit.uni-kl.de              " (" << first_writer->kind() << ")"
6512027Sjungma@eit.uni-kl.de            << "\n second driver "
6612027Sjungma@eit.uni-kl.de               "`" << second_writer->name() << "' "
6712027Sjungma@eit.uni-kl.de               "(" << second_writer->kind() << ")";
6812027Sjungma@eit.uni-kl.de
6912027Sjungma@eit.uni-kl.de        if( check_delta )
7012027Sjungma@eit.uni-kl.de        {
7112027Sjungma@eit.uni-kl.de            msg << "\n first conflicting write in delta cycle "
7212027Sjungma@eit.uni-kl.de                << sc_delta_count();
7312027Sjungma@eit.uni-kl.de        }
7412027Sjungma@eit.uni-kl.de        SC_REPORT_ERROR( SC_ID_MORE_THAN_ONE_SIGNAL_DRIVER_,
7512027Sjungma@eit.uni-kl.de                         msg.str().c_str() );
7612027Sjungma@eit.uni-kl.de    }
7712027Sjungma@eit.uni-kl.de}
7812027Sjungma@eit.uni-kl.de
7912027Sjungma@eit.uni-kl.debool
8012027Sjungma@eit.uni-kl.desc_writer_policy_check_port::
8112027Sjungma@eit.uni-kl.de  check_port( sc_object* target, sc_port_base * port_, bool is_output )
8212027Sjungma@eit.uni-kl.de{
8312027Sjungma@eit.uni-kl.de    if ( is_output && sc_get_curr_simcontext()->write_check() )
8412027Sjungma@eit.uni-kl.de    {
8512027Sjungma@eit.uni-kl.de        // an out or inout port; only one can be connected
8612027Sjungma@eit.uni-kl.de        if( m_output != 0) {
8712027Sjungma@eit.uni-kl.de            sc_signal_invalid_writer( target, m_output, port_, false );
8812027Sjungma@eit.uni-kl.de            return false;
8912027Sjungma@eit.uni-kl.de        } else {
9012027Sjungma@eit.uni-kl.de            m_output = port_;
9112027Sjungma@eit.uni-kl.de        }
9212027Sjungma@eit.uni-kl.de    }
9312027Sjungma@eit.uni-kl.de    return true;
9412027Sjungma@eit.uni-kl.de}
9512027Sjungma@eit.uni-kl.de
9612027Sjungma@eit.uni-kl.devoid sc_deprecated_get_data_ref()
9712027Sjungma@eit.uni-kl.de{
9812027Sjungma@eit.uni-kl.de    static bool warn_get_data_ref_deprecated=true;
9912027Sjungma@eit.uni-kl.de    if ( warn_get_data_ref_deprecated )
10012027Sjungma@eit.uni-kl.de    {
10112027Sjungma@eit.uni-kl.de        warn_get_data_ref_deprecated=false;
10212027Sjungma@eit.uni-kl.de	SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
10312027Sjungma@eit.uni-kl.de	    "get_data_ref() is deprecated, use read() instead" );
10412027Sjungma@eit.uni-kl.de    }
10512027Sjungma@eit.uni-kl.de}
10612027Sjungma@eit.uni-kl.de
10712027Sjungma@eit.uni-kl.devoid sc_deprecated_get_new_value()
10812027Sjungma@eit.uni-kl.de{
10912027Sjungma@eit.uni-kl.de    static bool warn_new_value=true;
11012027Sjungma@eit.uni-kl.de    if ( warn_new_value )
11112027Sjungma@eit.uni-kl.de    {
11212027Sjungma@eit.uni-kl.de        warn_new_value=false;
11312027Sjungma@eit.uni-kl.de	SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
11412027Sjungma@eit.uni-kl.de	    "sc_signal<T>::get_new_value() is deprecated");
11512027Sjungma@eit.uni-kl.de    }
11612027Sjungma@eit.uni-kl.de}
11712027Sjungma@eit.uni-kl.de
11812027Sjungma@eit.uni-kl.devoid sc_deprecated_trace()
11912027Sjungma@eit.uni-kl.de{
12012027Sjungma@eit.uni-kl.de    static bool warn_trace_deprecated=true;
12112027Sjungma@eit.uni-kl.de    if ( warn_trace_deprecated )
12212027Sjungma@eit.uni-kl.de    {
12312027Sjungma@eit.uni-kl.de        warn_trace_deprecated=false;
12412027Sjungma@eit.uni-kl.de	SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
12512027Sjungma@eit.uni-kl.de	    "sc_signal<T>::trace() is deprecated");
12612027Sjungma@eit.uni-kl.de    }
12712027Sjungma@eit.uni-kl.de}
12812027Sjungma@eit.uni-kl.de
12912027Sjungma@eit.uni-kl.desc_event*
13012027Sjungma@eit.uni-kl.desc_lazy_kernel_event( sc_event** ev, const char* name )
13112027Sjungma@eit.uni-kl.de{
13212027Sjungma@eit.uni-kl.de    if ( !*ev ) {
13312027Sjungma@eit.uni-kl.de        std::string kernel_name = SC_KERNEL_EVENT_PREFIX "_";
13412027Sjungma@eit.uni-kl.de        kernel_name.append( name );
13512027Sjungma@eit.uni-kl.de        *ev = new sc_event( kernel_name.c_str() );
13612027Sjungma@eit.uni-kl.de    }
13712027Sjungma@eit.uni-kl.de    return *ev;
13812027Sjungma@eit.uni-kl.de
13912027Sjungma@eit.uni-kl.de}
14012027Sjungma@eit.uni-kl.de
14112027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
14212027Sjungma@eit.uni-kl.de
14312027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
14412027Sjungma@eit.uni-kl.devoid
14512027Sjungma@eit.uni-kl.desc_signal<bool,POL>::register_port( sc_port_base& port_,
14612027Sjungma@eit.uni-kl.de                                    const char* if_typename_ )
14712027Sjungma@eit.uni-kl.de{
14812027Sjungma@eit.uni-kl.de    bool is_output = std::string( if_typename_ ) == typeid(if_type).name();
14912027Sjungma@eit.uni-kl.de    if( !policy_type::check_port( this, &port_, is_output ) )
15012027Sjungma@eit.uni-kl.de       ((void)0); // fallback? error has been suppressed ...
15112027Sjungma@eit.uni-kl.de}
15212027Sjungma@eit.uni-kl.de
15312027Sjungma@eit.uni-kl.de
15412027Sjungma@eit.uni-kl.de// write the new value
15512027Sjungma@eit.uni-kl.de
15612027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
15712027Sjungma@eit.uni-kl.devoid
15812027Sjungma@eit.uni-kl.desc_signal<bool,POL>::write( const bool& value_ )
15912027Sjungma@eit.uni-kl.de{
16012027Sjungma@eit.uni-kl.de    bool value_changed = !( m_cur_val == value_ );
16112027Sjungma@eit.uni-kl.de    if ( !policy_type::check_write(this, value_changed) )
16212027Sjungma@eit.uni-kl.de        return;
16312027Sjungma@eit.uni-kl.de    m_new_val = value_;
16412027Sjungma@eit.uni-kl.de    if( value_changed ) {
16512027Sjungma@eit.uni-kl.de        request_update();
16612027Sjungma@eit.uni-kl.de    }
16712027Sjungma@eit.uni-kl.de}
16812027Sjungma@eit.uni-kl.de
16912027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
17012027Sjungma@eit.uni-kl.deinline
17112027Sjungma@eit.uni-kl.devoid
17212027Sjungma@eit.uni-kl.desc_signal<bool,POL>::print( ::std::ostream& os ) const
17312027Sjungma@eit.uni-kl.de{
17412027Sjungma@eit.uni-kl.de    os << m_cur_val;
17512027Sjungma@eit.uni-kl.de}
17612027Sjungma@eit.uni-kl.de
17712027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
17812027Sjungma@eit.uni-kl.devoid
17912027Sjungma@eit.uni-kl.desc_signal<bool,POL>::dump( ::std::ostream& os ) const
18012027Sjungma@eit.uni-kl.de{
18112027Sjungma@eit.uni-kl.de    os << "     name = " << name() << ::std::endl;
18212027Sjungma@eit.uni-kl.de    os << "    value = " << m_cur_val << ::std::endl;
18312027Sjungma@eit.uni-kl.de    os << "new value = " << m_new_val << ::std::endl;
18412027Sjungma@eit.uni-kl.de}
18512027Sjungma@eit.uni-kl.de
18612027Sjungma@eit.uni-kl.de
18712027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
18812027Sjungma@eit.uni-kl.devoid
18912027Sjungma@eit.uni-kl.desc_signal<bool,POL>::update()
19012027Sjungma@eit.uni-kl.de{
19112027Sjungma@eit.uni-kl.de    policy_type::update();
19212027Sjungma@eit.uni-kl.de    if( !( m_new_val == m_cur_val ) ) {
19312027Sjungma@eit.uni-kl.de        do_update();
19412027Sjungma@eit.uni-kl.de    }
19512027Sjungma@eit.uni-kl.de}
19612027Sjungma@eit.uni-kl.de
19712027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
19812027Sjungma@eit.uni-kl.devoid
19912027Sjungma@eit.uni-kl.desc_signal<bool,POL>::do_update()
20012027Sjungma@eit.uni-kl.de{
20112027Sjungma@eit.uni-kl.de    // order of execution below is important, the notify_processes() call
20212027Sjungma@eit.uni-kl.de    // must come after the update of m_cur_val for things to work properly!
20312027Sjungma@eit.uni-kl.de
20412027Sjungma@eit.uni-kl.de    m_cur_val = m_new_val;
20512027Sjungma@eit.uni-kl.de
20612027Sjungma@eit.uni-kl.de    if ( m_reset_p ) m_reset_p->notify_processes();
20712027Sjungma@eit.uni-kl.de
20812027Sjungma@eit.uni-kl.de    if ( m_change_event_p ) m_change_event_p->notify_next_delta();
20912027Sjungma@eit.uni-kl.de
21012027Sjungma@eit.uni-kl.de    sc_event* event_p = this->m_cur_val
21112027Sjungma@eit.uni-kl.de                      ? m_posedge_event_p : m_negedge_event_p;
21212027Sjungma@eit.uni-kl.de    if ( event_p ) event_p->notify_next_delta();
21312027Sjungma@eit.uni-kl.de
21412027Sjungma@eit.uni-kl.de    m_change_stamp = simcontext()->change_stamp();
21512027Sjungma@eit.uni-kl.de}
21612027Sjungma@eit.uni-kl.de
21712027Sjungma@eit.uni-kl.de// (edge) event methods
21812027Sjungma@eit.uni-kl.de
21912027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
22012027Sjungma@eit.uni-kl.deconst sc_event&
22112027Sjungma@eit.uni-kl.desc_signal<bool,POL>::value_changed_event() const
22212027Sjungma@eit.uni-kl.de{
22312027Sjungma@eit.uni-kl.de    return *sc_lazy_kernel_event(&m_change_event_p,"value_changed_event");
22412027Sjungma@eit.uni-kl.de}
22512027Sjungma@eit.uni-kl.de
22612027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
22712027Sjungma@eit.uni-kl.deconst sc_event&
22812027Sjungma@eit.uni-kl.desc_signal<bool,POL>::posedge_event() const
22912027Sjungma@eit.uni-kl.de{
23012027Sjungma@eit.uni-kl.de    return *sc_lazy_kernel_event(&m_posedge_event_p,"posedge_event");
23112027Sjungma@eit.uni-kl.de}
23212027Sjungma@eit.uni-kl.de
23312027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
23412027Sjungma@eit.uni-kl.deconst sc_event&
23512027Sjungma@eit.uni-kl.desc_signal<bool,POL>::negedge_event() const
23612027Sjungma@eit.uni-kl.de{
23712027Sjungma@eit.uni-kl.de    return *sc_lazy_kernel_event(&m_negedge_event_p,"negedge_event");
23812027Sjungma@eit.uni-kl.de}
23912027Sjungma@eit.uni-kl.de
24012027Sjungma@eit.uni-kl.de
24112027Sjungma@eit.uni-kl.de// reset support:
24212027Sjungma@eit.uni-kl.de
24312027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
24412027Sjungma@eit.uni-kl.desc_reset*
24512027Sjungma@eit.uni-kl.desc_signal<bool,POL>::is_reset() const
24612027Sjungma@eit.uni-kl.de{
24712027Sjungma@eit.uni-kl.de    sc_reset* result_p;
24812027Sjungma@eit.uni-kl.de    if ( !m_reset_p ) m_reset_p = new sc_reset( this );
24912027Sjungma@eit.uni-kl.de    result_p = m_reset_p;
25012027Sjungma@eit.uni-kl.de    return result_p;
25112027Sjungma@eit.uni-kl.de}
25212027Sjungma@eit.uni-kl.de
25312027Sjungma@eit.uni-kl.de// destructor
25412027Sjungma@eit.uni-kl.de
25512027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
25612027Sjungma@eit.uni-kl.desc_signal<bool,POL>::~sc_signal()
25712027Sjungma@eit.uni-kl.de{
25812027Sjungma@eit.uni-kl.de    delete m_change_event_p;
25912027Sjungma@eit.uni-kl.de    delete m_negedge_event_p;
26012027Sjungma@eit.uni-kl.de    delete m_posedge_event_p;
26112027Sjungma@eit.uni-kl.de    delete m_reset_p;
26212027Sjungma@eit.uni-kl.de}
26312027Sjungma@eit.uni-kl.de
26412027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
26512027Sjungma@eit.uni-kl.de
26612027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
26712027Sjungma@eit.uni-kl.devoid
26812027Sjungma@eit.uni-kl.desc_signal<sc_dt::sc_logic,POL>::register_port( sc_port_base& port_,
26912027Sjungma@eit.uni-kl.de                                               const char* if_typename_ )
27012027Sjungma@eit.uni-kl.de{
27112027Sjungma@eit.uni-kl.de    bool is_output = std::string( if_typename_ ) == typeid(if_type).name();
27212027Sjungma@eit.uni-kl.de    if( !policy_type::check_port( this, &port_, is_output ) )
27312027Sjungma@eit.uni-kl.de       ((void)0); // fallback? error has been suppressed ...
27412027Sjungma@eit.uni-kl.de}
27512027Sjungma@eit.uni-kl.de
27612027Sjungma@eit.uni-kl.de
27712027Sjungma@eit.uni-kl.de// write the new value
27812027Sjungma@eit.uni-kl.de
27912027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
28012027Sjungma@eit.uni-kl.deinline
28112027Sjungma@eit.uni-kl.devoid
28212027Sjungma@eit.uni-kl.desc_signal<sc_dt::sc_logic,POL>::write( const sc_dt::sc_logic& value_ )
28312027Sjungma@eit.uni-kl.de{
28412027Sjungma@eit.uni-kl.de    bool value_changed = !( m_cur_val == value_ );
28512027Sjungma@eit.uni-kl.de    if ( !policy_type::check_write(this, value_changed) )
28612027Sjungma@eit.uni-kl.de        return;
28712027Sjungma@eit.uni-kl.de
28812027Sjungma@eit.uni-kl.de    m_new_val = value_;
28912027Sjungma@eit.uni-kl.de    if( value_changed ) {
29012027Sjungma@eit.uni-kl.de        request_update();
29112027Sjungma@eit.uni-kl.de    }
29212027Sjungma@eit.uni-kl.de}
29312027Sjungma@eit.uni-kl.de
29412027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
29512027Sjungma@eit.uni-kl.deinline
29612027Sjungma@eit.uni-kl.devoid
29712027Sjungma@eit.uni-kl.desc_signal<sc_dt::sc_logic,POL>::print( ::std::ostream& os ) const
29812027Sjungma@eit.uni-kl.de{
29912027Sjungma@eit.uni-kl.de    os << m_cur_val;
30012027Sjungma@eit.uni-kl.de}
30112027Sjungma@eit.uni-kl.de
30212027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
30312027Sjungma@eit.uni-kl.devoid
30412027Sjungma@eit.uni-kl.desc_signal<sc_dt::sc_logic,POL>::dump( ::std::ostream& os ) const
30512027Sjungma@eit.uni-kl.de{
30612027Sjungma@eit.uni-kl.de    os << "     name = " << name() << ::std::endl;
30712027Sjungma@eit.uni-kl.de    os << "    value = " << m_cur_val << ::std::endl;
30812027Sjungma@eit.uni-kl.de    os << "new value = " << m_new_val << ::std::endl;
30912027Sjungma@eit.uni-kl.de}
31012027Sjungma@eit.uni-kl.de
31112027Sjungma@eit.uni-kl.de
31212027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
31312027Sjungma@eit.uni-kl.devoid
31412027Sjungma@eit.uni-kl.desc_signal<sc_dt::sc_logic,POL>::update()
31512027Sjungma@eit.uni-kl.de{
31612027Sjungma@eit.uni-kl.de    policy_type::update();
31712027Sjungma@eit.uni-kl.de    if( !( m_new_val == m_cur_val ) ) {
31812027Sjungma@eit.uni-kl.de        do_update();
31912027Sjungma@eit.uni-kl.de    }
32012027Sjungma@eit.uni-kl.de}
32112027Sjungma@eit.uni-kl.de
32212027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
32312027Sjungma@eit.uni-kl.devoid
32412027Sjungma@eit.uni-kl.desc_signal<sc_dt::sc_logic,POL>::do_update()
32512027Sjungma@eit.uni-kl.de{
32612027Sjungma@eit.uni-kl.de    m_cur_val = m_new_val;
32712027Sjungma@eit.uni-kl.de
32812027Sjungma@eit.uni-kl.de    if ( m_change_event_p ) m_change_event_p->notify_next_delta();
32912027Sjungma@eit.uni-kl.de
33012027Sjungma@eit.uni-kl.de    if( m_posedge_event_p && (this->m_cur_val == sc_dt::SC_LOGIC_1) ) {
33112027Sjungma@eit.uni-kl.de        m_posedge_event_p->notify_next_delta();
33212027Sjungma@eit.uni-kl.de    }
33312027Sjungma@eit.uni-kl.de    else if( m_negedge_event_p && (this->m_cur_val == sc_dt::SC_LOGIC_0) ) {
33412027Sjungma@eit.uni-kl.de        m_negedge_event_p->notify_next_delta();
33512027Sjungma@eit.uni-kl.de    }
33612027Sjungma@eit.uni-kl.de
33712027Sjungma@eit.uni-kl.de    m_change_stamp = simcontext()->change_stamp();
33812027Sjungma@eit.uni-kl.de}
33912027Sjungma@eit.uni-kl.de
34012027Sjungma@eit.uni-kl.de// (edge) event methods
34112027Sjungma@eit.uni-kl.de
34212027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
34312027Sjungma@eit.uni-kl.deconst sc_event&
34412027Sjungma@eit.uni-kl.desc_signal<sc_dt::sc_logic,POL>::value_changed_event() const
34512027Sjungma@eit.uni-kl.de{
34612027Sjungma@eit.uni-kl.de    return *sc_lazy_kernel_event(&m_change_event_p,"value_changed_event");
34712027Sjungma@eit.uni-kl.de}
34812027Sjungma@eit.uni-kl.de
34912027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
35012027Sjungma@eit.uni-kl.deconst sc_event&
35112027Sjungma@eit.uni-kl.desc_signal<sc_dt::sc_logic,POL>::posedge_event() const
35212027Sjungma@eit.uni-kl.de{
35312027Sjungma@eit.uni-kl.de    return *sc_lazy_kernel_event(&m_posedge_event_p,"posedge_event");
35412027Sjungma@eit.uni-kl.de}
35512027Sjungma@eit.uni-kl.de
35612027Sjungma@eit.uni-kl.detemplate< sc_writer_policy POL >
35712027Sjungma@eit.uni-kl.deconst sc_event&
35812027Sjungma@eit.uni-kl.desc_signal<sc_dt::sc_logic,POL>::negedge_event() const
35912027Sjungma@eit.uni-kl.de{
36012027Sjungma@eit.uni-kl.de    return *sc_lazy_kernel_event(&m_negedge_event_p,"negedge_event");
36112027Sjungma@eit.uni-kl.de}
36212027Sjungma@eit.uni-kl.de
36312027Sjungma@eit.uni-kl.de
36412027Sjungma@eit.uni-kl.de// template instantiations for writer policies
36512027Sjungma@eit.uni-kl.de
36612027Sjungma@eit.uni-kl.detemplate class sc_signal<bool,SC_ONE_WRITER>;
36712027Sjungma@eit.uni-kl.detemplate class sc_signal<bool,SC_MANY_WRITERS>;
36812027Sjungma@eit.uni-kl.detemplate class sc_signal<bool,SC_UNCHECKED_WRITERS>;
36912027Sjungma@eit.uni-kl.de
37012027Sjungma@eit.uni-kl.detemplate class sc_signal<sc_dt::sc_logic,SC_ONE_WRITER>;
37112027Sjungma@eit.uni-kl.detemplate class sc_signal<sc_dt::sc_logic,SC_MANY_WRITERS>;
37212027Sjungma@eit.uni-kl.detemplate class sc_signal<sc_dt::sc_logic,SC_UNCHECKED_WRITERS>;
37312027Sjungma@eit.uni-kl.de
37412027Sjungma@eit.uni-kl.de} // namespace sc_core
37512027Sjungma@eit.uni-kl.de
37612027Sjungma@eit.uni-kl.de/*
37712027Sjungma@eit.uni-kl.de$Log: sc_signal.cpp,v $
37812027Sjungma@eit.uni-kl.deRevision 1.9  2011/08/26 20:45:42  acg
37912027Sjungma@eit.uni-kl.de Andy Goodrich: moved the modification log to the end of the file to
38012027Sjungma@eit.uni-kl.de eliminate source line number skew when check-ins are done.
38112027Sjungma@eit.uni-kl.de
38212027Sjungma@eit.uni-kl.deRevision 1.8  2011/02/18 20:23:45  acg
38312027Sjungma@eit.uni-kl.de Andy Goodrich: Copyright update.
38412027Sjungma@eit.uni-kl.de
38512027Sjungma@eit.uni-kl.deRevision 1.7  2011/02/18 20:08:14  acg
38612027Sjungma@eit.uni-kl.de Philipp A. Hartmann: addition of include for sstream for MSVC.
38712027Sjungma@eit.uni-kl.de
38812027Sjungma@eit.uni-kl.deRevision 1.6  2011/01/25 20:50:37  acg
38912027Sjungma@eit.uni-kl.de Andy Goodrich: changes for IEEE 1666 2011.
39012027Sjungma@eit.uni-kl.de
39112027Sjungma@eit.uni-kl.deRevision 1.5  2010/12/07 19:50:36  acg
39212027Sjungma@eit.uni-kl.de Andy Goodrich: addition of writer policies, courtesy of Philipp Hartmann.
39312027Sjungma@eit.uni-kl.de
39412027Sjungma@eit.uni-kl.deRevision 1.3  2007/04/09 21:59:49  acg
39512027Sjungma@eit.uni-kl.de Andy Goodrich: fixed multiple write notification bug where writes
39612027Sjungma@eit.uni-kl.de done outside the simulator were being treated as multiple writes.
39712027Sjungma@eit.uni-kl.de
39812027Sjungma@eit.uni-kl.deRevision 1.2  2007/04/02 17:24:01  acg
39912027Sjungma@eit.uni-kl.de Andy Goodrich: added check for null writer pointers in sc_signal invalid
40012027Sjungma@eit.uni-kl.de writer method.
40112027Sjungma@eit.uni-kl.de
40212027Sjungma@eit.uni-kl.deRevision 1.1.1.1  2006/12/15 20:20:04  acg
40312027Sjungma@eit.uni-kl.deSystemC 2.3
40412027Sjungma@eit.uni-kl.de
40512027Sjungma@eit.uni-kl.deRevision 1.7  2006/04/11 23:11:57  acg
40612027Sjungma@eit.uni-kl.de  Andy Goodrich: Changes for reset support that only includes
40712027Sjungma@eit.uni-kl.de  sc_cthread_process instances.
40812027Sjungma@eit.uni-kl.de
40912027Sjungma@eit.uni-kl.deRevision 1.6  2006/03/13 20:19:44  acg
41012027Sjungma@eit.uni-kl.de Andy Goodrich: changed sc_event instances into pointers to sc_event instances
41112027Sjungma@eit.uni-kl.de that are allocated as needed. This saves considerable storage for large
41212027Sjungma@eit.uni-kl.de numbers of signals, etc.
41312027Sjungma@eit.uni-kl.de
41412027Sjungma@eit.uni-kl.deRevision 1.5  2006/01/25 00:31:11  acg
41512027Sjungma@eit.uni-kl.de Andy Goodrich: Changed over to use a standard message id of
41612027Sjungma@eit.uni-kl.de SC_ID_IEEE_1666_DEPRECATION for all deprecation messages.
41712027Sjungma@eit.uni-kl.de
41812027Sjungma@eit.uni-kl.deRevision 1.4  2006/01/24 20:46:32  acg
41912027Sjungma@eit.uni-kl.deAndy Goodrich: changes to eliminate use of deprecated features. For instance,
42012027Sjungma@eit.uni-kl.deusing notify(SC_ZERO_TIME) in place of notify_delayed().
42112027Sjungma@eit.uni-kl.de
42212027Sjungma@eit.uni-kl.deRevision 1.3  2006/01/18 21:42:26  acg
42312027Sjungma@eit.uni-kl.deAndy Goodrich: Changes for check writer support, and tightening up sc_clock
42412027Sjungma@eit.uni-kl.deport usage.
42512027Sjungma@eit.uni-kl.de
42612027Sjungma@eit.uni-kl.deRevision 1.2  2006/01/03 23:18:26  acg
42712027Sjungma@eit.uni-kl.deChanged copyright to include 2006.
42812027Sjungma@eit.uni-kl.de
42912027Sjungma@eit.uni-kl.deRevision 1.1.1.1  2005/12/19 23:16:43  acg
43012027Sjungma@eit.uni-kl.deFirst check in of SystemC 2.1 into its own archive.
43112027Sjungma@eit.uni-kl.de
43212027Sjungma@eit.uni-kl.deRevision 1.14  2005/09/15 23:01:51  acg
43312027Sjungma@eit.uni-kl.deAdded std:: prefix to appropriate methods and types to get around
43412027Sjungma@eit.uni-kl.deissues with the Edison Front End.
43512027Sjungma@eit.uni-kl.de
43612027Sjungma@eit.uni-kl.deRevision 1.13  2005/05/08 19:04:06  acg
43712027Sjungma@eit.uni-kl.deFix bug in concat_set(int64,off). Other changes from 2.1 examples usage.
43812027Sjungma@eit.uni-kl.de
43912027Sjungma@eit.uni-kl.deRevision 1.12  2005/04/04 00:15:51  acg
44012027Sjungma@eit.uni-kl.deChanges for directory name change to sys from systemc.
44112027Sjungma@eit.uni-kl.deChanges for sc_string going to std::string.
44212027Sjungma@eit.uni-kl.deChanges for sc_pvector going to std::vector.
44312027Sjungma@eit.uni-kl.deChanges for reference pools for bit and part selections.
44412027Sjungma@eit.uni-kl.deChanges for const sc_concatref support.
44512027Sjungma@eit.uni-kl.de
44612027Sjungma@eit.uni-kl.deRevision 1.10  2005/03/21 22:31:32  acg
44712027Sjungma@eit.uni-kl.deChanges to sc_core namespace.
44812027Sjungma@eit.uni-kl.de
44912027Sjungma@eit.uni-kl.deRevision 1.9  2004/09/27 21:02:54  acg
45012027Sjungma@eit.uni-kl.deAndy Goodrich - Forte Design Systems, Inc.
45112027Sjungma@eit.uni-kl.de   - Added a $Log comment so that CVS checkin comments will appear in
45212027Sjungma@eit.uni-kl.de     checked out source.
45312027Sjungma@eit.uni-kl.de
45412027Sjungma@eit.uni-kl.de*/
45512027Sjungma@eit.uni-kl.de
45612027Sjungma@eit.uni-kl.de// Taf!
457