65 explicit sc_fifo(
const char* name_,
int size_ = 16 )
84 virtual void read( T& );
104 virtual void write(
const T& );
129 {
write( a );
return *
this; }
135 virtual void print( ::std::ostream& = ::std::cout )
const;
136 virtual void dump( ::std::ostream& = ::std::cout )
const;
138 virtual const char*
kind()
const
139 {
return "sc_fifo"; }
185 const char* if_typename_ )
187 std::string nm( if_typename_ );
192 if( m_reader != 0 ) {
201 if( m_writer != 0 ) {
210 "sc_fifo<T> port not recognized" );
223 while( num_available() == 0 ) {
247 if( num_available() == 0 ) {
250 bool read_success = buf_read( val_ );
266 while( num_free() == 0 ) {
280 if( num_free() == 0 ) {
283 bool write_success = buf_write( val_ );
288 return write_success;
298#if defined(DEBUG_SYSTEMC)
300 std::string nm = name();
301 for(
int i = 0; i < m_size; ++ i ) {
302 std::snprintf( buf,
sizeof(buf),
"_%d", i );
314 if( m_free != m_size ) {
317 os << m_buf[i] << ::std::endl;
318 i = ( i + 1 ) % m_size;
319 }
while( i != m_wi );
328 os <<
"name = " << name() << ::std::endl;
329 if( m_free != m_size ) {
333 os <<
"value[" << j++ <<
"] = " << m_buf[i] << ::std::endl;
334 i = ( i + 1 ) % m_size;
335 }
while( i != m_wi );
345 if( m_num_read > 0 ) {
349 if( m_num_written > 0 ) {
353 m_num_readable = m_size - m_free;
387 m_buf =
new T[m_size];
402 m_wi = ( m_wi + 1 ) % m_size;
412 if( m_free == m_size ) {
417 m_ri = ( m_ri + 1 ) % m_size;
#define SC_REPORT_ERROR(msg_type, msg)
const char SC_ID_BIND_IF_TO_PORT_[]
inline::std::ostream & operator<<(::std::ostream &os, const sc_fifo< T > &a)
SC_API const char * sc_gen_unique_name(const char *, bool preserve_first)
SC_API void wait(int, sc_simcontext *)
const char SC_ID_MORE_THAN_ONE_FIFO_WRITER_[]
void sc_trace(sc_trace_file *tf, const sc_in< T > &port, const std::string &name)
const char SC_ID_MORE_THAN_ONE_FIFO_READER_[]
const char SC_ID_INVALID_FIFO_SIZE_[]
SC_API const sc_time SC_ZERO_TIME
bool buf_write(const T &)
virtual bool nb_write(const T &)
virtual int num_available() const
virtual const sc_event & data_written_event() const
virtual int num_free() const
virtual const sc_event & data_read_event() const
virtual void dump(::std::ostream &=::std::cout) const
sc_event m_data_written_event
virtual void write(const T &)
sc_event m_data_read_event
void trace(sc_trace_file *tf) const
virtual const char * kind() const
virtual void print(::std::ostream &=::std::cout) const
sc_fifo(const char *name_, int size_=16)
sc_fifo< T > & operator=(const T &a)
virtual bool nb_read(T &)
virtual void register_port(sc_port_base &, const char *)