quick.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

   

space.gif

   

space.gif

  ../images/main/bulllet_4dots_orange.gif sc_fifo

sc_fifo is a predefined primitive channel intended to model the behavior of a fifo, that is, a first-in first-out buffer. A fifo is an object of class sc_fifo. Each fifo has a number of slots for storing values. The number of slots is fixed when the object is constructed. Default slots size is 16.

   

space.gif

sc_fifo has following predefined methods.

   

space.gif

  • write() : This method write the values passed as an argument into the fifo. If fifo if full then write() function waits till fifo slot is available
  • nb_write() : This method is same as write(), only difference is, when fifo is full nb_write() does not wait till fifo slot is avaible. Rather it returns false.
  • read() : This method returns the least recent written data in fifo. If fifo is empty, then read() function waits till data is available in fifo.
  • nb_read() :This method is same as read(), only difference is, when fifo is empty, nb_read() does not wait till fifo has some data. Rather it returns false.
  • num_available() : This method returns the numbers of data values available in fifo in current delta time.
  • num_free() : This method returns the number of free slots available in fifo in current delta time.
   

space.gif

   

space.gif

  ../images/main/bullet_star_pink.gif Example : sc_fifo
   

space.gif


  1 #include <systemc.h>
  2 
  3 SC_MODULE(example_fifo) {
  4   void example_fifo::m_drain_packets(void);
  5   void example_fifo::t_source1(void);
  6   void example_fifo::t_source2(void);
  7   // Constructor
  8   SC_CTOR(example_fifo) {
  9     SC_METHOD(m_drain_packets);
 10     SC_THREAD(t_source1);
 11     SC_THREAD(t_source2);
 12     // Size the packet_fifo to 5 ints.
 13     sc_fifo<int> packet_fifo (5);
 14   }
 15   
 16   // Declare the FIFO
 17   sc_fifo<int> packet_fifo;
 18 };
 19 
 20 void example_fifo::m_drain_packets(void) {
 21   int val;
 22   if (packet_fifo.nb_read(val)) {
 23     std::cout << sc_time_stamp() << ": m_drain_packets(): Received " << val <<
 24       std::endl;
 25   } else {
 26     std::cout << sc_time_stamp() << ": m_drain_packets(): FIFO empty." << std::endl;
 27   }
 28   // Check back in 2ns
 29   next_trigger(2, SC_NS);
 30 }
 31 
 32 void example_fifo::t_source1(void) {
 33   int val = 1000;
 34   for (;;) {
 35     wait(3, SC_NS);
 36     val++;
 37     packet_fifo.write(val);
 38     std::cout << sc_time_stamp() << ": t_thread1(): Wrote " << val << std::endl;
 39   }
 40 }
 41 
 42 void example_fifo::t_source2(void) {
 43   int val = 2000;
 44   for (;;) {
 45     wait(5, SC_NS);
 46     val++;
 47     packet_fifo.write(val);
 48     std::cout << sc_time_stamp() << ": t_thread2(): Wrote " << val << std::endl;
 49   }
 50 }
 51 
 52 int sc_main(int argc, char* argv[]) {
 53   example_fifo ex_fifo ("ex_fifo0");
 54   sc_start(30, SC_NS);
 55   return 0;
 56 }
You could download file sc_fifo.cpp here
   

space.gif

  ../images/main/bullet_star_pink.gif Simulation Output : sc_fifo
   

space.gif

 0 s: m_drain_packets(): FIFO empty.
 2 ns: m_drain_packets(): FIFO empty.
 3 ns: t_thread1(): Wrote 1001
 4 ns: m_drain_packets(): Received 1001
 5 ns: t_thread2(): Wrote 2001
 6 ns: m_drain_packets(): Received 2001
 6 ns: t_thread1(): Wrote 1002
 8 ns: m_drain_packets(): Received 1002
 9 ns: t_thread1(): Wrote 1003
 10 ns: m_drain_packets(): Received 1003
 10 ns: t_thread2(): Wrote 2002
 12 ns: m_drain_packets(): Received 2002
 12 ns: t_thread1(): Wrote 1004
 14 ns: m_drain_packets(): Received 1004
 15 ns: t_thread1(): Wrote 1005
 15 ns: t_thread2(): Wrote 2003
 16 ns: m_drain_packets(): Received 1005
 18 ns: m_drain_packets(): Received 2003
 18 ns: t_thread1(): Wrote 1006
 20 ns: m_drain_packets(): Received 1006
 20 ns: t_thread2(): Wrote 2004
 21 ns: t_thread1(): Wrote 1007
 22 ns: m_drain_packets(): Received 2004
 24 ns: m_drain_packets(): Received 1007
 24 ns: t_thread1(): Wrote 1008
 25 ns: t_thread2(): Wrote 2005
 26 ns: m_drain_packets(): Received 1008
 27 ns: t_thread1(): Wrote 1009
 28 ns: m_drain_packets(): Received 2005
   

space.gif

   

space.gif

   

space.gif

   

space.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

  

Copyright © 1998-2014

Deepak Kumar Tala - All rights reserved

Do you have any Comment? mail me at:deepak@asic-world.com