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ヘッダに書こうとしましたが、構文的には有効ではありませんでした。
どうにかできますか?