Hello,
I have issues understanding sc_simcontext::next_time. The easiest way to describe what does not make sense for me is to give an example:
#include <systemc>
using namespace sc_core;
SC_MODULE(A)
{
sc_out<bool> out;
SC_CTOR(A)
{
SC_THREAD(t);
}
void t()
{
bool c = false;
while (1) {
wait(sc_time(1, SC_NS));
c = !c;
out.write(c);
}
}
};
SC_MODULE(B)
{
sc_in<bool> in;
SC_CTOR(B)
{
SC_THREAD(t)
}
void t()
{
while (1) {
wait(in.value_changed_event());
std::cout << "got: " << in.read() << std::endl;
}
}
};
int sc_main(int argc, char** argv)
{
A a("a");
B b("b");
sc_signal<bool> s;
a.out.bind(s);
b.in.bind(s);
while (1) {
sc_time t;
std::cout << sc_get_curr_simcontext()->next_time(t) << ": " << t << std::endl;
sc_start(sc_time(1, SC_NS));
sleep(1);
}
}
In this example, I would expect, that the output within the while loop of sc_main always prints 1 and the time until the next event happens (which should be 1 ns). However, when I run this program I get the following output:
0: 0 s
0: 0 s
got: 1
0: 0 s
got: 0
0: 0 s
got: 1
0: 0 s
got: 0
0: 0 s
got: 1
0: 0 s
got: 0
^C
Why do I always get "false" as the result for next_time? Did I misunderstand the what next_time does? Currently I'm using SystemC 2.3.1a.
Thank you for your answers in advance!