增加sc_fifo_out大小

增加sc_fifo_out大小

问题描述:

Im声明sc_fifo为sc_fifo_out <int> PacketTx;并且Im试图使用SC_THREAD将20个样本写入此fifo。我在另一个SC_THREAD阅读了fifo的内容。我的问题是我需要在FIFO中写入20个值,然后我才从FIFO中读取任何内容,所以我使用sc_signal来维护这个属性。增加sc_fifo_out大小

下面是一个简化的例子:

Transmit.h

SC_MODULE(Transmit){ 
    sc_fifo_out<int> PacketTx; 
    sc_inout<bool> busy; 

    void Tx(); 
    SC_CTOR(Transmit){ 
     SC_THREAD(Tx){} 
    } 
}; 

Transmit.cpp

void Transmit::Tx(){ 
    int i=0; 
    while(1){ 
     if(busy == 0){ 
     while(i!=20){ 
      busy = 1; //Flag that specifies fifo is being used 
      PacketTx.write(rand()%1+10)); //Random number between 1-10; 
      i++; 
     } 
     busy = 0; //Done writing to fifo. Deassert flag 
     i = 0; //Reset counter 
     } 
     else{ 
     wait(rand()%1+10, SC_NS); 
     } 
    } 
} 

Receive.h

SC_MODULE(Receive){ 
    sc_fifo_in<int> PacketRx; 
    sc_inout<bool> busy; 

    void Rx(); 
    SC_CTOR(Receive){ 
     SC_THREAD(Rx){} 
    } 
}; 

Receive.cpp

void Receive::Rx(){ 
    int i=0; 
    while(1){ 
     if(busy == 0){ //Check if fifo is being used 
     while(i!=20){ 
      busy = 1; 
      PacketRx.read(); //Read 20 samples from fifo 
      i++; 
     } 
     busy = 0; //Done reading; Deassert flag 
     i = 0; //Reset counter 
     } 
     else{ 
     wait(rand()%1+10, SC_NS); //Wait random NS duration and try again 
     } 
    } 
} 

Main.cpp的

#include "Receive.h" 
#include "Transmit.h" 

int _tmain(int argc, _TCHAR* arg[]){ 

    //Signal/Port declarations 
    sc_fifo<int> Packet; 
    sc_signal<bool> busy; 

    //Module Instantiation 
    Receive r1("Receive"); 
    r1.busy(busy); 
    r1.PacketRx(Packet); 

    Transmit t1("Transmit); 
    t1.busy(busy); 
    t1.PacketTx(Packet); 

    sc_start(); 

    return 0; 
} 

我遇到的问题是,sc_fifo_out只让我写16个值的FIFO,但是我的应用我想将其提高到20,或者可能更。我试图环顾四周,但没有发现任何关于如何更改fifo的大小,而不是在Accellera上的论坛帖子,但这只是为sc_fifo,我不知道如何适应sc_fifo_out。我试图在我的PacketTx.h头文件中执行sc_fifo_out<int> PacketTx(20);,但它在语法上不合法。

我能做到这一点吗?

您需要指定fifo通道的大小即I.e.包。您可以执行以下操作: sc_fifo数据包(20);