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_fifo
및 sc_fifo_out
에 적용하는 방법을 잘 모르겠습니다. 내 PacketTx.h 헤더에서 sc_fifo_out<int> PacketTx(20);
을 시도했지만 구문 적으로 유효하지 않습니다.
나는 이것을 할 수있다?