blob: 2e0810abbbb257f4f4949d1141876411d7ae1a12 [file] [log] [blame]
#include <systemc>
using namespace sc_core;
using namespace sc_dt;
using sc_core::wait;
using std::cout;
using std::endl;
// 5) wait( int ) for SC_THREAD, primitives and global
void global()
{
wait();
sc_assert(sc_time_stamp() == sc_time(0, SC_NS));
wait(3);
sc_assert(sc_time_stamp() == sc_time(3, SC_NS));
}
struct Prim: sc_prim_channel
{
void method()
{
wait();
sc_assert(sc_time_stamp() == sc_time(4, SC_NS));
wait(3);
sc_assert(sc_time_stamp() == sc_time(7, SC_NS));
}
};
SC_MODULE(M)
{
sc_in_clk clk;
Prim prim;
SC_CTOR(M)
{
SC_THREAD(T);
sensitive << clk.pos();
}
void T()
{
global();
prim.method();
wait();
sc_assert(sc_time_stamp() == sc_time(8, SC_NS));
wait(3);
sc_assert(sc_time_stamp() == sc_time(11, SC_NS));
sc_stop();
}
};
struct Top: sc_module
{
M *m;
sc_clock clk;
Top(sc_module_name)
{
m = new M("m");
m->clk.bind(clk);
}
};
int sc_main(int argc, char* argv[])
{
cout << "Should be silent..." << endl;
Top top("top");
sc_start();
cout << endl << "Success" << endl;
return 0;
}