1 #include "fsm/scd_stm_time_req.h"
3 #include "scd_logging.h"
4 #include "scd_exception.h"
5 #include "scd_cont_man_master.h"
8 void scd_stm_time_req::set_busy()
15 void scd_stm_time_req::process()
20 std::list<scd_cont_slave_wrapper*>::iterator iter;
21 sc_core::sc_time min_step = _time_step;
23 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
25 if ( !(*iter)->time_req() && !(*iter)->time_ack() )
27 // received time_nack from this slave
32 else if ( !(*iter)->time_ack() )
34 // this slave did not respond yet
39 // received time_ack => search the smallest step
40 sc_core::sc_time time_slave = (*iter)->get_time_step();
41 if (min_step == sc_core::SC_ZERO_TIME)
42 min_step = time_slave;
43 else if (min_step > time_slave &&
44 time_slave != sc_core::SC_ZERO_TIME)
45 min_step = time_slave;
49 // all slaves acknkowledged
50 _time_step = min_step;
51 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
52 (*iter)->send_time(min_step);
54 _fsm.set_state(_st_time);
58 void scd_stm_time_req::_send_time_nack()
60 std::list<scd_cont_slave_wrapper*>::iterator iter;
62 for (iter = _slaves.begin(); iter != _slaves.end(); iter++)
63 (*iter)->send_time_nack();