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_fifo_ports.h -- The sc_fifo<T> port 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_FIFO_PORTS_H 3012027Sjungma@eit.uni-kl.de#define SC_FIFO_PORTS_H 3112027Sjungma@eit.uni-kl.de 3212027Sjungma@eit.uni-kl.de 3312027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_port.h" 3412027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_fifo_ifs.h" 3512027Sjungma@eit.uni-kl.de 3612027Sjungma@eit.uni-kl.denamespace sc_core { 3712027Sjungma@eit.uni-kl.de 3812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 3912027Sjungma@eit.uni-kl.de// CLASS : sc_fifo_in<T> 4012027Sjungma@eit.uni-kl.de// 4112027Sjungma@eit.uni-kl.de// The sc_fifo<T> input port class. 4212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 4312027Sjungma@eit.uni-kl.de 4412027Sjungma@eit.uni-kl.detemplate <class T> 4512027Sjungma@eit.uni-kl.declass sc_fifo_in 4612027Sjungma@eit.uni-kl.de: public sc_port<sc_fifo_in_if<T>,0,SC_ONE_OR_MORE_BOUND> 4712027Sjungma@eit.uni-kl.de{ 4812027Sjungma@eit.uni-kl.depublic: 4912027Sjungma@eit.uni-kl.de 5012027Sjungma@eit.uni-kl.de // typedefs 5112027Sjungma@eit.uni-kl.de 5212027Sjungma@eit.uni-kl.de typedef T data_type; 5312027Sjungma@eit.uni-kl.de 5412027Sjungma@eit.uni-kl.de typedef sc_fifo_in_if<data_type> if_type; 5512027Sjungma@eit.uni-kl.de typedef sc_port<if_type,0,SC_ONE_OR_MORE_BOUND> base_type; 5612027Sjungma@eit.uni-kl.de typedef sc_fifo_in<data_type> this_type; 5712027Sjungma@eit.uni-kl.de 5812027Sjungma@eit.uni-kl.de typedef if_type in_if_type; 5912027Sjungma@eit.uni-kl.de typedef sc_port_b<in_if_type> in_port_type; 6012027Sjungma@eit.uni-kl.de 6112027Sjungma@eit.uni-kl.depublic: 6212027Sjungma@eit.uni-kl.de 6312027Sjungma@eit.uni-kl.de // constructors 6412027Sjungma@eit.uni-kl.de 6512027Sjungma@eit.uni-kl.de sc_fifo_in() 6612027Sjungma@eit.uni-kl.de : base_type() 6712027Sjungma@eit.uni-kl.de {} 6812027Sjungma@eit.uni-kl.de 6912027Sjungma@eit.uni-kl.de explicit sc_fifo_in( const char* name_ ) 7012027Sjungma@eit.uni-kl.de : base_type( name_ ) 7112027Sjungma@eit.uni-kl.de {} 7212027Sjungma@eit.uni-kl.de 7312027Sjungma@eit.uni-kl.de explicit sc_fifo_in( in_if_type& interface_ ) 7412027Sjungma@eit.uni-kl.de : base_type( interface_ ) 7512027Sjungma@eit.uni-kl.de {} 7612027Sjungma@eit.uni-kl.de 7712027Sjungma@eit.uni-kl.de sc_fifo_in( const char* name_, in_if_type& interface_ ) 7812027Sjungma@eit.uni-kl.de : base_type( name_, interface_ ) 7912027Sjungma@eit.uni-kl.de {} 8012027Sjungma@eit.uni-kl.de 8112027Sjungma@eit.uni-kl.de explicit sc_fifo_in( in_port_type& parent_ ) 8212027Sjungma@eit.uni-kl.de : base_type( parent_ ) 8312027Sjungma@eit.uni-kl.de {} 8412027Sjungma@eit.uni-kl.de 8512027Sjungma@eit.uni-kl.de sc_fifo_in( const char* name_, in_port_type& parent_ ) 8612027Sjungma@eit.uni-kl.de : base_type( name_, parent_ ) 8712027Sjungma@eit.uni-kl.de {} 8812027Sjungma@eit.uni-kl.de 8912027Sjungma@eit.uni-kl.de sc_fifo_in( this_type& parent_ ) 9012027Sjungma@eit.uni-kl.de : base_type( parent_ ) 9112027Sjungma@eit.uni-kl.de {} 9212027Sjungma@eit.uni-kl.de 9312027Sjungma@eit.uni-kl.de sc_fifo_in( const char* name_, this_type& parent_ ) 9412027Sjungma@eit.uni-kl.de : base_type( name_, parent_ ) 9512027Sjungma@eit.uni-kl.de {} 9612027Sjungma@eit.uni-kl.de 9712027Sjungma@eit.uni-kl.de 9812027Sjungma@eit.uni-kl.de // destructor (does nothing) 9912027Sjungma@eit.uni-kl.de 10012027Sjungma@eit.uni-kl.de virtual ~sc_fifo_in() 10112027Sjungma@eit.uni-kl.de {} 10212027Sjungma@eit.uni-kl.de 10312027Sjungma@eit.uni-kl.de 10412027Sjungma@eit.uni-kl.de // interface access shortcut methods 10512027Sjungma@eit.uni-kl.de 10612027Sjungma@eit.uni-kl.de // blocking read 10712027Sjungma@eit.uni-kl.de 10812027Sjungma@eit.uni-kl.de void read( data_type& value_ ) 10912027Sjungma@eit.uni-kl.de { (*this)->read( value_ ); } 11012027Sjungma@eit.uni-kl.de 11112027Sjungma@eit.uni-kl.de data_type read() 11212027Sjungma@eit.uni-kl.de { return (*this)->read(); } 11312027Sjungma@eit.uni-kl.de 11412027Sjungma@eit.uni-kl.de 11512027Sjungma@eit.uni-kl.de // non-blocking read 11612027Sjungma@eit.uni-kl.de 11712027Sjungma@eit.uni-kl.de bool nb_read( data_type& value_ ) 11812027Sjungma@eit.uni-kl.de { return (*this)->nb_read( value_ ); } 11912027Sjungma@eit.uni-kl.de 12012027Sjungma@eit.uni-kl.de 12112027Sjungma@eit.uni-kl.de // get the number of available samples 12212027Sjungma@eit.uni-kl.de 12312027Sjungma@eit.uni-kl.de int num_available() const 12412027Sjungma@eit.uni-kl.de { return (*this)->num_available(); } 12512027Sjungma@eit.uni-kl.de 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de // get the data written event 12812027Sjungma@eit.uni-kl.de 12912027Sjungma@eit.uni-kl.de const sc_event& data_written_event() const 13012027Sjungma@eit.uni-kl.de { return (*this)->data_written_event(); } 13112027Sjungma@eit.uni-kl.de 13212027Sjungma@eit.uni-kl.de 13312027Sjungma@eit.uni-kl.de // use for static sensitivity to data written event 13412027Sjungma@eit.uni-kl.de 13512027Sjungma@eit.uni-kl.de sc_event_finder& data_written() const 13612027Sjungma@eit.uni-kl.de { 13712027Sjungma@eit.uni-kl.de return *new sc_event_finder_t<in_if_type>( 13812027Sjungma@eit.uni-kl.de *this, &in_if_type::data_written_event ); 13912027Sjungma@eit.uni-kl.de } 14012027Sjungma@eit.uni-kl.de 14112027Sjungma@eit.uni-kl.de virtual const char* kind() const 14212027Sjungma@eit.uni-kl.de { return "sc_fifo_in"; } 14312027Sjungma@eit.uni-kl.de 14412027Sjungma@eit.uni-kl.deprivate: 14512027Sjungma@eit.uni-kl.de 14612027Sjungma@eit.uni-kl.de // disabled 14712027Sjungma@eit.uni-kl.de sc_fifo_in( const this_type& ); 14812027Sjungma@eit.uni-kl.de this_type& operator = ( const this_type& ); 14912027Sjungma@eit.uni-kl.de}; 15012027Sjungma@eit.uni-kl.de 15112027Sjungma@eit.uni-kl.de 15212027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 15312027Sjungma@eit.uni-kl.de 15412027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 15512027Sjungma@eit.uni-kl.de// CLASS : sc_fifo_out<T> 15612027Sjungma@eit.uni-kl.de// 15712027Sjungma@eit.uni-kl.de// The sc_fifo<T> output port class. 15812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 15912027Sjungma@eit.uni-kl.de 16012027Sjungma@eit.uni-kl.detemplate <class T> 16112027Sjungma@eit.uni-kl.declass sc_fifo_out 16212027Sjungma@eit.uni-kl.de: public sc_port<sc_fifo_out_if<T>,0,SC_ONE_OR_MORE_BOUND> 16312027Sjungma@eit.uni-kl.de{ 16412027Sjungma@eit.uni-kl.depublic: 16512027Sjungma@eit.uni-kl.de 16612027Sjungma@eit.uni-kl.de // typedefs 16712027Sjungma@eit.uni-kl.de 16812027Sjungma@eit.uni-kl.de typedef T data_type; 16912027Sjungma@eit.uni-kl.de 17012027Sjungma@eit.uni-kl.de typedef sc_fifo_out_if<data_type> if_type; 17112027Sjungma@eit.uni-kl.de typedef sc_port<if_type,0,SC_ONE_OR_MORE_BOUND> base_type; 17212027Sjungma@eit.uni-kl.de typedef sc_fifo_out<data_type> this_type; 17312027Sjungma@eit.uni-kl.de 17412027Sjungma@eit.uni-kl.de typedef if_type out_if_type; 17512027Sjungma@eit.uni-kl.de typedef sc_port_b<out_if_type> out_port_type; 17612027Sjungma@eit.uni-kl.de 17712027Sjungma@eit.uni-kl.depublic: 17812027Sjungma@eit.uni-kl.de 17912027Sjungma@eit.uni-kl.de // constructors 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.de sc_fifo_out() 18212027Sjungma@eit.uni-kl.de : base_type() 18312027Sjungma@eit.uni-kl.de {} 18412027Sjungma@eit.uni-kl.de 18512027Sjungma@eit.uni-kl.de explicit sc_fifo_out( const char* name_ ) 18612027Sjungma@eit.uni-kl.de : base_type( name_ ) 18712027Sjungma@eit.uni-kl.de {} 18812027Sjungma@eit.uni-kl.de 18912027Sjungma@eit.uni-kl.de explicit sc_fifo_out( out_if_type& interface_ ) 19012027Sjungma@eit.uni-kl.de : base_type( interface_ ) 19112027Sjungma@eit.uni-kl.de {} 19212027Sjungma@eit.uni-kl.de 19312027Sjungma@eit.uni-kl.de sc_fifo_out( const char* name_, out_if_type& interface_ ) 19412027Sjungma@eit.uni-kl.de : base_type( name_, interface_ ) 19512027Sjungma@eit.uni-kl.de {} 19612027Sjungma@eit.uni-kl.de 19712027Sjungma@eit.uni-kl.de explicit sc_fifo_out( out_port_type& parent_ ) 19812027Sjungma@eit.uni-kl.de : base_type( parent_ ) 19912027Sjungma@eit.uni-kl.de {} 20012027Sjungma@eit.uni-kl.de 20112027Sjungma@eit.uni-kl.de sc_fifo_out( const char* name_, out_port_type& parent_ ) 20212027Sjungma@eit.uni-kl.de : base_type( name_, parent_ ) 20312027Sjungma@eit.uni-kl.de {} 20412027Sjungma@eit.uni-kl.de 20512027Sjungma@eit.uni-kl.de sc_fifo_out( this_type& parent_ ) 20612027Sjungma@eit.uni-kl.de : base_type( parent_ ) 20712027Sjungma@eit.uni-kl.de {} 20812027Sjungma@eit.uni-kl.de 20912027Sjungma@eit.uni-kl.de sc_fifo_out( const char* name_, this_type& parent_ ) 21012027Sjungma@eit.uni-kl.de : base_type( name_, parent_ ) 21112027Sjungma@eit.uni-kl.de {} 21212027Sjungma@eit.uni-kl.de 21312027Sjungma@eit.uni-kl.de 21412027Sjungma@eit.uni-kl.de // destructor (does nothing) 21512027Sjungma@eit.uni-kl.de 21612027Sjungma@eit.uni-kl.de virtual ~sc_fifo_out() 21712027Sjungma@eit.uni-kl.de {} 21812027Sjungma@eit.uni-kl.de 21912027Sjungma@eit.uni-kl.de 22012027Sjungma@eit.uni-kl.de // interface access shortcut methods 22112027Sjungma@eit.uni-kl.de 22212027Sjungma@eit.uni-kl.de // blocking write 22312027Sjungma@eit.uni-kl.de 22412027Sjungma@eit.uni-kl.de void write( const data_type& value_ ) 22512027Sjungma@eit.uni-kl.de { (*this)->write( value_ ); } 22612027Sjungma@eit.uni-kl.de 22712027Sjungma@eit.uni-kl.de 22812027Sjungma@eit.uni-kl.de // non-blocking write 22912027Sjungma@eit.uni-kl.de 23012027Sjungma@eit.uni-kl.de bool nb_write( const data_type& value_ ) 23112027Sjungma@eit.uni-kl.de { return (*this)->nb_write( value_ ); } 23212027Sjungma@eit.uni-kl.de 23312027Sjungma@eit.uni-kl.de 23412027Sjungma@eit.uni-kl.de // get the number of free spaces 23512027Sjungma@eit.uni-kl.de 23612027Sjungma@eit.uni-kl.de int num_free() const 23712027Sjungma@eit.uni-kl.de { return (*this)->num_free(); } 23812027Sjungma@eit.uni-kl.de 23912027Sjungma@eit.uni-kl.de 24012027Sjungma@eit.uni-kl.de // get the data read event 24112027Sjungma@eit.uni-kl.de 24212027Sjungma@eit.uni-kl.de const sc_event& data_read_event() const 24312027Sjungma@eit.uni-kl.de { return (*this)->data_read_event(); } 24412027Sjungma@eit.uni-kl.de 24512027Sjungma@eit.uni-kl.de 24612027Sjungma@eit.uni-kl.de // use for static sensitivity to data read event 24712027Sjungma@eit.uni-kl.de 24812027Sjungma@eit.uni-kl.de sc_event_finder& data_read() const 24912027Sjungma@eit.uni-kl.de { 25012027Sjungma@eit.uni-kl.de return *new sc_event_finder_t<out_if_type>( 25112027Sjungma@eit.uni-kl.de *this, &out_if_type::data_read_event ); 25212027Sjungma@eit.uni-kl.de } 25312027Sjungma@eit.uni-kl.de 25412027Sjungma@eit.uni-kl.de virtual const char* kind() const 25512027Sjungma@eit.uni-kl.de { return "sc_fifo_out"; } 25612027Sjungma@eit.uni-kl.de 25712027Sjungma@eit.uni-kl.deprivate: 25812027Sjungma@eit.uni-kl.de 25912027Sjungma@eit.uni-kl.de // disabled 26012027Sjungma@eit.uni-kl.de sc_fifo_out( const this_type& ); 26112027Sjungma@eit.uni-kl.de this_type& operator = ( const this_type& ); 26212027Sjungma@eit.uni-kl.de}; 26312027Sjungma@eit.uni-kl.de 26412027Sjungma@eit.uni-kl.de 26512027Sjungma@eit.uni-kl.de// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 26612027Sjungma@eit.uni-kl.de 26712027Sjungma@eit.uni-kl.de} // namespace sc_core 26812027Sjungma@eit.uni-kl.de 26912027Sjungma@eit.uni-kl.de//$Log: sc_fifo_ports.h,v $ 27012027Sjungma@eit.uni-kl.de//Revision 1.3 2011/08/26 20:45:40 acg 27112027Sjungma@eit.uni-kl.de// Andy Goodrich: moved the modification log to the end of the file to 27212027Sjungma@eit.uni-kl.de// eliminate source line number skew when check-ins are done. 27312027Sjungma@eit.uni-kl.de// 27412027Sjungma@eit.uni-kl.de//Revision 1.2 2011/02/18 20:23:45 acg 27512027Sjungma@eit.uni-kl.de// Andy Goodrich: Copyright update. 27612027Sjungma@eit.uni-kl.de// 27712027Sjungma@eit.uni-kl.de//Revision 1.1.1.1 2006/12/15 20:20:04 acg 27812027Sjungma@eit.uni-kl.de//SystemC 2.3 27912027Sjungma@eit.uni-kl.de// 28012027Sjungma@eit.uni-kl.de//Revision 1.2 2006/01/03 23:18:26 acg 28112027Sjungma@eit.uni-kl.de//Changed copyright to include 2006. 28212027Sjungma@eit.uni-kl.de// 28312027Sjungma@eit.uni-kl.de//Revision 1.1.1.1 2005/12/19 23:16:43 acg 28412027Sjungma@eit.uni-kl.de//First check in of SystemC 2.1 into its own archive. 28512027Sjungma@eit.uni-kl.de// 28612027Sjungma@eit.uni-kl.de//Revision 1.10 2005/09/15 23:01:51 acg 28712027Sjungma@eit.uni-kl.de//Added std:: prefix to appropriate methods and types to get around 28812027Sjungma@eit.uni-kl.de//issues with the Edison Front End. 28912027Sjungma@eit.uni-kl.de// 29012027Sjungma@eit.uni-kl.de//Revision 1.9 2005/06/10 22:43:55 acg 29112027Sjungma@eit.uni-kl.de//Added CVS change log annotation. 29212027Sjungma@eit.uni-kl.de// 29312027Sjungma@eit.uni-kl.de 29412027Sjungma@eit.uni-kl.de#endif 29512027Sjungma@eit.uni-kl.de 29612027Sjungma@eit.uni-kl.de// Taf! 297