SystemC-sc_fifo<T
点击数:7581 次 录入时间:03-04 11:42:55 整理:http://www.55dianzi.com 电脑-单片机-自动控制
sc_fifo<T>是SystEMC库中已经实现好的FIFO通道,其中T为FIFO中存储的数据类型。FIFO的中文名字叫做先进先出队列,在软件和硬件设计中都非常常用。图3-6是FIFO的示意图。其中write(&T)代表写FIFO的方法,read()是读FIFO的方法,它返回队头单元的数据。Num_free()用于查询FIFO还有多少空单元,num_available()查询FIFO还有多少个数据可以读。Size代表FIFO的总单元数, 对于sc_fifo,Size的默认值为16。
图3-67 FIFO示意图
使用下面的语句可以例化一个sc_fifo<T>通道:
- sc_fifo<int> fifo1; //一个可以存储整形数据的深度为16的FIFO
- sc_fifo<PACket> fifo2(64);//一个可以存储64个packet类型数据的FIFO
- sc_fifo<T>实现的是接口sc_fifo_in_if<T>和sc_fifo_out_if<T>。sc_fifo_in_if<T>的定义如下:
- // ----------------------------------------------------------------------------
- // CLASS : sc_fifo_in_if<T>
- // The sc_fifo<T> input interface class.
- // ----------------------------------------------------------------------------
- template <class T>
- class sc_fifo_in_if: virtual publIC sc_interface
- {public:
- // bLOCking read
- virtual void read( T& ) = 0;
- virtual T read() = 0;
- // non-blocking read
- virtual bool nb_read( T& ) = 0;
- // get the number of available samples
- virtual int num_available() const = 0;
- // get the data written event
- virtual const sc_event& data_written_event() const = 0;
- protected:
- // constructor
- sc_fifo_in_if() {}
- private:
- // dISAbLED
- sc_fifo_in_if( const sc_fifo_in_if<T>& );
- sc_fifo_in_if<T>& operator = ( const sc_fifo_in_if<T>& );
- };
其中read(T &)和read()是阻塞型读方法,如果读的时候FIFO为空,则它们等到FIFO有数据写入时才返回数据,它们的读操作永远是成功的。nb_read(T&)是非阻塞型读操作,它总是立刻返回。如果FIFO非空,则读FIFO成功,否则读失败。num_available()返回当前还有多少数据单元可以读出。data_written_event()用于返回数据写事件。
sc_fifo_out_if<T>的定义如下:
- // ----------------------------------------------------------------------------
- // CLASS : sc_fifo_out_if<T>
- // The sc_fifo<T> output interface class.
- // ----------------------------------------------------------------------------
- template <class T>
- class sc_fifo_out_if
- : virtual public sc_interface
- {
- public:
- // blocking write
- virtual void write( const T& ) = 0;
- // non-blocking write
- virtual bool nb_write( const T& ) = 0;
- // get the number of free spaces
- virtual int num_free() const = 0;
- // get the data read event
- virtual const sc_event& data_read_event() const = 0;
- protected:
- // constructor
- sc_fifo_out_if(){}
- private:
- // disabled
- sc_fifo_out_if( const sc_fifo_out_if<T>& );
- sc_fifo_out_if<T>& operator = ( const sc_fifo_out_if<T>& );
- };
其中write(T &)和write()是阻塞型写方法,如果写的时候FIFO为满,则它们等到FIFO有空单元时才将数据写入并返回,它们的写操作永远是成功的。nb_write(T&)是非阻塞型写操作,它总是立刻返回。如果FIFO非满,则写FIFO成功,否则写失败。num_free()返回当前还有多少空单元。data_read_event()用于返回数据读事件。
sc_fifo<T>的构造函数有两个,如下:
sc_fifo<T>的构造函数有两个,如下:
- explicit sc_fifo( int size_ = 16 )
- : sc_prim_channel( sc_gen_unique_name( "fifo" ) )
- { init( size_ ); }
-
- explicit sc_fifo( const char* name_, int size_ = 16 )
- : sc_prim_channel( name_ )
- { init( size_ ); }
其中size_定义FIFO的深度,name_定义的是FIFO的通道名,它们都有缺省值。
关于sc_fifo的具体实现感兴趣的读者可以参考SystEMC库中sc_fifo.h
本文关键字:暂无联系方式电脑-单片机-自动控制,电子学习 - 基础知识 - 电脑-单片机-自动控制