1 #ifndef SCD_CONT_MAN_MASTER_H
2 #define SCD_CONT_MAN_MASTER_H
6 #include "scd_simulator.h"
7 #include "scd_cont_man.h"
8 #include "scd_cont_slave_wrapper.h"
9 #include "fsm/scd_cont_fsm.h"
11 #include "fsm/scd_stm_init.h"
12 #include "fsm/scd_stm_busy.h"
13 #include "fsm/scd_stm_idle.h"
14 #include "fsm/scd_stm_done.h"
15 #include "fsm/scd_stm_time_req.h"
16 #include "fsm/scd_stm_time.h"
17 #include "fsm/scd_stm_term_req.h"
18 #include "fsm/scd_stm_terminate.h"
19 #include "fsm/scd_stm_terminated.h"
20 #include "fsm/scd_stm_fail.h"
21 #include "fsm/scd_stm_failed.h"
24 * Control manager for the master. Waits for all slaves to connect.
25 * Synchronizes the global simulation state.
27 class scd_cont_man_master : public scd_cont_man, public scd_cont_fsm
29 friend class scd_stm_base;
34 * \param sim the simulation environment
36 scd_cont_man_master(scd_simulator& sim);
38 virtual ~scd_cont_man_master();
41 * Connects a slave. Is called from an in-connector.
42 * \param c the register command that has been received by the in-connector
43 * (contains the slave name).
44 * \param sock the incomming connection
46 void connect_slave(const scd_command& c, scd_socket* sock);
49 void set_master(const std::string& host, uint16_t port);
50 void register_slave(const std::string& name);
53 void set_idle(const sc_core::sc_time& t) { return _state->set_idle(t); }
54 void set_busy() { return _state->set_busy(); }
55 void set_done() { return _state->set_done(); }
56 void set_fail() { return _state->set_fail(); }
58 bool active() const { return _state->active(); }
59 bool busy() const { return _state->busy(); }
60 bool failed() const { return _state->failed(); }
61 bool advance_time() const { return _state->advance_time(); }
62 const sc_core::sc_time& get_time_step() { return _state->get_time_step(); }
66 std::list<scd_cont_slave_wrapper*> _slaves;
67 sc_core::sc_time _time_step;
70 scd_stm_init _st_init;
71 scd_stm_busy _st_busy;
72 scd_stm_idle _st_idle;
73 scd_stm_done _st_done;
74 scd_stm_time_req _st_time_req;
75 scd_stm_time _st_time;
76 scd_stm_term_req _st_term_req;
77 scd_stm_terminate _st_terminate;
78 scd_stm_terminated _st_terminated;
79 scd_stm_fail _st_fail;
80 scd_stm_failed _st_failed;
82 /* member functions */
83 scd_cont_slave_wrapper* _get_slave(const std::string& name);