Show abstractCom.cpp syntax highlighted
#include "communication_channel.h"
class sc_write_if {};
class sc_read_if {};
class sc_newfifo{};
/******************************************PRODUCER-CLASSES*******************************************/
class sc_producer_0 : public sc_module
{
public:
sc_port<sc_write_if<int> > out_1;
SC_HAS_PROCESS(sc_producer_0);
sc_producer_0(sc_module_name name) : sc_module(name)
{
SC_THREAD(main);
}
void main() {
const int n = 15;
int message;
for (message = 0; message < n; message++) {
if (message == 0) {
out_1.reset();
}
out_1.write(message);
}
}
};
class sc_producer_1 : public sc_module
{
public:
sc_port<sc_write_if<sc_lv<20> > > out_1;
sc_port<sc_write_if<sc_lv<20> > > out_2;
SC_HAS_PROCESS(sc_producer_1);
sc_producer_1(sc_module_name name) : sc_module(name)
{
SC_THREAD(main);
}
void main() {
int i;
const int n = 15;
sc_lv<20> message_1 = "ZZZZZZZZZZZZZZZZZZZZ";
sc_lv<20> message_2 = "ZZZZZZZZZZZZZZZZZZZZ";
for (i = 0; i < n; i++) {
if (i == 0) {
out_1.reset();
out_2.reset();
}
out_1.write(message_1);
out_2.write(message_2);
}
}
};
class sc_producer_2 : public sc_module
{
public:
sc_port<sc_write_if<sc_bv<20> > > out_1;
SC_HAS_PROCESS(sc_producer_2);
sc_producer_2(sc_module_name name) : sc_module(name)
{
SC_THREAD(main);
}
void main() {
int i;
const int n = 15;
sc_bv<20> message_1 = "00000000000000001000";
for (i = 0; i < n; i++) {
if (i == 0) {
out_1.reset();
}
out_1.write(message_1);
message_1 = (sc_uint<20>)message_1 - i;
}
}
};
/******************************************CONSUMER-CLASSES*******************************************/
class sc_consumer_0 : public sc_module
{
public:
sc_port<sc_read_if<int> > in_1;
sc_port<sc_read_if<sc_lv<20> > > in_2;
sc_port<sc_read_if<sc_bv<20> > > in_3;
SC_HAS_PROCESS(sc_consumer_0);
sc_consumer_0(sc_module_name name) : sc_module(name)
{
SC_THREAD(main);
}
void main() {
int message_producer_0;
sc_lv<20> message_producer_1;
sc_bv<20> message_producer_2;
while (true) {
in_1.read(message_producer_0);
in_2.read(message_producer_1);
in_3.read(message_producer_2);
cout << endl << endl;
cout << "Consumer0 M1: " << message_producer_0 << endl;
cout << "Consumer0 M2: " << message_producer_1 << endl;
cout << "Consumer0 M3: " << message_producer_2 << endl;
}
}
};
class sc_consumer_1 : public sc_module
{
public:
sc_port<sc_read_if<sc_lv<20> > > in_1;
sc_port<sc_write_if<sc_lv<20> > > out_1;
SC_HAS_PROCESS(sc_consumer_1);
sc_consumer_1(sc_module_name name) : sc_module(name)
{
SC_THREAD(main);
}
void main() {
sc_lv<20> message_producer_1;
bool reset_indicator = false;
while (true) {
while (!reset_indicator) {
out_1.reset();
reset_indicator = true;
}
in_1.read(message_producer_1);
out_1.write(message_producer_1);
cout << endl << endl;
cout << "Consumer1: " << message_producer_1 << endl;
}
}
};
class sc_consumer_2 : public sc_module
{
public:
sc_port<sc_read_if<sc_lv<20> > > in_1;
SC_HAS_PROCESS(sc_consumer_2);
sc_consumer_2(sc_module_name name) : sc_module(name)
{
SC_THREAD(main);
}
void main() {
sc_lv<20> message_consumer_1;
while (true) {
in_1.read(message_consumer_1);
cout << endl << endl;
cout << "Consumer2: " << message_consumer_1 << endl;
}
}
};
/******************************************SC_MAIN*******************************************/
int sc_main(int argc , char *argv[]) {
sc_clock Clock("Clock", 2, SC_NS);
sc_newfifo<int> NewFifo0("NewFifo0");
sc_newfifo<sc_lv<20> > NewFifo1("NewFifo1");
sc_newfifo<sc_lv<20> > NewFifo2("NewFifo2");
sc_newfifo<sc_bv<20> > NewFifo3("NewFifo3");
sc_newfifo<sc_lv<20> > NewFifo4("NewFifo4");
sc_producer_0 Producer0("Producer0");
Producer0.out_1(NewFifo0);
sc_producer_1 Producer1("Producer1");
Producer1.out_1(NewFifo1);
Producer1.out_2(NewFifo2);
sc_producer_2 Producer2("Producer2");
Producer2.out_1(NewFifo3);
sc_consumer_0 Consumer0("Consumer0");
Consumer0.in_1(NewFifo0);
Consumer0.in_2(NewFifo1);
Consumer0.in_3(NewFifo3);
sc_consumer_1 Consumer1("Consumer1");
Consumer1.in_1(NewFifo2);
Consumer1.out_1(NewFifo4);
sc_consumer_2 Consumer2("Consumer2");
Consumer2.in_1(NewFifo4);
sc_start(2500);
return 0;
}
See more files for this project here