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