Code Search for Developers
 
 
  

abstractCom.cpp from GreenSocs at Krugle


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

GreenSocs

To develop SystemC infrustructure, basic IP, patches and add on library code for eventual standerdization.\r\nThe GreenSocs project is made up of a number of contributions (sub projects). Please visit www.greensocs.com for more information.

Project homepage: http://sourceforge.net/projects/greensocs
Programming language(s): C,C++,Java,Perl,XML
License: other

  .settings/
    org.eclipse.cdt.core.prefs
  .project
  TestCom.cpp
  TestCom.cpp.out
  TestCom.cpp.out.ast.xml
  TestCom.cpp.out.xml
  abstractCom.cpp
  ggt-kgv.cpp
  structure1_systemc.cpp
  structure2_systemc.cpp
  structure3_systemc.cpp
  structure4_systemc.cpp
  structure5_systemc.cpp
  structure6_systemc.cpp