2017-04-16 11 views
0

sc_fifo를 sc_fifo_out <int> PacketTx;으로 지정하고 Im은 SC_THREAD을 사용하여이 fifo에 20 개의 샘플을 쓰려고합니다. 나는 fifo의 내용을 또 다른 SC_THREAD으로 읽었다. 문제는 인스턴트 메시징에서 아무 것도 읽지 않기 전에 FIFO에 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

01,235 : 여기

단순화 예제 16,
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_fifosc_fifo_out에 적용하는 방법을 잘 모르겠습니다. 내 PacketTx.h 헤더에서 sc_fifo_out<int> PacketTx(20);을 시도했지만 구문 적으로 유효하지 않습니다.

나는 이것을 할 수있다?

답변

1

fifo 채널의 크기를 지정해야합니다. 패킷. 다음을 수행 할 수 있습니다. sc_fifo 패킷 (20);