F
fl
Hi,
I am new to C++. I do not understand why the following definition of
"request_in_port" is a pointer:
..............................
typedef tlm::tlm_generic_payload *gp_ptr; // generic payload
.. . . . .
sc_core::sc_port<sc_core::sc_fifo_in_if <gp_ptr> >
request_in_port;
.............................
because I find that "request_in_port->read()" is used in this way:
.............................
tlm::tlm_generic_payload *transaction_ptr; // transaction pointer
.. . . . . .
transaction_ptr = request_in_port->read(); // get request from
input fifo
.............................
I know that "gp_ptr" is a pointer, but what type does
"sc_core::sc_fifo_in_if <gp_ptr>" return?
"<sc_core::sc_fifo_in_if <gp_ptr> >" should be a class type?
"sc_fifo_in_if<T>" is given below:
.............................
//
----------------------------------------------------------------------------
// CLASS : sc_fifo_in_if<T>
//
// The sc_fifo<T> input interface class.
//
----------------------------------------------------------------------------
template <class T>
class sc_fifo_in_if
: public sc_fifo_nonblocking_in_if<T>,
public sc_fifo_blocking_in_if<T>
{
public:
// get the number of available samples
virtual int num_available() const = 0;
protected:
}
.........................
I am puzzled on why "request_in_port" is a pointer. Could you help me?
Thanks.
BTW, the fifo read() is as below.
.............................
// blocking read
template <class T>
inline
void
sc_fifo<T>::read( T& val_ )
{
while( num_available() == 0 ) {
sc_core::wait( m_data_written_event );
}
m_num_read ++;
buf_read( val_ );
request_update();
}
template <class T>
inline
T
sc_fifo<T>::read()
{
T tmp;
read( tmp );
return tmp;
}
.................................
I am new to C++. I do not understand why the following definition of
"request_in_port" is a pointer:
..............................
typedef tlm::tlm_generic_payload *gp_ptr; // generic payload
.. . . . .
sc_core::sc_port<sc_core::sc_fifo_in_if <gp_ptr> >
request_in_port;
.............................
because I find that "request_in_port->read()" is used in this way:
.............................
tlm::tlm_generic_payload *transaction_ptr; // transaction pointer
.. . . . . .
transaction_ptr = request_in_port->read(); // get request from
input fifo
.............................
I know that "gp_ptr" is a pointer, but what type does
"sc_core::sc_fifo_in_if <gp_ptr>" return?
"<sc_core::sc_fifo_in_if <gp_ptr> >" should be a class type?
"sc_fifo_in_if<T>" is given below:
.............................
//
----------------------------------------------------------------------------
// CLASS : sc_fifo_in_if<T>
//
// The sc_fifo<T> input interface class.
//
----------------------------------------------------------------------------
template <class T>
class sc_fifo_in_if
: public sc_fifo_nonblocking_in_if<T>,
public sc_fifo_blocking_in_if<T>
{
public:
// get the number of available samples
virtual int num_available() const = 0;
protected:
}
.........................
I am puzzled on why "request_in_port" is a pointer. Could you help me?
Thanks.
BTW, the fifo read() is as below.
.............................
// blocking read
template <class T>
inline
void
sc_fifo<T>::read( T& val_ )
{
while( num_available() == 0 ) {
sc_core::wait( m_data_written_event );
}
m_num_read ++;
buf_read( val_ );
request_update();
}
template <class T>
inline
T
sc_fifo<T>::read()
{
T tmp;
read( tmp );
return tmp;
}
.................................