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_ifs.h -- The sc_signal<T> interface classes. 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_IFS_H 3012027Sjungma@eit.uni-kl.de#define SC_SIGNAL_IFS_H 3112027Sjungma@eit.uni-kl.de 3212027Sjungma@eit.uni-kl.de 3312027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_interface.h" 3412027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_writer_policy.h" 3512027Sjungma@eit.uni-kl.de 3612027Sjungma@eit.uni-kl.de 3712027Sjungma@eit.uni-kl.denamespace sc_dt 3812027Sjungma@eit.uni-kl.de{ 3912027Sjungma@eit.uni-kl.de class sc_logic; 4012027Sjungma@eit.uni-kl.de} 4112027Sjungma@eit.uni-kl.de 4212027Sjungma@eit.uni-kl.denamespace sc_core { 4312027Sjungma@eit.uni-kl.de 4412027Sjungma@eit.uni-kl.declass sc_signal_bool_deval; 4512027Sjungma@eit.uni-kl.declass sc_signal_logic_deval; 4612027Sjungma@eit.uni-kl.de 4712027Sjungma@eit.uni-kl.de 4812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 4912027Sjungma@eit.uni-kl.de// CLASS : sc_signal_in_if<T> 5012027Sjungma@eit.uni-kl.de// 5112027Sjungma@eit.uni-kl.de// The sc_signal<T> input interface class. 5212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 5312027Sjungma@eit.uni-kl.de 5412027Sjungma@eit.uni-kl.detemplate <class T> 5512027Sjungma@eit.uni-kl.declass sc_signal_in_if 5612027Sjungma@eit.uni-kl.de: virtual public sc_interface 5712027Sjungma@eit.uni-kl.de{ 5812027Sjungma@eit.uni-kl.depublic: 5912027Sjungma@eit.uni-kl.de 6012027Sjungma@eit.uni-kl.de // get the value changed event 6112027Sjungma@eit.uni-kl.de virtual const sc_event& value_changed_event() const = 0; 6212027Sjungma@eit.uni-kl.de 6312027Sjungma@eit.uni-kl.de 6412027Sjungma@eit.uni-kl.de // read the current value 6512027Sjungma@eit.uni-kl.de virtual const T& read() const = 0; 6612027Sjungma@eit.uni-kl.de 6712027Sjungma@eit.uni-kl.de // get a reference to the current value (for tracing) 6812027Sjungma@eit.uni-kl.de virtual const T& get_data_ref() const = 0; 6912027Sjungma@eit.uni-kl.de 7012027Sjungma@eit.uni-kl.de 7112027Sjungma@eit.uni-kl.de // was there a value changed event? 7212027Sjungma@eit.uni-kl.de virtual bool event() const = 0; 7312027Sjungma@eit.uni-kl.de 7412027Sjungma@eit.uni-kl.deprotected: 7512027Sjungma@eit.uni-kl.de 7612027Sjungma@eit.uni-kl.de // constructor 7712027Sjungma@eit.uni-kl.de 7812027Sjungma@eit.uni-kl.de sc_signal_in_if() 7912027Sjungma@eit.uni-kl.de {} 8012027Sjungma@eit.uni-kl.de 8112027Sjungma@eit.uni-kl.deprivate: 8212027Sjungma@eit.uni-kl.de 8312027Sjungma@eit.uni-kl.de // disabled 8412027Sjungma@eit.uni-kl.de sc_signal_in_if( const sc_signal_in_if<T>& ); 8512027Sjungma@eit.uni-kl.de sc_signal_in_if<T>& operator = ( const sc_signal_in_if<T>& ); 8612027Sjungma@eit.uni-kl.de}; 8712027Sjungma@eit.uni-kl.de 8812027Sjungma@eit.uni-kl.de 8912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 9012027Sjungma@eit.uni-kl.de// CLASS : sc_signal_in_if<bool> 9112027Sjungma@eit.uni-kl.de// 9212027Sjungma@eit.uni-kl.de// Specialization of sc_signal_in_if<T> for type bool. 9312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 9412027Sjungma@eit.uni-kl.de 9512027Sjungma@eit.uni-kl.declass sc_reset; 9612027Sjungma@eit.uni-kl.de 9712027Sjungma@eit.uni-kl.detemplate <> 9812027Sjungma@eit.uni-kl.declass sc_signal_in_if<bool> 9912027Sjungma@eit.uni-kl.de: virtual public sc_interface 10012027Sjungma@eit.uni-kl.de{ 10112027Sjungma@eit.uni-kl.de friend class sc_reset; 10212027Sjungma@eit.uni-kl.depublic: 10312027Sjungma@eit.uni-kl.de 10412027Sjungma@eit.uni-kl.de // get the value changed event 10512027Sjungma@eit.uni-kl.de virtual const sc_event& value_changed_event() const = 0; 10612027Sjungma@eit.uni-kl.de 10712027Sjungma@eit.uni-kl.de // get the positive edge event 10812027Sjungma@eit.uni-kl.de virtual const sc_event& posedge_event() const = 0; 10912027Sjungma@eit.uni-kl.de 11012027Sjungma@eit.uni-kl.de // get the negative edge event 11112027Sjungma@eit.uni-kl.de virtual const sc_event& negedge_event() const = 0; 11212027Sjungma@eit.uni-kl.de 11312027Sjungma@eit.uni-kl.de 11412027Sjungma@eit.uni-kl.de // read the current value 11512027Sjungma@eit.uni-kl.de virtual const bool& read() const = 0; 11612027Sjungma@eit.uni-kl.de 11712027Sjungma@eit.uni-kl.de // get a reference to the current value (for tracing) 11812027Sjungma@eit.uni-kl.de virtual const bool& get_data_ref() const = 0; 11912027Sjungma@eit.uni-kl.de 12012027Sjungma@eit.uni-kl.de 12112027Sjungma@eit.uni-kl.de // was there a value changed event? 12212027Sjungma@eit.uni-kl.de virtual bool event() const = 0; 12312027Sjungma@eit.uni-kl.de 12412027Sjungma@eit.uni-kl.de // was there a positive edge event? 12512027Sjungma@eit.uni-kl.de virtual bool posedge() const = 0; 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de // was there a negative edge event? 12812027Sjungma@eit.uni-kl.de virtual bool negedge() const = 0; 12912027Sjungma@eit.uni-kl.de 13012027Sjungma@eit.uni-kl.deprotected: 13112027Sjungma@eit.uni-kl.de 13212027Sjungma@eit.uni-kl.de // constructor 13312027Sjungma@eit.uni-kl.de 13412027Sjungma@eit.uni-kl.de sc_signal_in_if() 13512027Sjungma@eit.uni-kl.de {} 13612027Sjungma@eit.uni-kl.de 13712027Sjungma@eit.uni-kl.deprivate: 13812027Sjungma@eit.uni-kl.de 13912027Sjungma@eit.uni-kl.de // disabled 14012027Sjungma@eit.uni-kl.de sc_signal_in_if( const sc_signal_in_if<bool>& ); 14112027Sjungma@eit.uni-kl.de sc_signal_in_if<bool>& operator = ( const sc_signal_in_if<bool>& ); 14212027Sjungma@eit.uni-kl.de 14312027Sjungma@eit.uni-kl.de // designate this object as a reset signal 14412027Sjungma@eit.uni-kl.de virtual sc_reset* is_reset() const 14512027Sjungma@eit.uni-kl.de { return NULL; } 14612027Sjungma@eit.uni-kl.de}; 14712027Sjungma@eit.uni-kl.de 14812027Sjungma@eit.uni-kl.de 14912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 15012027Sjungma@eit.uni-kl.de// CLASS : sc_signal_in_if<sc_dt::sc_logic> 15112027Sjungma@eit.uni-kl.de// 15212027Sjungma@eit.uni-kl.de// Specialization of sc_signal_in_if<T> for type sc_dt::sc_logic. 15312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 15412027Sjungma@eit.uni-kl.de 15512027Sjungma@eit.uni-kl.detemplate <> 15612027Sjungma@eit.uni-kl.declass sc_signal_in_if<sc_dt::sc_logic> 15712027Sjungma@eit.uni-kl.de: virtual public sc_interface 15812027Sjungma@eit.uni-kl.de{ 15912027Sjungma@eit.uni-kl.depublic: 16012027Sjungma@eit.uni-kl.de 16112027Sjungma@eit.uni-kl.de // get the value changed event 16212027Sjungma@eit.uni-kl.de virtual const sc_event& value_changed_event() const = 0; 16312027Sjungma@eit.uni-kl.de 16412027Sjungma@eit.uni-kl.de // get the positive edge event 16512027Sjungma@eit.uni-kl.de virtual const sc_event& posedge_event() const = 0; 16612027Sjungma@eit.uni-kl.de 16712027Sjungma@eit.uni-kl.de // get the negative edge event 16812027Sjungma@eit.uni-kl.de virtual const sc_event& negedge_event() const = 0; 16912027Sjungma@eit.uni-kl.de 17012027Sjungma@eit.uni-kl.de 17112027Sjungma@eit.uni-kl.de // read the current value 17212027Sjungma@eit.uni-kl.de virtual const sc_dt::sc_logic& read() const = 0; 17312027Sjungma@eit.uni-kl.de 17412027Sjungma@eit.uni-kl.de // get a reference to the current value (for tracing) 17512027Sjungma@eit.uni-kl.de virtual const sc_dt::sc_logic& get_data_ref() const = 0; 17612027Sjungma@eit.uni-kl.de 17712027Sjungma@eit.uni-kl.de 17812027Sjungma@eit.uni-kl.de // was there a value changed event? 17912027Sjungma@eit.uni-kl.de virtual bool event() const = 0; 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.de // was there a positive edge event? 18212027Sjungma@eit.uni-kl.de virtual bool posedge() const = 0; 18312027Sjungma@eit.uni-kl.de 18412027Sjungma@eit.uni-kl.de // was there a negative edge event? 18512027Sjungma@eit.uni-kl.de virtual bool negedge() const = 0; 18612027Sjungma@eit.uni-kl.de 18712027Sjungma@eit.uni-kl.de 18812027Sjungma@eit.uni-kl.deprotected: 18912027Sjungma@eit.uni-kl.de 19012027Sjungma@eit.uni-kl.de // constructor 19112027Sjungma@eit.uni-kl.de 19212027Sjungma@eit.uni-kl.de sc_signal_in_if() 19312027Sjungma@eit.uni-kl.de {} 19412027Sjungma@eit.uni-kl.de 19512027Sjungma@eit.uni-kl.deprivate: 19612027Sjungma@eit.uni-kl.de 19712027Sjungma@eit.uni-kl.de // disabled 19812027Sjungma@eit.uni-kl.de sc_signal_in_if( const sc_signal_in_if<sc_dt::sc_logic>& ); 19912027Sjungma@eit.uni-kl.de sc_signal_in_if<sc_dt::sc_logic>& operator = ( 20012027Sjungma@eit.uni-kl.de const sc_signal_in_if<sc_dt::sc_logic>& ); 20112027Sjungma@eit.uni-kl.de}; 20212027Sjungma@eit.uni-kl.de 20312027Sjungma@eit.uni-kl.de 20412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 20512027Sjungma@eit.uni-kl.de// CLASS : sc_signal_write_if<T> 20612027Sjungma@eit.uni-kl.de// 20712027Sjungma@eit.uni-kl.de// The standard output interface class. 20812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 20912027Sjungma@eit.uni-kl.detemplate< typename T > 21012027Sjungma@eit.uni-kl.declass sc_signal_write_if : public virtual sc_interface 21112027Sjungma@eit.uni-kl.de{ 21212027Sjungma@eit.uni-kl.depublic: 21312027Sjungma@eit.uni-kl.de sc_signal_write_if() {} 21412027Sjungma@eit.uni-kl.de // write the new value 21512027Sjungma@eit.uni-kl.de virtual void write( const T& ) = 0; 21612027Sjungma@eit.uni-kl.de virtual sc_writer_policy get_writer_policy() const 21712027Sjungma@eit.uni-kl.de { return SC_DEFAULT_WRITER_POLICY; } 21812027Sjungma@eit.uni-kl.deprivate: 21912027Sjungma@eit.uni-kl.de // disabled 22012027Sjungma@eit.uni-kl.de sc_signal_write_if( const sc_signal_write_if<T>& ); 22112027Sjungma@eit.uni-kl.de sc_signal_write_if<T>& operator = ( const sc_signal_write_if<T>& ); 22212027Sjungma@eit.uni-kl.de}; 22312027Sjungma@eit.uni-kl.de 22412027Sjungma@eit.uni-kl.de 22512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 22612027Sjungma@eit.uni-kl.de// CLASS : sc_signal_inout_if<T> 22712027Sjungma@eit.uni-kl.de// 22812027Sjungma@eit.uni-kl.de// The sc_signal<T> input/output interface class. 22912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 23012027Sjungma@eit.uni-kl.de 23112027Sjungma@eit.uni-kl.detemplate <class T> 23212027Sjungma@eit.uni-kl.declass sc_signal_inout_if 23312027Sjungma@eit.uni-kl.de: public sc_signal_in_if<T>, public sc_signal_write_if<T> 23412027Sjungma@eit.uni-kl.de{ 23512027Sjungma@eit.uni-kl.de 23612027Sjungma@eit.uni-kl.deprotected: 23712027Sjungma@eit.uni-kl.de 23812027Sjungma@eit.uni-kl.de // constructor 23912027Sjungma@eit.uni-kl.de 24012027Sjungma@eit.uni-kl.de sc_signal_inout_if() 24112027Sjungma@eit.uni-kl.de {} 24212027Sjungma@eit.uni-kl.de 24312027Sjungma@eit.uni-kl.deprivate: 24412027Sjungma@eit.uni-kl.de 24512027Sjungma@eit.uni-kl.de // disabled 24612027Sjungma@eit.uni-kl.de sc_signal_inout_if( const sc_signal_inout_if<T>& ); 24712027Sjungma@eit.uni-kl.de sc_signal_inout_if<T>& operator = ( const sc_signal_inout_if<T>& ); 24812027Sjungma@eit.uni-kl.de}; 24912027Sjungma@eit.uni-kl.de 25012027Sjungma@eit.uni-kl.de 25112027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 25212027Sjungma@eit.uni-kl.de// CLASS : sc_signal_out_if<T> 25312027Sjungma@eit.uni-kl.de// 25412027Sjungma@eit.uni-kl.de// The sc_signal<T> output interface class. 25512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 25612027Sjungma@eit.uni-kl.de 25712027Sjungma@eit.uni-kl.de// sc_signal_out_if can also be read from, hence no difference with 25812027Sjungma@eit.uni-kl.de// sc_signal_inout_if. 25912027Sjungma@eit.uni-kl.de 26012027Sjungma@eit.uni-kl.de#define sc_signal_out_if sc_signal_inout_if 26112027Sjungma@eit.uni-kl.de 26212027Sjungma@eit.uni-kl.de} // namespace sc_core 26312027Sjungma@eit.uni-kl.de 26412027Sjungma@eit.uni-kl.de//$Log: sc_signal_ifs.h,v $ 26512027Sjungma@eit.uni-kl.de//Revision 1.4 2011/08/26 20:45:43 acg 26612027Sjungma@eit.uni-kl.de// Andy Goodrich: moved the modification log to the end of the file to 26712027Sjungma@eit.uni-kl.de// eliminate source line number skew when check-ins are done. 26812027Sjungma@eit.uni-kl.de// 26912027Sjungma@eit.uni-kl.de//Revision 1.3 2011/02/18 20:23:45 acg 27012027Sjungma@eit.uni-kl.de// Andy Goodrich: Copyright update. 27112027Sjungma@eit.uni-kl.de// 27212027Sjungma@eit.uni-kl.de//Revision 1.2 2010/12/07 19:50:37 acg 27312027Sjungma@eit.uni-kl.de// Andy Goodrich: addition of writer policies, courtesy of Philipp Hartmann. 27412027Sjungma@eit.uni-kl.de// 27512027Sjungma@eit.uni-kl.de//Revision 1.1.1.1 2006/12/15 20:20:04 acg 27612027Sjungma@eit.uni-kl.de//SystemC 2.3 27712027Sjungma@eit.uni-kl.de// 27812027Sjungma@eit.uni-kl.de//Revision 1.4 2006/08/29 23:35:00 acg 27912027Sjungma@eit.uni-kl.de// Andy Goodrich: added bind_count() method to allow users to determine which 28012027Sjungma@eit.uni-kl.de// ports are connected in before_end_of_elaboration(). 28112027Sjungma@eit.uni-kl.de// 28212027Sjungma@eit.uni-kl.de//Revision 1.3 2006/04/11 23:11:57 acg 28312027Sjungma@eit.uni-kl.de// Andy Goodrich: Changes for reset support that only includes 28412027Sjungma@eit.uni-kl.de// sc_cthread_process instances. 28512027Sjungma@eit.uni-kl.de// 28612027Sjungma@eit.uni-kl.de//Revision 1.2 2006/01/03 23:18:26 acg 28712027Sjungma@eit.uni-kl.de//Changed copyright to include 2006. 28812027Sjungma@eit.uni-kl.de// 28912027Sjungma@eit.uni-kl.de//Revision 1.1.1.1 2005/12/19 23:16:43 acg 29012027Sjungma@eit.uni-kl.de//First check in of SystemC 2.1 into its own archive. 29112027Sjungma@eit.uni-kl.de// 29212027Sjungma@eit.uni-kl.de//Revision 1.10 2005/09/15 23:01:51 acg 29312027Sjungma@eit.uni-kl.de//Added std:: prefix to appropriate methods and types to get around 29412027Sjungma@eit.uni-kl.de//issues with the Edison Front End. 29512027Sjungma@eit.uni-kl.de// 29612027Sjungma@eit.uni-kl.de//Revision 1.9 2005/06/29 18:12:12 acg 29712027Sjungma@eit.uni-kl.de//Added $log. 29812027Sjungma@eit.uni-kl.de// 29912027Sjungma@eit.uni-kl.de//Revision 1.8 2005/06/10 22:43:55 acg 30012027Sjungma@eit.uni-kl.de//Added CVS change log annotation. 30112027Sjungma@eit.uni-kl.de// 30212027Sjungma@eit.uni-kl.de 30312027Sjungma@eit.uni-kl.de#endif 30412027Sjungma@eit.uni-kl.de 30512027Sjungma@eit.uni-kl.de// Taf! 306