sc_signal.cpp revision 12027:1eb7dc7aa10b
113531Sjairo.balart@metempsy.com/*****************************************************************************
214227Sgiacomo.travaglini@arm.com
314227Sgiacomo.travaglini@arm.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
414227Sgiacomo.travaglini@arm.com  more contributor license agreements.  See the NOTICE file distributed
514227Sgiacomo.travaglini@arm.com  with this work for additional information regarding copyright ownership.
614227Sgiacomo.travaglini@arm.com  Accellera licenses this file to you under the Apache License, Version 2.0
714227Sgiacomo.travaglini@arm.com  (the "License"); you may not use this file except in compliance with the
814227Sgiacomo.travaglini@arm.com  License.  You may obtain a copy of the License at
914227Sgiacomo.travaglini@arm.com
1014227Sgiacomo.travaglini@arm.com    http://www.apache.org/licenses/LICENSE-2.0
1114227Sgiacomo.travaglini@arm.com
1214227Sgiacomo.travaglini@arm.com  Unless required by applicable law or agreed to in writing, software
1314227Sgiacomo.travaglini@arm.com  distributed under the License is distributed on an "AS IS" BASIS,
1413531Sjairo.balart@metempsy.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1513531Sjairo.balart@metempsy.com  implied.  See the License for the specific language governing
1613531Sjairo.balart@metempsy.com  permissions and limitations under the License.
1713531Sjairo.balart@metempsy.com
1813531Sjairo.balart@metempsy.com *****************************************************************************/
1913531Sjairo.balart@metempsy.com
2013531Sjairo.balart@metempsy.com/*****************************************************************************
2113531Sjairo.balart@metempsy.com
2213531Sjairo.balart@metempsy.com  sc_signal.cpp -- The sc_signal<T> primitive channel class.
2313531Sjairo.balart@metempsy.com
2413531Sjairo.balart@metempsy.com  Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21
2513531Sjairo.balart@metempsy.com
2613531Sjairo.balart@metempsy.com  CHANGE LOG IS AT THE END OF THE FILE
2713531Sjairo.balart@metempsy.com *****************************************************************************/
2813531Sjairo.balart@metempsy.com
2913531Sjairo.balart@metempsy.com
3013531Sjairo.balart@metempsy.com#include "sysc/communication/sc_communication_ids.h"
3113531Sjairo.balart@metempsy.com#include "sysc/utils/sc_utils_ids.h"
3213531Sjairo.balart@metempsy.com#include "sysc/communication/sc_signal.h"
3313531Sjairo.balart@metempsy.com#include "sysc/datatypes/int/sc_signed.h"
3413531Sjairo.balart@metempsy.com#include "sysc/datatypes/int/sc_unsigned.h"
3513531Sjairo.balart@metempsy.com#include "sysc/datatypes/bit/sc_lv_base.h"
3613531Sjairo.balart@metempsy.com#include "sysc/kernel/sc_reset.h"
3713531Sjairo.balart@metempsy.com
3813531Sjairo.balart@metempsy.com#include <sstream>
3913531Sjairo.balart@metempsy.com
4013531Sjairo.balart@metempsy.comusing sc_dt::sc_lv_base;
4113531Sjairo.balart@metempsy.comusing sc_dt::sc_signed;
4213531Sjairo.balart@metempsy.comusing sc_dt::sc_unsigned;
4313531Sjairo.balart@metempsy.comusing sc_dt::int64;
4413531Sjairo.balart@metempsy.comusing sc_dt::uint64;
4513531Sjairo.balart@metempsy.com
4613531Sjairo.balart@metempsy.comnamespace sc_core {
4713531Sjairo.balart@metempsy.com
4813531Sjairo.balart@metempsy.com// to avoid code bloat in sc_signal<T>
4913690Sjairo.balart@metempsy.com
5013531Sjairo.balart@metempsy.comvoid
5113531Sjairo.balart@metempsy.comsc_signal_invalid_writer( sc_object* target, sc_object* first_writer,
5213756Sjairo.balart@metempsy.com                          sc_object* second_writer, bool check_delta )
5313531Sjairo.balart@metempsy.com{
5413531Sjairo.balart@metempsy.com    if ( second_writer )
5513531Sjairo.balart@metempsy.com    {
5613531Sjairo.balart@metempsy.com        std::stringstream msg;
5713531Sjairo.balart@metempsy.com
5813531Sjairo.balart@metempsy.com        msg
5913928Sgiacomo.travaglini@arm.com            << "\n signal "
6013531Sjairo.balart@metempsy.com               "`" << target->name() << "' "
6113531Sjairo.balart@metempsy.com               "(" << target->kind() << ")"
6213531Sjairo.balart@metempsy.com            << "\n first driver "
6313531Sjairo.balart@metempsy.com               "`" << first_writer->name() << "' "
6413531Sjairo.balart@metempsy.com              " (" << first_writer->kind() << ")"
6513531Sjairo.balart@metempsy.com            << "\n second driver "
6613531Sjairo.balart@metempsy.com               "`" << second_writer->name() << "' "
6713878Sgiacomo.travaglini@arm.com               "(" << second_writer->kind() << ")";
6813878Sgiacomo.travaglini@arm.com
6913531Sjairo.balart@metempsy.com        if( check_delta )
7013531Sjairo.balart@metempsy.com        {
7113531Sjairo.balart@metempsy.com            msg << "\n first conflicting write in delta cycle "
7213531Sjairo.balart@metempsy.com                << sc_delta_count();
7313531Sjairo.balart@metempsy.com        }
7413531Sjairo.balart@metempsy.com        SC_REPORT_ERROR( SC_ID_MORE_THAN_ONE_SIGNAL_DRIVER_,
7513531Sjairo.balart@metempsy.com                         msg.str().c_str() );
7613531Sjairo.balart@metempsy.com    }
7713928Sgiacomo.travaglini@arm.com}
7813928Sgiacomo.travaglini@arm.com
7913531Sjairo.balart@metempsy.combool
8013531Sjairo.balart@metempsy.comsc_writer_policy_check_port::
8113531Sjairo.balart@metempsy.com  check_port( sc_object* target, sc_port_base * port_, bool is_output )
8213531Sjairo.balart@metempsy.com{
8313531Sjairo.balart@metempsy.com    if ( is_output && sc_get_curr_simcontext()->write_check() )
8413531Sjairo.balart@metempsy.com    {
8513531Sjairo.balart@metempsy.com        // an out or inout port; only one can be connected
8613531Sjairo.balart@metempsy.com        if( m_output != 0) {
8713531Sjairo.balart@metempsy.com            sc_signal_invalid_writer( target, m_output, port_, false );
8813531Sjairo.balart@metempsy.com            return false;
8913531Sjairo.balart@metempsy.com        } else {
9013531Sjairo.balart@metempsy.com            m_output = port_;
9113531Sjairo.balart@metempsy.com        }
9213531Sjairo.balart@metempsy.com    }
9313531Sjairo.balart@metempsy.com    return true;
9413531Sjairo.balart@metempsy.com}
9513531Sjairo.balart@metempsy.com
9613531Sjairo.balart@metempsy.comvoid sc_deprecated_get_data_ref()
9713531Sjairo.balart@metempsy.com{
9813531Sjairo.balart@metempsy.com    static bool warn_get_data_ref_deprecated=true;
9913531Sjairo.balart@metempsy.com    if ( warn_get_data_ref_deprecated )
10013531Sjairo.balart@metempsy.com    {
10113531Sjairo.balart@metempsy.com        warn_get_data_ref_deprecated=false;
10213531Sjairo.balart@metempsy.com	SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
10313531Sjairo.balart@metempsy.com	    "get_data_ref() is deprecated, use read() instead" );
10413531Sjairo.balart@metempsy.com    }
10513531Sjairo.balart@metempsy.com}
10613531Sjairo.balart@metempsy.com
10713690Sjairo.balart@metempsy.comvoid sc_deprecated_get_new_value()
10813690Sjairo.balart@metempsy.com{
10913690Sjairo.balart@metempsy.com    static bool warn_new_value=true;
11013690Sjairo.balart@metempsy.com    if ( warn_new_value )
11113531Sjairo.balart@metempsy.com    {
11213531Sjairo.balart@metempsy.com        warn_new_value=false;
11313531Sjairo.balart@metempsy.com	SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
11413531Sjairo.balart@metempsy.com	    "sc_signal<T>::get_new_value() is deprecated");
11513531Sjairo.balart@metempsy.com    }
11613531Sjairo.balart@metempsy.com}
11713531Sjairo.balart@metempsy.com
11813531Sjairo.balart@metempsy.comvoid sc_deprecated_trace()
11913531Sjairo.balart@metempsy.com{
12013531Sjairo.balart@metempsy.com    static bool warn_trace_deprecated=true;
12113531Sjairo.balart@metempsy.com    if ( warn_trace_deprecated )
12213531Sjairo.balart@metempsy.com    {
12313531Sjairo.balart@metempsy.com        warn_trace_deprecated=false;
12413531Sjairo.balart@metempsy.com	SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_,
12513531Sjairo.balart@metempsy.com	    "sc_signal<T>::trace() is deprecated");
12613531Sjairo.balart@metempsy.com    }
12713531Sjairo.balart@metempsy.com}
12813531Sjairo.balart@metempsy.com
12913531Sjairo.balart@metempsy.comsc_event*
13013531Sjairo.balart@metempsy.comsc_lazy_kernel_event( sc_event** ev, const char* name )
13113531Sjairo.balart@metempsy.com{
13213531Sjairo.balart@metempsy.com    if ( !*ev ) {
13313531Sjairo.balart@metempsy.com        std::string kernel_name = SC_KERNEL_EVENT_PREFIX "_";
13413531Sjairo.balart@metempsy.com        kernel_name.append( name );
13513531Sjairo.balart@metempsy.com        *ev = new sc_event( kernel_name.c_str() );
13613531Sjairo.balart@metempsy.com    }
13713531Sjairo.balart@metempsy.com    return *ev;
13813531Sjairo.balart@metempsy.com
13913531Sjairo.balart@metempsy.com}
14013531Sjairo.balart@metempsy.com
14113531Sjairo.balart@metempsy.com// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
14213531Sjairo.balart@metempsy.com
14313531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
14413531Sjairo.balart@metempsy.comvoid
14513531Sjairo.balart@metempsy.comsc_signal<bool,POL>::register_port( sc_port_base& port_,
14613531Sjairo.balart@metempsy.com                                    const char* if_typename_ )
14713531Sjairo.balart@metempsy.com{
14813531Sjairo.balart@metempsy.com    bool is_output = std::string( if_typename_ ) == typeid(if_type).name();
14913531Sjairo.balart@metempsy.com    if( !policy_type::check_port( this, &port_, is_output ) )
15013531Sjairo.balart@metempsy.com       ((void)0); // fallback? error has been suppressed ...
15113531Sjairo.balart@metempsy.com}
15213531Sjairo.balart@metempsy.com
15313531Sjairo.balart@metempsy.com
15413531Sjairo.balart@metempsy.com// write the new value
15513690Sjairo.balart@metempsy.com
15613690Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
15713690Sjairo.balart@metempsy.comvoid
15813690Sjairo.balart@metempsy.comsc_signal<bool,POL>::write( const bool& value_ )
15913531Sjairo.balart@metempsy.com{
16013531Sjairo.balart@metempsy.com    bool value_changed = !( m_cur_val == value_ );
16113531Sjairo.balart@metempsy.com    if ( !policy_type::check_write(this, value_changed) )
16213531Sjairo.balart@metempsy.com        return;
16313531Sjairo.balart@metempsy.com    m_new_val = value_;
16413531Sjairo.balart@metempsy.com    if( value_changed ) {
16513531Sjairo.balart@metempsy.com        request_update();
16613531Sjairo.balart@metempsy.com    }
16713531Sjairo.balart@metempsy.com}
16813531Sjairo.balart@metempsy.com
16913531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
17013531Sjairo.balart@metempsy.cominline
17113531Sjairo.balart@metempsy.comvoid
17213531Sjairo.balart@metempsy.comsc_signal<bool,POL>::print( ::std::ostream& os ) const
17313531Sjairo.balart@metempsy.com{
17413531Sjairo.balart@metempsy.com    os << m_cur_val;
17513531Sjairo.balart@metempsy.com}
17613531Sjairo.balart@metempsy.com
17713531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
17813531Sjairo.balart@metempsy.comvoid
17913531Sjairo.balart@metempsy.comsc_signal<bool,POL>::dump( ::std::ostream& os ) const
18013690Sjairo.balart@metempsy.com{
18113690Sjairo.balart@metempsy.com    os << "     name = " << name() << ::std::endl;
18213531Sjairo.balart@metempsy.com    os << "    value = " << m_cur_val << ::std::endl;
18313531Sjairo.balart@metempsy.com    os << "new value = " << m_new_val << ::std::endl;
18413690Sjairo.balart@metempsy.com}
18513690Sjairo.balart@metempsy.com
18613531Sjairo.balart@metempsy.com
18713531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
18813531Sjairo.balart@metempsy.comvoid
18913531Sjairo.balart@metempsy.comsc_signal<bool,POL>::update()
19013690Sjairo.balart@metempsy.com{
19113531Sjairo.balart@metempsy.com    policy_type::update();
19213531Sjairo.balart@metempsy.com    if( !( m_new_val == m_cur_val ) ) {
19313531Sjairo.balart@metempsy.com        do_update();
19413531Sjairo.balart@metempsy.com    }
19513531Sjairo.balart@metempsy.com}
19613531Sjairo.balart@metempsy.com
19713531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
19813531Sjairo.balart@metempsy.comvoid
19913531Sjairo.balart@metempsy.comsc_signal<bool,POL>::do_update()
20013531Sjairo.balart@metempsy.com{
20113531Sjairo.balart@metempsy.com    // order of execution below is important, the notify_processes() call
20213531Sjairo.balart@metempsy.com    // must come after the update of m_cur_val for things to work properly!
20313531Sjairo.balart@metempsy.com
20413531Sjairo.balart@metempsy.com    m_cur_val = m_new_val;
20513531Sjairo.balart@metempsy.com
20613756Sjairo.balart@metempsy.com    if ( m_reset_p ) m_reset_p->notify_processes();
20713531Sjairo.balart@metempsy.com
20813531Sjairo.balart@metempsy.com    if ( m_change_event_p ) m_change_event_p->notify_next_delta();
20913531Sjairo.balart@metempsy.com
21013531Sjairo.balart@metempsy.com    sc_event* event_p = this->m_cur_val
21113531Sjairo.balart@metempsy.com                      ? m_posedge_event_p : m_negedge_event_p;
21213531Sjairo.balart@metempsy.com    if ( event_p ) event_p->notify_next_delta();
21313531Sjairo.balart@metempsy.com
21413531Sjairo.balart@metempsy.com    m_change_stamp = simcontext()->change_stamp();
21513531Sjairo.balart@metempsy.com}
21613531Sjairo.balart@metempsy.com
21713531Sjairo.balart@metempsy.com// (edge) event methods
21813531Sjairo.balart@metempsy.com
21913531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
22013531Sjairo.balart@metempsy.comconst sc_event&
22113531Sjairo.balart@metempsy.comsc_signal<bool,POL>::value_changed_event() const
22213531Sjairo.balart@metempsy.com{
22313531Sjairo.balart@metempsy.com    return *sc_lazy_kernel_event(&m_change_event_p,"value_changed_event");
22413531Sjairo.balart@metempsy.com}
22513531Sjairo.balart@metempsy.com
22613531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
22713531Sjairo.balart@metempsy.comconst sc_event&
22813531Sjairo.balart@metempsy.comsc_signal<bool,POL>::posedge_event() const
22913531Sjairo.balart@metempsy.com{
23013531Sjairo.balart@metempsy.com    return *sc_lazy_kernel_event(&m_posedge_event_p,"posedge_event");
23113531Sjairo.balart@metempsy.com}
23213531Sjairo.balart@metempsy.com
23313531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
23413531Sjairo.balart@metempsy.comconst sc_event&
23513531Sjairo.balart@metempsy.comsc_signal<bool,POL>::negedge_event() const
23613531Sjairo.balart@metempsy.com{
23713531Sjairo.balart@metempsy.com    return *sc_lazy_kernel_event(&m_negedge_event_p,"negedge_event");
23813531Sjairo.balart@metempsy.com}
23913531Sjairo.balart@metempsy.com
24013531Sjairo.balart@metempsy.com
24113531Sjairo.balart@metempsy.com// reset support:
24213531Sjairo.balart@metempsy.com
24313531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
24413531Sjairo.balart@metempsy.comsc_reset*
24513531Sjairo.balart@metempsy.comsc_signal<bool,POL>::is_reset() const
24613531Sjairo.balart@metempsy.com{
24713531Sjairo.balart@metempsy.com    sc_reset* result_p;
24813531Sjairo.balart@metempsy.com    if ( !m_reset_p ) m_reset_p = new sc_reset( this );
24913531Sjairo.balart@metempsy.com    result_p = m_reset_p;
25013531Sjairo.balart@metempsy.com    return result_p;
25113531Sjairo.balart@metempsy.com}
25213531Sjairo.balart@metempsy.com
25313531Sjairo.balart@metempsy.com// destructor
25413531Sjairo.balart@metempsy.com
25513531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
25613531Sjairo.balart@metempsy.comsc_signal<bool,POL>::~sc_signal()
25713531Sjairo.balart@metempsy.com{
25813531Sjairo.balart@metempsy.com    delete m_change_event_p;
25913531Sjairo.balart@metempsy.com    delete m_negedge_event_p;
26013531Sjairo.balart@metempsy.com    delete m_posedge_event_p;
26113531Sjairo.balart@metempsy.com    delete m_reset_p;
26213531Sjairo.balart@metempsy.com}
26313531Sjairo.balart@metempsy.com
26413531Sjairo.balart@metempsy.com// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
26513531Sjairo.balart@metempsy.com
26613531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
26713531Sjairo.balart@metempsy.comvoid
26813531Sjairo.balart@metempsy.comsc_signal<sc_dt::sc_logic,POL>::register_port( sc_port_base& port_,
26913531Sjairo.balart@metempsy.com                                               const char* if_typename_ )
27013531Sjairo.balart@metempsy.com{
27113531Sjairo.balart@metempsy.com    bool is_output = std::string( if_typename_ ) == typeid(if_type).name();
27213531Sjairo.balart@metempsy.com    if( !policy_type::check_port( this, &port_, is_output ) )
27313531Sjairo.balart@metempsy.com       ((void)0); // fallback? error has been suppressed ...
27413531Sjairo.balart@metempsy.com}
27513531Sjairo.balart@metempsy.com
27613531Sjairo.balart@metempsy.com
27713531Sjairo.balart@metempsy.com// write the new value
27813531Sjairo.balart@metempsy.com
27913531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
28013531Sjairo.balart@metempsy.cominline
28113531Sjairo.balart@metempsy.comvoid
28213531Sjairo.balart@metempsy.comsc_signal<sc_dt::sc_logic,POL>::write( const sc_dt::sc_logic& value_ )
28313531Sjairo.balart@metempsy.com{
28413531Sjairo.balart@metempsy.com    bool value_changed = !( m_cur_val == value_ );
28513531Sjairo.balart@metempsy.com    if ( !policy_type::check_write(this, value_changed) )
28613531Sjairo.balart@metempsy.com        return;
28713531Sjairo.balart@metempsy.com
28813531Sjairo.balart@metempsy.com    m_new_val = value_;
28913531Sjairo.balart@metempsy.com    if( value_changed ) {
29013531Sjairo.balart@metempsy.com        request_update();
29113531Sjairo.balart@metempsy.com    }
29213531Sjairo.balart@metempsy.com}
29313531Sjairo.balart@metempsy.com
29413531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
29513531Sjairo.balart@metempsy.cominline
29613531Sjairo.balart@metempsy.comvoid
29713531Sjairo.balart@metempsy.comsc_signal<sc_dt::sc_logic,POL>::print( ::std::ostream& os ) const
29813531Sjairo.balart@metempsy.com{
29913531Sjairo.balart@metempsy.com    os << m_cur_val;
30013531Sjairo.balart@metempsy.com}
30113531Sjairo.balart@metempsy.com
30213531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
30313531Sjairo.balart@metempsy.comvoid
30413531Sjairo.balart@metempsy.comsc_signal<sc_dt::sc_logic,POL>::dump( ::std::ostream& os ) const
30513531Sjairo.balart@metempsy.com{
30613531Sjairo.balart@metempsy.com    os << "     name = " << name() << ::std::endl;
30713531Sjairo.balart@metempsy.com    os << "    value = " << m_cur_val << ::std::endl;
30813531Sjairo.balart@metempsy.com    os << "new value = " << m_new_val << ::std::endl;
30913531Sjairo.balart@metempsy.com}
31013531Sjairo.balart@metempsy.com
31113531Sjairo.balart@metempsy.com
31213531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
31313756Sjairo.balart@metempsy.comvoid
31413531Sjairo.balart@metempsy.comsc_signal<sc_dt::sc_logic,POL>::update()
31513531Sjairo.balart@metempsy.com{
31613531Sjairo.balart@metempsy.com    policy_type::update();
31713531Sjairo.balart@metempsy.com    if( !( m_new_val == m_cur_val ) ) {
31813531Sjairo.balart@metempsy.com        do_update();
31913531Sjairo.balart@metempsy.com    }
32013531Sjairo.balart@metempsy.com}
32113531Sjairo.balart@metempsy.com
32213531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
32313531Sjairo.balart@metempsy.comvoid
32413531Sjairo.balart@metempsy.comsc_signal<sc_dt::sc_logic,POL>::do_update()
32513531Sjairo.balart@metempsy.com{
32613531Sjairo.balart@metempsy.com    m_cur_val = m_new_val;
32713531Sjairo.balart@metempsy.com
32813531Sjairo.balart@metempsy.com    if ( m_change_event_p ) m_change_event_p->notify_next_delta();
32913531Sjairo.balart@metempsy.com
33013531Sjairo.balart@metempsy.com    if( m_posedge_event_p && (this->m_cur_val == sc_dt::SC_LOGIC_1) ) {
33113531Sjairo.balart@metempsy.com        m_posedge_event_p->notify_next_delta();
33213531Sjairo.balart@metempsy.com    }
33313531Sjairo.balart@metempsy.com    else if( m_negedge_event_p && (this->m_cur_val == sc_dt::SC_LOGIC_0) ) {
33413531Sjairo.balart@metempsy.com        m_negedge_event_p->notify_next_delta();
33513531Sjairo.balart@metempsy.com    }
33613531Sjairo.balart@metempsy.com
33713531Sjairo.balart@metempsy.com    m_change_stamp = simcontext()->change_stamp();
33813531Sjairo.balart@metempsy.com}
33913531Sjairo.balart@metempsy.com
34013531Sjairo.balart@metempsy.com// (edge) event methods
34113531Sjairo.balart@metempsy.com
34213531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
34313531Sjairo.balart@metempsy.comconst sc_event&
34413531Sjairo.balart@metempsy.comsc_signal<sc_dt::sc_logic,POL>::value_changed_event() const
34513531Sjairo.balart@metempsy.com{
34613531Sjairo.balart@metempsy.com    return *sc_lazy_kernel_event(&m_change_event_p,"value_changed_event");
34713531Sjairo.balart@metempsy.com}
34813531Sjairo.balart@metempsy.com
34913531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
35013531Sjairo.balart@metempsy.comconst sc_event&
35113531Sjairo.balart@metempsy.comsc_signal<sc_dt::sc_logic,POL>::posedge_event() const
35213531Sjairo.balart@metempsy.com{
35313531Sjairo.balart@metempsy.com    return *sc_lazy_kernel_event(&m_posedge_event_p,"posedge_event");
35413531Sjairo.balart@metempsy.com}
35513531Sjairo.balart@metempsy.com
35613531Sjairo.balart@metempsy.comtemplate< sc_writer_policy POL >
35713531Sjairo.balart@metempsy.comconst sc_event&
35813531Sjairo.balart@metempsy.comsc_signal<sc_dt::sc_logic,POL>::negedge_event() const
35913531Sjairo.balart@metempsy.com{
36013756Sjairo.balart@metempsy.com    return *sc_lazy_kernel_event(&m_negedge_event_p,"negedge_event");
36113531Sjairo.balart@metempsy.com}
36213531Sjairo.balart@metempsy.com
36313531Sjairo.balart@metempsy.com
36413531Sjairo.balart@metempsy.com// template instantiations for writer policies
36513531Sjairo.balart@metempsy.com
36613531Sjairo.balart@metempsy.comtemplate class sc_signal<bool,SC_ONE_WRITER>;
36713531Sjairo.balart@metempsy.comtemplate class sc_signal<bool,SC_MANY_WRITERS>;
36813531Sjairo.balart@metempsy.comtemplate class sc_signal<bool,SC_UNCHECKED_WRITERS>;
36913690Sjairo.balart@metempsy.com
37013690Sjairo.balart@metempsy.comtemplate class sc_signal<sc_dt::sc_logic,SC_ONE_WRITER>;
37113690Sjairo.balart@metempsy.comtemplate class sc_signal<sc_dt::sc_logic,SC_MANY_WRITERS>;
37213690Sjairo.balart@metempsy.comtemplate class sc_signal<sc_dt::sc_logic,SC_UNCHECKED_WRITERS>;
37313690Sjairo.balart@metempsy.com
37413690Sjairo.balart@metempsy.com} // namespace sc_core
37513690Sjairo.balart@metempsy.com
37613690Sjairo.balart@metempsy.com/*
37713690Sjairo.balart@metempsy.com$Log: sc_signal.cpp,v $
37813690Sjairo.balart@metempsy.comRevision 1.9  2011/08/26 20:45:42  acg
37913690Sjairo.balart@metempsy.com Andy Goodrich: moved the modification log to the end of the file to
38013690Sjairo.balart@metempsy.com eliminate source line number skew when check-ins are done.
38113690Sjairo.balart@metempsy.com
38213690Sjairo.balart@metempsy.comRevision 1.8  2011/02/18 20:23:45  acg
38313690Sjairo.balart@metempsy.com Andy Goodrich: Copyright update.
38413690Sjairo.balart@metempsy.com
38513690Sjairo.balart@metempsy.comRevision 1.7  2011/02/18 20:08:14  acg
38613690Sjairo.balart@metempsy.com Philipp A. Hartmann: addition of include for sstream for MSVC.
38713690Sjairo.balart@metempsy.com
38813690Sjairo.balart@metempsy.comRevision 1.6  2011/01/25 20:50:37  acg
38913690Sjairo.balart@metempsy.com Andy Goodrich: changes for IEEE 1666 2011.
39013690Sjairo.balart@metempsy.com
39113690Sjairo.balart@metempsy.comRevision 1.5  2010/12/07 19:50:36  acg
39213690Sjairo.balart@metempsy.com Andy Goodrich: addition of writer policies, courtesy of Philipp Hartmann.
39313690Sjairo.balart@metempsy.com
39413690Sjairo.balart@metempsy.comRevision 1.3  2007/04/09 21:59:49  acg
39513690Sjairo.balart@metempsy.com Andy Goodrich: fixed multiple write notification bug where writes
39613690Sjairo.balart@metempsy.com done outside the simulator were being treated as multiple writes.
39713690Sjairo.balart@metempsy.com
39813690Sjairo.balart@metempsy.comRevision 1.2  2007/04/02 17:24:01  acg
39913690Sjairo.balart@metempsy.com Andy Goodrich: added check for null writer pointers in sc_signal invalid
40013690Sjairo.balart@metempsy.com writer method.
40113690Sjairo.balart@metempsy.com
40213531Sjairo.balart@metempsy.comRevision 1.1.1.1  2006/12/15 20:20:04  acg
40313531Sjairo.balart@metempsy.comSystemC 2.3
40413531Sjairo.balart@metempsy.com
40513531Sjairo.balart@metempsy.comRevision 1.7  2006/04/11 23:11:57  acg
40613531Sjairo.balart@metempsy.com  Andy Goodrich: Changes for reset support that only includes
40713531Sjairo.balart@metempsy.com  sc_cthread_process instances.
40813531Sjairo.balart@metempsy.com
40913531Sjairo.balart@metempsy.comRevision 1.6  2006/03/13 20:19:44  acg
41013531Sjairo.balart@metempsy.com Andy Goodrich: changed sc_event instances into pointers to sc_event instances
41113531Sjairo.balart@metempsy.com that are allocated as needed. This saves considerable storage for large
41213531Sjairo.balart@metempsy.com numbers of signals, etc.
41313531Sjairo.balart@metempsy.com
41413531Sjairo.balart@metempsy.comRevision 1.5  2006/01/25 00:31:11  acg
41513531Sjairo.balart@metempsy.com Andy Goodrich: Changed over to use a standard message id of
41613531Sjairo.balart@metempsy.com SC_ID_IEEE_1666_DEPRECATION for all deprecation messages.
41713531Sjairo.balart@metempsy.com
41813531Sjairo.balart@metempsy.comRevision 1.4  2006/01/24 20:46:32  acg
41913531Sjairo.balart@metempsy.comAndy Goodrich: changes to eliminate use of deprecated features. For instance,
42013531Sjairo.balart@metempsy.comusing notify(SC_ZERO_TIME) in place of notify_delayed().
42113531Sjairo.balart@metempsy.com
42213531Sjairo.balart@metempsy.comRevision 1.3  2006/01/18 21:42:26  acg
42313531Sjairo.balart@metempsy.comAndy Goodrich: Changes for check writer support, and tightening up sc_clock
42413531Sjairo.balart@metempsy.comport usage.
42513531Sjairo.balart@metempsy.com
42613531Sjairo.balart@metempsy.comRevision 1.2  2006/01/03 23:18:26  acg
42713531Sjairo.balart@metempsy.comChanged copyright to include 2006.
42813531Sjairo.balart@metempsy.com
42913531Sjairo.balart@metempsy.comRevision 1.1.1.1  2005/12/19 23:16:43  acg
43013531Sjairo.balart@metempsy.comFirst check in of SystemC 2.1 into its own archive.
43113531Sjairo.balart@metempsy.com
43213531Sjairo.balart@metempsy.comRevision 1.14  2005/09/15 23:01:51  acg
43313531Sjairo.balart@metempsy.comAdded std:: prefix to appropriate methods and types to get around
43413531Sjairo.balart@metempsy.comissues with the Edison Front End.
43513531Sjairo.balart@metempsy.com
43613531Sjairo.balart@metempsy.comRevision 1.13  2005/05/08 19:04:06  acg
43713531Sjairo.balart@metempsy.comFix bug in concat_set(int64,off). Other changes from 2.1 examples usage.
43813690Sjairo.balart@metempsy.com
43913690Sjairo.balart@metempsy.comRevision 1.12  2005/04/04 00:15:51  acg
44013531Sjairo.balart@metempsy.comChanges for directory name change to sys from systemc.
44113531Sjairo.balart@metempsy.comChanges for sc_string going to std::string.
44213531Sjairo.balart@metempsy.comChanges for sc_pvector going to std::vector.
44313531Sjairo.balart@metempsy.comChanges for reference pools for bit and part selections.
44413531Sjairo.balart@metempsy.comChanges for const sc_concatref support.
44513531Sjairo.balart@metempsy.com
44613531Sjairo.balart@metempsy.comRevision 1.10  2005/03/21 22:31:32  acg
44713531Sjairo.balart@metempsy.comChanges to sc_core namespace.
44813531Sjairo.balart@metempsy.com
44913531Sjairo.balart@metempsy.comRevision 1.9  2004/09/27 21:02:54  acg
45013531Sjairo.balart@metempsy.comAndy Goodrich - Forte Design Systems, Inc.
45113531Sjairo.balart@metempsy.com   - Added a $Log comment so that CVS checkin comments will appear in
45213531Sjairo.balart@metempsy.com     checked out source.
45313756Sjairo.balart@metempsy.com
45413531Sjairo.balart@metempsy.com*/
45513531Sjairo.balart@metempsy.com
45613531Sjairo.balart@metempsy.com// Taf!
45713756Sjairo.balart@metempsy.com