您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制SystemC-sc_fifo<T 正文
SystemC-sc_fifo<T

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>通道:

  1. sc_fifo<int>      fifo1;      //一个可以存储整形数据的深度为16的FIFO  
  2. sc_fifo<PACket>   fifo2(64);//一个可以存储64个packet类型数据的FIFO  
  3. sc_fifo<T>实现的是接口sc_fifo_in_if<T>和sc_fifo_out_if<T>。sc_fifo_in_if<T>的定义如下:  
  4. // ----------------------------------------------------------------------------  
  5. //  CLASS : sc_fifo_in_if<T>  
  6. //  The sc_fifo<T> input interface class.  
  7. // ----------------------------------------------------------------------------  
  8. template <class T>  
  9. class sc_fifo_in_if: virtual publIC sc_interface  
  10. {public:  
  11.     // bLOCking read  
  12.     virtual void read( T& ) = 0;  
  13.     virtual T read() = 0;  
  14.     // non-blocking read  
  15.     virtual bool nb_read( T& ) = 0;  
  16.     // get the number of available samples  
  17.     virtual int num_available() const = 0;  
  18.     // get the data written event  
  19. virtual const sc_event& data_written_event() const = 0;  
  20. protected:  
  21.     // constructor  
  22.    sc_fifo_in_if()    {}  
  23. private:  
  24.     // dISAbLED  
  25.     sc_fifo_in_if( const sc_fifo_in_if<T>& );  
  26.     sc_fifo_in_if<T>& operator = ( const sc_fifo_in_if<T>& );  
  27. }; 


      其中read(T &)和read()是阻塞型读方法,如果读的时候FIFO为空,则它们等到FIFO有数据写入时才返回数据,它们的读操作永远是成功的。nb_read(T&)是非阻塞型读操作,它总是立刻返回。如果FIFO非空,则读FIFO成功,否则读失败。num_available()返回当前还有多少数据单元可以读出。data_written_event()用于返回数据写事件。

      sc_fifo_out_if<T>的定义如下:

  1. // ----------------------------------------------------------------------------  
  2. //  CLASS : sc_fifo_out_if<T>  
  3. //  The sc_fifo<T> output interface class.  
  4. // ----------------------------------------------------------------------------  
  5. template <class T>  
  6. class sc_fifo_out_if  
  7. : virtual public sc_interface  
  8. {  
  9. public:  
  10.    // blocking write  
  11.    virtual void write( const T& ) = 0;  
  12.     // non-blocking write  
  13.    virtual bool nb_write( const T& ) = 0;  
  14.    // get the number of free spaces  
  15.    virtual int num_free() const = 0;  
  16.    // get the data read event  
  17.     virtual const sc_event& data_read_event() const = 0;  
  18. protected:  
  19.     // constructor  
  20.    sc_fifo_out_if(){}  
  21. private:  
  22.     // disabled  
  23.    sc_fifo_out_if( const sc_fifo_out_if<T>& );  
  24.     sc_fifo_out_if<T>& operator = ( const sc_fifo_out_if<T>& );  
  25. }; 

      其中write(T &)和write()是阻塞型写方法,如果写的时候FIFO为满,则它们等到FIFO有空单元时才将数据写入并返回,它们的写操作永远是成功的。nb_write(T&)是非阻塞型写操作,它总是立刻返回。如果FIFO非满,则写FIFO成功,否则写失败。num_free()返回当前还有多少空单元。data_read_event()用于返回数据读事件。

      sc_fifo<T>的构造函数有两个,如下:

      sc_fifo<T>的构造函数有两个,如下:

  1. explicit sc_fifo( int size_ = 16 )  
  2.     : sc_prim_channel( sc_gen_unique_name( "fifo" ) )  
  3.    { init( size_ ); }  
  4.  
  5.    explicit sc_fifo( const char* name_, int size_ = 16 )  
  6.     : sc_prim_channel( name_ )  
  7.     { init( size_ ); } 


      其中size_定义FIFO的深度,name_定义的是FIFO的通道名,它们都有缺省值。

      关于sc_fifo的具体实现感兴趣的读者可以参考SystEMC库中sc_fifo.h




本文关键字:暂无联系方式电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制

上一篇:SystemC-sc_semaphore