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