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