#include "systemc.h" // Interface class C_if : virtual public sc_interface { public: virtual void run() = 0; }; // Channel class C : public C_if, public sc_channel { public: SC_CTOR(C) { } virtual void run() { cout << sc_time_stamp() << " In Channel run() " << endl; } }; // --- D: export channel C through IFP -------- SC_MODULE( D ) { sc_export IFP; SC_CTOR( D ) : IFP("IFP"), // explicit name m_C("C") { IFP( m_C ); // bind sc_export->interface by name } private: C m_C; // channel }; // --- E: module with two interface-ports --- SC_MODULE( E ) { private: C m_C; D m_D; public: sc_export IFP1; sc_export IFP2; SC_CTOR( E ) : m_C("C"), m_D("D"), IFP1("IFP1") { IFP1( m_C ); IFP2( m_D.IFP ); // bind sc_export->sc_export by name IFP1.get_interface(); // just to see whether it compiles } }; // Module X connected to the channels through E SC_MODULE( X ) { sc_port P1; sc_port P2; SC_CTOR(X) { SC_THREAD(run); } void run() { wait(10, SC_NS); P1->run(); wait(10, SC_NS); P2->run(); } }; int sc_main(int argc, char** argv) { E the_E("E"); X the_X("X"); // port->IFP the_X.P1( the_E.IFP1 ); the_X.P2( the_E.IFP2 ); sc_start(17, SC_NS); the_E.IFP1->run(); // testing the operator-> of sc_export sc_start(50, SC_NS); return 0; }