2017-04-16 3 views
0

Ich deklariere ein sc_fifo als sc_fifo_out <int> PacketTx; und ich versuche 20 Proben zu diesem FIFO mit einem SC_THREAD zu schreiben. Ich lese den Inhalt des FIFO in einem anderen SC_THREAD. Das Problem ist, dass ich 20 Werte in den FIFO schreiben muss, bevor ich etwas vom Fifo lese, also verwende ich einen sc_signal, um diese Eigenschaft zu behalten.Increase sc_fifo_out size

Hier ist ein vereinfachtes Beispiel:

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; 
} 

Das Problem i in laufen ist, dass sc_fifo_out nur mir 16 Werte in die Fifo schreiben können, aber für meine Anwendung möchte ich es auf 20 zu erhöhen, oder möglicherweise mehr . Ich habe versucht, mich umzusehen, aber habe nichts gefunden, wie man die Fifo-Größe anders als einen Forenbeitrag auf Accellera ändert, aber das war nur für sc_fifo und ich bin nicht sicher, wie man das an sc_fifo_out anpasst. Ich habe versucht, sc_fifo_out<int> PacketTx(20); in meinem Header PacketTx.h tun, aber es war nicht syntaktisch gültig.

Irgendwie kann ich das tun?

Antwort

1

Sie müssen die Größe des FIFO-Kanals angeben, z. Paket. Sie können Folgendes tun: sc_fifo Packet (20);