1 #include "fsm/scd_stm_idle.h"
3 #include "scd_logging.h"
4 #include "scd_exception.h"
5 #include "scd_cont_man_master.h"
8 void scd_stm_idle::set_busy()
10 _fsm.set_state(_st_busy);
14 void scd_stm_idle::set_done()
16 _time_step = sc_core::SC_ZERO_TIME;
17 _fsm.set_state(_st_done);
21 void scd_stm_idle::process()
26 std::list<scd_cont_slave_wrapper*>::iterator iter;
28 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
30 if (!(*iter)->idle() && !(*iter)->done())
32 // this slave is not ready yet
37 /* all slaves seem idle or done. wait a short moment, to prevent
38 * race conditions (channel data in transit but both endpoints done).
39 * if no socket activity occured we can move on, else we cancel.
41 if (_sim.get_poller().wait(SCD_CONT_DELAY))
44 // all slaves seem to be ready to advance time
45 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
46 (*iter)->send_time_req();
49 _fsm.set_state(_st_time_req);