diff options
Diffstat (limited to 'src/mem/ruby/network/garnet/flexible-pipeline/Router.cc')
-rw-r--r-- | src/mem/ruby/network/garnet/flexible-pipeline/Router.cc | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc index 791c0cffc..28e9fc497 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc @@ -72,7 +72,7 @@ Router::addInPort(NetworkLink *in_link) vector<InVcState *> in_vc_vector; for (int i = 0; i < m_num_vcs; i++) { in_vc_vector.push_back(new InVcState(i)); - in_vc_vector[i]->setState(IDLE_, g_eventQueue_ptr->getTime()); + in_vc_vector[i]->setState(IDLE_, g_system_ptr->getTime()); } m_in_vc_state.push_back(in_vc_vector); m_in_link.push_back(in_link); @@ -112,7 +112,7 @@ Router::addOutPort(NetworkLink *out_link, const NetDest& routing_table_entry, vector<OutVcState *> out_vc_vector; for (int i = 0; i < m_num_vcs; i++) { out_vc_vector.push_back(new OutVcState(i)); - out_vc_vector[i]->setState(IDLE_, g_eventQueue_ptr->getTime()); + out_vc_vector[i]->setState(IDLE_, g_system_ptr->getTime()); } m_out_vc_state.push_back(out_vc_vector); m_link_weights.push_back(link_weight); @@ -138,9 +138,9 @@ Router::request_vc(int in_vc, int in_port, NetDest destination, int outport = getRoute(destination); m_in_vc_state[in_port][in_vc]->setRoute(outport); m_in_vc_state[in_port][in_vc]->setState(VC_AB_, request_time); - assert(request_time >= g_eventQueue_ptr->getTime()); - if (request_time > g_eventQueue_ptr->getTime()) - g_eventQueue_ptr->scheduleEventAbsolute(m_vc_arbiter, request_time); + assert(request_time >= g_system_ptr->getTime()); + if (request_time > g_system_ptr->getTime()) + m_vc_arbiter->scheduleEventAbsolute(request_time); else vc_arbitrate(); } @@ -181,22 +181,22 @@ Router::vc_arbitrate() InVcState *in_vc_state = m_in_vc_state[inport][invc]; - if (in_vc_state->isInState(VC_AB_, g_eventQueue_ptr->getTime())) { + if (in_vc_state->isInState(VC_AB_, g_system_ptr->getTime())) { int outport = in_vc_state->get_outport(); vector<int> valid_vcs = get_valid_vcs(invc); for (int valid_vc_iter = 0; valid_vc_iter < valid_vcs.size(); valid_vc_iter++) { if (m_out_vc_state[outport][valid_vcs[valid_vc_iter]] - ->isInState(IDLE_, g_eventQueue_ptr->getTime())) { + ->isInState(IDLE_, g_system_ptr->getTime())) { in_vc_state->grant_vc(valid_vcs[valid_vc_iter], - g_eventQueue_ptr->getTime()); + g_system_ptr->getTime()); m_in_link[inport]->grant_vc_link(invc, - g_eventQueue_ptr->getTime()); + g_system_ptr->getTime()); m_out_vc_state[outport][valid_vcs[valid_vc_iter]] - ->setState(VC_AB_, g_eventQueue_ptr->getTime()); + ->setState(VC_AB_, g_system_ptr->getTime()); break; } } @@ -233,7 +233,7 @@ Router::grant_vc(int out_port, int vc, Time grant_time) { assert(m_out_vc_state[out_port][vc]->isInState(VC_AB_, grant_time)); m_out_vc_state[out_port][vc]->grant_vc(grant_time); - g_eventQueue_ptr->scheduleEvent(this, 1); + scheduleEvent(1); } void @@ -241,7 +241,7 @@ Router::release_vc(int out_port, int vc, Time release_time) { assert(m_out_vc_state[out_port][vc]->isInState(ACTIVE_, release_time)); m_out_vc_state[out_port][vc]->setState(IDLE_, release_time); - g_eventQueue_ptr->scheduleEvent(this, 1); + scheduleEvent(1); } // This function calculated the output port for a particular destination. @@ -271,14 +271,13 @@ Router::routeCompute(flit *m_flit, int inport) assert(m_net_ptr->getNumPipeStages() >= 1); // Subtract 1 as 1 cycle will be consumed in scheduling the output link - m_flit->set_time(g_eventQueue_ptr->getTime() + + m_flit->set_time(g_system_ptr->getTime() + (m_net_ptr->getNumPipeStages() - 1)); m_flit->set_vc(outvc); m_router_buffers[outport][outvc]->insert(m_flit); if (m_net_ptr->getNumPipeStages() > 1) - g_eventQueue_ptr->scheduleEvent(this, - m_net_ptr->getNumPipeStages() - 1 ); + scheduleEvent(m_net_ptr->getNumPipeStages() - 1 ); if ((m_flit->get_type() == HEAD_) || (m_flit->get_type() == HEAD_TAIL_)) { NetworkMessage *nm = safe_cast<NetworkMessage*>(m_flit->get_msg_ptr().get()); @@ -286,24 +285,24 @@ Router::routeCompute(flit *m_flit, int inport) if (m_net_ptr->getNumPipeStages() > 1) { m_out_vc_state[outport][outvc]->setState(VC_AB_, - g_eventQueue_ptr->getTime() + 1); + g_system_ptr->getTime() + 1); m_out_link[outport]->request_vc_link(outvc, destination, - g_eventQueue_ptr->getTime() + 1); + g_system_ptr->getTime() + 1); } else { m_out_vc_state[outport][outvc]->setState(VC_AB_, - g_eventQueue_ptr->getTime()); + g_system_ptr->getTime()); m_out_link[outport]->request_vc_link(outvc, destination, - g_eventQueue_ptr->getTime()); + g_system_ptr->getTime()); } } if ((m_flit->get_type() == TAIL_) || (m_flit->get_type() == HEAD_TAIL_)) { m_in_vc_state[inport][invc]->setState(IDLE_, - g_eventQueue_ptr->getTime() + 1); + g_system_ptr->getTime() + 1); m_in_link[inport]->release_vc_link(invc, - g_eventQueue_ptr->getTime() + 1); + g_system_ptr->getTime() + 1); } } @@ -328,7 +327,7 @@ Router::wakeup() // checking the incoming link if (m_in_link[incoming_port]->isReady()) { DPRINTF(RubyNetwork, "m_id: %d, Time: %lld\n", - m_id, g_eventQueue_ptr->getTime()); + m_id, g_system_ptr->getTime()); t_flit = m_in_link[incoming_port]->peekLink(); routeCompute(t_flit, incoming_port); m_in_link[incoming_port]->consumeLink(); @@ -366,14 +365,14 @@ Router::scheduleOutputLinks() // models buffer backpressure if (m_out_vc_state[port][vc_tolookat]->isInState(ACTIVE_, - g_eventQueue_ptr->getTime()) && + g_system_ptr->getTime()) && m_out_link[port]->isBufferNotFull_link(vc_tolookat)) { flit *t_flit = m_router_buffers[port][vc_tolookat]->getTopFlit(); - t_flit->set_time(g_eventQueue_ptr->getTime() + 1 ); + t_flit->set_time(g_system_ptr->getTime() + 1 ); m_out_src_queue[port]->insert(t_flit); - g_eventQueue_ptr->scheduleEvent(m_out_link[port], 1); + m_out_link[port]->scheduleEvent(1); break; // done for this port } } @@ -395,7 +394,7 @@ Router::checkReschedule() for (int port = 0; port < m_out_link.size(); port++) { for (int vc = 0; vc < m_num_vcs; vc++) { if (m_router_buffers[port][vc]->isReadyForNext()) { - g_eventQueue_ptr->scheduleEvent(this, 1); + scheduleEvent(1); return; } } @@ -408,9 +407,9 @@ Router::check_arbiter_reschedule() for (int port = 0; port < m_in_link.size(); port++) { for (int vc = 0; vc < m_num_vcs; vc++) { if (m_in_vc_state[port][vc]->isInState(VC_AB_, - g_eventQueue_ptr->getTime() + 1)) { + g_system_ptr->getTime() + 1)) { - g_eventQueue_ptr->scheduleEvent(m_vc_arbiter, 1); + m_vc_arbiter->scheduleEvent(1); return; } } |