2017-04-16 27 views
0

sc_fifoをsc_fifo_out <int> PacketTx;と宣言し、ImがSC_THREADを使用して20個のサンプルをこのFIFOに書き込もうとしています。私はfifoの内容を別のSC_THREADで読んだ。私がfifoから何かを読む前に、fiftyに20の値を書き込む必要があるので、このプロパティを維持するために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は私だけしかし私のアプリケーションのために、私は20に増やしたい、FIFOに16の値を書き込む、または潜在的に多くのことができますということです。私は周りを見回そうとしましたが、Accelleraのフォーラム投稿以外でFIFOのサイズを変更する方法は何も見つかりませんでしたが、これはsc_fifoとなりました。これをsc_fifo_outにどう対応させるかはわかりません。私はsc_fifo_out<int> PacketTx(20);を私のPacketTx.hヘッダに書こうとしましたが、構文的には有効ではありませんでした。

どうにかできますか?

答えて

1

FIFOチャネルのサイズを指定する必要があります。パケット。次の操作を実行できます。 sc_fifoパケット(20);

関連する問題