36 #include "debug/RubyNetwork.hh"
119 for (
int invc_iter = 0; invc_iter <
m_num_vcs; invc_iter++) {
149 if (invc >= m_num_vcs)
196 DPRINTF(RubyNetwork,
"SwitchAllocator at Router %d "
197 "granted outvc %d at outport %d "
198 "to invc %d at inport %d to flit %s at "
263 if (inport >= m_num_inports)
291 bool has_outvc = (outvc != -1);
292 bool has_credit =
false;
312 if (!has_outvc || !has_credit)
325 for (
int vc_offset = 0; vc_offset <
m_vc_per_vnet; vc_offset++) {
326 int temp_vc = vc_base + vc_offset;
329 (
m_input_unit[inport]->get_outport(temp_vc) == outport) &&
374 assert(vnet < m_router->get_num_vnets());
void set_outport(int port)
double m_input_arbiter_activity
Cycles is a wrapper class for representing cycle counts, i.e.
std::vector< std::vector< bool > > m_port_requests
void arbitrate_outports()
void grant_switch(int inport, flit *t_flit)
std::vector< std::vector< int > > m_vc_winners
std::string getPortDirectionName(PortDirection direction)
Cycles curCycle() const
Determine the current cycle, corresponding to a tick aligned to a clock edge.
void schedule_wakeup(Cycles time)
GarnetNetwork * get_net_ptr()
void clear_request_vector()
double m_output_arbiter_activity
bool send_allowed(int inport, int invc, int outport, int outvc)
std::vector< InputUnit * > m_input_unit
int vc_allocate(int outport, int inport, int invc)
SwitchAllocator(Router *router)
std::vector< int > m_round_robin_inport
void advance_stage(flit_stage t_stage, Cycles newTime)
std::vector< InputUnit * > & get_inputUnit_ref()
std::vector< OutputUnit * > m_output_unit
std::vector< OutputUnit * > & get_outputUnit_ref()
std::vector< int > m_round_robin_invc