blob: a98f7c46a82099eb91d122c18bfcbe56f285a9a6 [file] [log] [blame]
#include "systemc.h"
SC_MODULE(READ_LEAF)
{
SC_CTOR(READ_LEAF)
{
SC_METHOD(delta);
sensitive << in;
}
void delta()
{
cout << "READ_LEAF: change " << (int)in.read() << endl;
}
sc_in<sc_uint<8> > in;
};
SC_MODULE(WRITE_LEAF)
{
SC_CTOR(WRITE_LEAF)
{
SC_METHOD(sync)
sensitive << clk.pos();
}
void sync()
{
out = out.read() + 1;
}
sc_signal<sc_uint<8> > out;
sc_in_clk clk;
};
SC_MODULE(MIDDLE)
{
SC_CTOR(MIDDLE) : reader("reader"), writer("writer")
{
writer.clk(clk); // Bind clk going down the module hierarchy.
reader.in(my_port); // Bind my_port going down the module hierarchy.
my_port(writer.out); // Bind my_port coming up the module hierarchy.
}
sc_in_clk clk;
sc_in<sc_uint<8> > my_port;
READ_LEAF reader;
WRITE_LEAF writer;
};
SC_MODULE(TOP)
{
SC_CTOR(TOP) : down("down")
{
down.clk(clk); // Bind clk going down the module hierarchy.
in(down.my_port); // Bind in coming up the module hierarchy.
SC_METHOD(delta);
sensitive << in;
}
void delta()
{
cout << "TOP: change " << (int)in.read() << endl;
}
sc_in_clk clk;
sc_in<sc_uint<8> > in;
MIDDLE down;
};
int sc_main(int argc, char* arg[])
{
sc_clock clock;
TOP top("top");
top.clk(clock);
sc_start(10, SC_NS);
return 0;
}