-
Notifications
You must be signed in to change notification settings - Fork 3
/
Problem #1(Style 1).cpp
65 lines (53 loc) · 1.37 KB
/
Problem #1(Style 1).cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <systemc.h>
class producer : public sc_module {
public:
sc_port<sc_fifo_out_if<sc_uint<4> > > sender;
int value;
SC_HAS_PROCESS(producer);
producer(sc_module_name name) : sc_module(name), value(1){
SC_THREAD(produce);
}
void produce(){
while(value<10){
sender->write(value);
cout<<"Writing: "<<value++<<endl;
wait(5,SC_NS);
}
}
};
class consumer : public sc_module {
public:
sc_port<sc_fifo_in_if<sc_uint<4> > > receiver;
SC_HAS_PROCESS(consumer);
consumer(sc_module_name name) : sc_module(name){
SC_THREAD(consume);
}
void consume(){
int l;
while(l<10){
l=receiver->read();
std::cout<<"Consumer Reads: "<<l<<endl;
wait(10,SC_NS);
}
}
};
class top : public sc_module
{
public:
sc_fifo <sc_uint<4> > *fifo_inst;
producer *prod_inst;
consumer *cons_inst;
top(sc_module_name name) : sc_module(name)
{
fifo_inst = new sc_fifo<sc_uint<4> >(10);
prod_inst = new producer("Producer1");
prod_inst->sender(*fifo_inst);
cons_inst = new consumer("Consumer1");
cons_inst->receiver(*fifo_inst);
}
};
int sc_main (int argc , char *argv[]) {
top top1("Top1");
sc_start();
return 0;
}