增加sc_fifo_out大小

时间:2017-04-16 22:14:48

标签: size fifo systemc

我将sc_fifo声明为sc_fifo_out <int> PacketTx;并且我尝试使用SC_THREAD向此fifo写入20个样本。我在另一个SC_THREAD中阅读了fifo的内容。我遇到的问题是,在我从fifo中读取任何内容之前,我需要在fifo中写入20个值,因此我使用sc_signal来维护此属性。

这是一个简化的例子:

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只允许我向fifo写入16个值,但是对于我的应用程序,我想将它增加到20,或者可能更多。我试图环顾四周,但没有找到关于如何更改除Accellera上的论坛帖子之外的fifo大小的任何内容,但这仅适用于sc_fifo,我不知道如何将其调整为{{ 1}}。我试图在我的PacketTx.h头文件中做sc_fifo_out,但它在语法上没有用。

我能做到这一点吗?

1 个答案:

答案 0 :(得分:1)

您需要指定fifo频道的大小,即Packet。您可以执行以下操作:

sc_fifo<int> Packet(20);