SystemC 3.0.0
Accellera SystemC proof-of-concept library
sc_fifo_ifs.h
Go to the documentation of this file.
1/*****************************************************************************
2
3 Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
4 more contributor license agreements. See the NOTICE file distributed
5 with this work for additional information regarding copyright ownership.
6 Accellera licenses this file to you under the Apache License, Version 2.0
7 (the "License"); you may not use this file except in compliance with the
8 License. You may obtain a copy of the License at
9
10 http://www.apache.org/licenses/LICENSE-2.0
11
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15 implied. See the License for the specific language governing
16 permissions and limitations under the License.
17
18 *****************************************************************************/
19
20/*****************************************************************************
21
22 sc_fifo_ifs.h -- The sc_fifo<T> interface classes.
23
24 Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21
25
26 CHANGE LOG IS AT THE END OF THE FILE
27 *****************************************************************************/
28
29#ifndef SC_FIFO_IFS_H
30#define SC_FIFO_IFS_H
31
32
34
35namespace sc_core {
36
37// ----------------------------------------------------------------------------
38// CLASS : sc_fifo_nonblocking_in_if<T>
39//
40// The sc_fifo<T> input nonblocking interface class.
41// ----------------------------------------------------------------------------
42
43template <class T>
45: virtual public sc_interface
46{
47public:
48
49 // non-blocking read
50 virtual bool nb_read( T& ) = 0;
51
52 // get the data written event
53 virtual const sc_event& data_written_event() const = 0;
54};
55
56// ----------------------------------------------------------------------------
57// CLASS : sc_fifo_blocking_in_if<T>
58//
59// The sc_fifo<T> input blocking interface class.
60// ----------------------------------------------------------------------------
61
62template <class T>
64: virtual public sc_interface
65{
66public:
67
68 // blocking read
69 virtual void read( T& ) = 0;
70 virtual T read() = 0;
71};
72
73// ----------------------------------------------------------------------------
74// CLASS : sc_fifo_in_if<T>
75//
76// The sc_fifo<T> input interface class.
77// ----------------------------------------------------------------------------
78
79template <class T>
81: public sc_fifo_nonblocking_in_if<T>,
82 public sc_fifo_blocking_in_if<T>
83{
84public:
85
86 // get the number of available samples
87 virtual int num_available() const = 0;
88
89protected:
90
91 // constructor
92
94 {}
95
96private:
97
98 // disabled
100 sc_fifo_in_if<T>& operator = ( const sc_fifo_in_if<T>& );
101};
102
103
104// ----------------------------------------------------------------------------
105// CLASS : sc_fifo_nonblocking_out_if<T>
106//
107// The sc_fifo<T> nonblocking output interface class.
108// ----------------------------------------------------------------------------
109
110template <class T>
112: virtual public sc_interface
113{
114public:
115
116 // non-blocking write
117 virtual bool nb_write( const T& ) = 0;
118
119 // get the data read event
120 virtual const sc_event& data_read_event() const = 0;
121};
122
123// ----------------------------------------------------------------------------
124// CLASS : sc_fifo_blocking_out_if<T>
125//
126// The sc_fifo<T> blocking output interface class.
127// ----------------------------------------------------------------------------
128
129template <class T>
131: virtual public sc_interface
132{
133public:
134
135 // blocking write
136 virtual void write( const T& ) = 0;
137
138};
139
140// ----------------------------------------------------------------------------
141// CLASS : sc_fifo_out_if<T>
142//
143// The sc_fifo<T> output interface class.
144// ----------------------------------------------------------------------------
145
146template <class T>
148: public sc_fifo_nonblocking_out_if<T>,
149 public sc_fifo_blocking_out_if<T>
150{
151public:
152
153 // get the number of free spaces
154 virtual int num_free() const = 0;
155
156protected:
157
158 // constructor
159
161 {}
162
163private:
164
165 // disabled
167 sc_fifo_out_if<T>& operator = ( const sc_fifo_out_if<T>& );
168};
169
170/*****************************************************************************
171
172 MODIFICATION LOG - modifiers, enter your name, affiliation, date and
173 changes you are making here.
174
175 Name, Affiliation, Date: Bishnupriya Bhattacharye, Cadence Design Systems,
176 30 Jan, 2004
177 Description of Modification: Split up the interfaces into blocking and
178 non blocking parts
179
180 Name, Affiliation, Date:
181 Description of Modification:
182
183 *****************************************************************************/
184//$Log: sc_fifo_ifs.h,v $
185//Revision 1.3 2011/08/26 20:45:40 acg
186// Andy Goodrich: moved the modification log to the end of the file to
187// eliminate source line number skew when check-ins are done.
188//
189//Revision 1.2 2011/02/18 20:23:45 acg
190// Andy Goodrich: Copyright update.
191//
192//Revision 1.1.1.1 2006/12/15 20:20:04 acg
193//SystemC 2.3
194//
195//Revision 1.2 2006/01/03 23:18:26 acg
196//Changed copyright to include 2006.
197//
198//Revision 1.1.1.1 2005/12/19 23:16:43 acg
199//First check in of SystemC 2.1 into its own archive.
200//
201//Revision 1.10 2005/06/10 22:43:55 acg
202//Added CVS change log annotation.
203//
204
205} // namespace sc_core
206
207#endif
208
209// Taf!
virtual const sc_event & data_written_event() const =0
virtual int num_available() const =0
virtual const sc_event & data_read_event() const =0
virtual bool nb_write(const T &)=0
virtual void write(const T &)=0
virtual int num_free() const =0