00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef SC_FIFO_PORTS_H
00028 #define SC_FIFO_PORTS_H
00029
00030
00031 #include "sysc/kernel/sc_simcontext.h"
00032 #include "sysc/communication/sc_port.h"
00033 #include "sysc/communication/sc_fifo_ifs.h"
00034
00035 namespace sc_core {
00036
00037
00043 template <class T>
00044 class sc_fifo_in
00045 : public sc_port<sc_fifo_in_if<T>,0,SC_ONE_OR_MORE_BOUND>
00046 {
00047 public:
00048
00049
00050
00051 typedef T data_type;
00052
00053 typedef sc_fifo_in_if<data_type> if_type;
00054 typedef sc_port<if_type,0,SC_ONE_OR_MORE_BOUND> base_type;
00055 typedef sc_fifo_in<data_type> this_type;
00056
00057 typedef if_type in_if_type;
00058 typedef sc_port_b<in_if_type> in_port_type;
00059
00060 public:
00061
00062
00063
00064 sc_fifo_in()
00065 : base_type()
00066 {}
00067
00068 explicit sc_fifo_in( const char* name_ )
00069 : base_type( name_ )
00070 {}
00071
00072 explicit sc_fifo_in( in_if_type& interface_ )
00073 : base_type( interface_ )
00074 {}
00075
00076 sc_fifo_in( const char* name_, in_if_type& interface_ )
00077 : base_type( name_, interface_ )
00078 {}
00079
00080 explicit sc_fifo_in( in_port_type& parent_ )
00081 : base_type( parent_ )
00082 {}
00083
00084 sc_fifo_in( const char* name_, in_port_type& parent_ )
00085 : base_type( name_, parent_ )
00086 {}
00087
00088 sc_fifo_in( this_type& parent_ )
00089 : base_type( parent_ )
00090 {}
00091
00092 sc_fifo_in( const char* name_, this_type& parent_ )
00093 : base_type( name_, parent_ )
00094 {}
00095
00096
00097
00098
00099 virtual ~sc_fifo_in()
00100 {}
00101
00102
00103
00104
00105
00106
00111
00112 void read( data_type& value_, sc_segid seg_id )
00113 { (*this)->read( value_, seg_id ); }
00114
00119
00120 data_type read( sc_segid seg_id )
00121 { return (*this)->read( seg_id ); }
00122
00123
00124
00125
00126 bool nb_read( data_type& value_ )
00127 { return (*this)->nb_read( value_ ); }
00128
00129
00130
00131
00132 int num_available() const
00133 { return (*this)->num_available(); }
00134
00135
00136
00137
00138 const sc_event& data_written_event() const
00139 { return (*this)->data_written_event(); }
00140
00141
00142
00143
00144 sc_event_finder& data_written() const
00145 {
00146 return *new sc_event_finder_t<in_if_type>(
00147 *this, &in_if_type::data_written_event );
00148 }
00149
00150 virtual const char* kind() const
00151 { return "sc_fifo_in"; }
00152
00153 private:
00154
00155
00156 sc_fifo_in( const this_type& );
00157 this_type& operator = ( const this_type& );
00158 };
00159
00160
00161
00162
00163
00169 template <class T>
00170 class sc_fifo_out
00171 : public sc_port<sc_fifo_out_if<T>,0,SC_ONE_OR_MORE_BOUND>
00172 {
00173 public:
00174
00175
00176
00177 typedef T data_type;
00178
00179 typedef sc_fifo_out_if<data_type> if_type;
00180 typedef sc_port<if_type,0,SC_ONE_OR_MORE_BOUND> base_type;
00181 typedef sc_fifo_out<data_type> this_type;
00182
00183 typedef if_type out_if_type;
00184 typedef sc_port_b<out_if_type> out_port_type;
00185
00186 public:
00187
00188
00189
00190 sc_fifo_out()
00191 : base_type()
00192 {}
00193
00194 explicit sc_fifo_out( const char* name_ )
00195 : base_type( name_ )
00196 {}
00197
00198 explicit sc_fifo_out( out_if_type& interface_ )
00199 : base_type( interface_ )
00200 {}
00201
00202 sc_fifo_out( const char* name_, out_if_type& interface_ )
00203 : base_type( name_, interface_ )
00204 {}
00205
00206 explicit sc_fifo_out( out_port_type& parent_ )
00207 : base_type( parent_ )
00208 {}
00209
00210 sc_fifo_out( const char* name_, out_port_type& parent_ )
00211 : base_type( name_, parent_ )
00212 {}
00213
00214 sc_fifo_out( this_type& parent_ )
00215 : base_type( parent_ )
00216 {}
00217
00218 sc_fifo_out( const char* name_, this_type& parent_ )
00219 : base_type( name_, parent_ )
00220 {}
00221
00222
00223
00224
00225 virtual ~sc_fifo_out()
00226 {}
00227
00228
00229
00230
00231
00232
00237
00238 void write( const data_type& value_, int seg_id )
00239 { (*this)->write( value_, seg_id ); }
00240
00241
00242
00243
00244 bool nb_write( const data_type& value_ )
00245 { return (*this)->nb_write( value_ ); }
00246
00247
00248
00249
00250 int num_free() const
00251 { return (*this)->num_free(); }
00252
00253
00254
00255
00256 const sc_event& data_read_event() const
00257 { return (*this)->data_read_event(); }
00258
00259
00260
00261
00262 sc_event_finder& data_read() const
00263 {
00264 return *new sc_event_finder_t<out_if_type>(
00265 *this, &out_if_type::data_read_event );
00266 }
00267
00268 virtual const char* kind() const
00269 { return "sc_fifo_out"; }
00270
00271 private:
00272
00273
00274 sc_fifo_out( const this_type& );
00275 this_type& operator = ( const this_type& );
00276 };
00277
00278
00279
00280
00281 }
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308 #endif
00309
00310