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