1 #include "fsm/scd_stm_base.h"
3 #include "scd_logging.h"
4 #include "scd_exception.h"
5 #include "scd_cont_man_master.h"
6 #include "scd_command.h"
7 #include "scd_cont_man.h"
10 scd_stm_base::scd_stm_base(scd_simulator& sim, scd_cont_man_master& fsm):
11 scd_cont_state(sim), _fsm(fsm), _slaves(fsm._slaves),
12 _time_step(fsm._time_step),
13 _st_init(fsm._st_init), _st_busy(fsm._st_busy), _st_idle(fsm._st_idle),
14 _st_done(fsm._st_done), _st_time_req(fsm._st_time_req),
15 _st_time(fsm._st_time), _st_term_req(fsm._st_term_req),
16 _st_terminate(fsm._st_terminate), _st_terminated(fsm._st_terminated),
17 _st_fail(fsm._st_fail), _st_failed(fsm._st_failed)
22 void scd_stm_base::set_fail()
24 std::list<scd_cont_slave_wrapper*>::iterator it;
26 for (it = _slaves.begin(); it != _slaves.end(); it++)
31 _fsm.set_state(_st_fail);
35 void scd_stm_base::process()
37 // check for failed slaves and react
43 bool scd_stm_base::active() const { return true; }
46 bool scd_stm_base::busy() const { return false; }
49 bool scd_stm_base::failed() const { return false; }
52 bool scd_stm_base::advance_time() const { return false; }
55 const sc_core::sc_time& scd_stm_base::get_time_step()
57 scd_error("illegal call to get_time_step()");
58 throw scd_exception("illegal call");
62 bool scd_stm_base::_check_slaves()
65 std::list<scd_cont_slave_wrapper*>::iterator iter;
67 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
69 if ( (*iter)->failed() )
71 scd_error("slave \"" + (*iter)->get_name() + "\" failed");
82 bool scd_stm_base::_some_slaves_active()
84 std::list<scd_cont_slave_wrapper*>::iterator iter;
86 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
88 if ( (*iter)->active() )
94 } // _some_slaves_active()
97 void scd_stm_base::_close_slaves()
99 std::list<scd_cont_slave_wrapper*>::iterator iter;
101 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)