9 #ifndef scGPMessagefifo_h
10 #define scGPMessagefifo_h
16 using namespace sc_core;
17 using namespace sc_dt;
20 class scGPMessagefifowrite_if :
virtual public sc_interface
24 virtual void reset() = 0;
27 class scGPMessagefiforead_if :
virtual public sc_interface
31 virtual int num_available() = 0;
43 class scGPMessagefifo :
public sc_channel,
public scGPMessagefifowrite_if,
public scGPMessagefiforead_if
48 scGPMessagefifo(sc_module_name name) : sc_channel(name), num_elements(0), first(0) {}
51 if (num_elements == max)
52 wait(scGPMessagefifo_read_event);
54 data[(first + num_elements) % max] = c;
56 scGPMessagefifo_write_event.notify();
60 if (num_elements == 0)
61 wait(scGPMessagefifo_write_event);
65 first = (first + 1) % max;
66 scGPMessagefifo_read_event.notify();
69 void reset() { num_elements = first = 0; }
71 int num_available() {
return num_elements;}
76 uint16_t num_elements, first;
77 sc_event scGPMessagefifo_write_event, scGPMessagefifo_read_event;
80 #endif //scGPMessagefifo_h