diff options
Diffstat (limited to 'src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc')
-rw-r--r-- | src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc | 127 |
1 files changed, 73 insertions, 54 deletions
diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc index 2947ce8ec..24b93c975 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc @@ -33,109 +33,128 @@ NetworkLink::NetworkLink(int id, int latency, GarnetNetwork *net_ptr) { - m_id = id; - linkBuffer = new flitBuffer(); - m_in_port = 0; - m_out_port = 0; - m_link_utilized = 0; - m_net_ptr = net_ptr; - m_latency = latency; - int num_net = net_ptr->getNumberOfVirtualNetworks(); - int num_vc = m_net_ptr->getVCsPerClass(); - m_vc_load.resize(num_net * num_vc); + m_id = id; + linkBuffer = new flitBuffer(); + m_in_port = 0; + m_out_port = 0; + m_link_utilized = 0; + m_net_ptr = net_ptr; + m_latency = latency; + int num_net = net_ptr->getNumberOfVirtualNetworks(); + int num_vc = m_net_ptr->getVCsPerClass(); + m_vc_load.resize(num_net * num_vc); - for(int i = 0; i < num_net*num_vc; i++) - m_vc_load[i] = 0; + for (int i = 0; i < num_net * num_vc; i++) + m_vc_load[i] = 0; } NetworkLink::~NetworkLink() { - delete linkBuffer; + delete linkBuffer; } -int NetworkLink::get_id() +int +NetworkLink::get_id() { - return m_id; + return m_id; } -void NetworkLink::setLinkConsumer(FlexibleConsumer *consumer) +void +NetworkLink::setLinkConsumer(FlexibleConsumer *consumer) { - link_consumer = consumer; + link_consumer = consumer; } -void NetworkLink::setSourceQueue(flitBuffer *srcQueue) +void +NetworkLink::setSourceQueue(flitBuffer *srcQueue) { - link_srcQueue = srcQueue; + link_srcQueue = srcQueue; } -void NetworkLink::setSource(FlexibleConsumer *source) +void +NetworkLink::setSource(FlexibleConsumer *source) { - link_source = source; + link_source = source; } -void NetworkLink::request_vc_link(int vc, NetDest destination, Time request_time) + +void +NetworkLink::request_vc_link(int vc, NetDest destination, Time request_time) { - link_consumer->request_vc(vc, m_in_port, destination, request_time); + link_consumer->request_vc(vc, m_in_port, destination, request_time); } -bool NetworkLink::isBufferNotFull_link(int vc) + +bool +NetworkLink::isBufferNotFull_link(int vc) { - return link_consumer->isBufferNotFull(vc, m_in_port); + return link_consumer->isBufferNotFull(vc, m_in_port); } -void NetworkLink::grant_vc_link(int vc, Time grant_time) +void +NetworkLink::grant_vc_link(int vc, Time grant_time) { - link_source->grant_vc(m_out_port, vc, grant_time); + link_source->grant_vc(m_out_port, vc, grant_time); } -void NetworkLink::release_vc_link(int vc, Time release_time) +void +NetworkLink::release_vc_link(int vc, Time release_time) { - link_source->release_vc(m_out_port, vc, release_time); + link_source->release_vc(m_out_port, vc, release_time); } -std::vector<int> NetworkLink::getVcLoad() +std::vector<int> +NetworkLink::getVcLoad() { - return m_vc_load; + return m_vc_load; } -double NetworkLink::getLinkUtilization() +double +NetworkLink::getLinkUtilization() { - Time m_ruby_start = m_net_ptr->getRubyStartTime(); - return (double(m_link_utilized)) / (double(g_eventQueue_ptr->getTime()-m_ruby_start)); + Time m_ruby_start = m_net_ptr->getRubyStartTime(); + return (double(m_link_utilized)) / + (double(g_eventQueue_ptr->getTime()-m_ruby_start)); } -bool NetworkLink::isReady() +bool +NetworkLink::isReady() { - return linkBuffer->isReady(); + return linkBuffer->isReady(); } -void NetworkLink::setInPort(int port) +void +NetworkLink::setInPort(int port) { - m_in_port = port; + m_in_port = port; } -void NetworkLink::setOutPort(int port) +void +NetworkLink::setOutPort(int port) { - m_out_port = port; + m_out_port = port; } -void NetworkLink::wakeup() +void +NetworkLink::wakeup() { - if(link_srcQueue->isReady()) - { - flit *t_flit = link_srcQueue->getTopFlit(); - t_flit->set_time(g_eventQueue_ptr->getTime() + m_latency); - linkBuffer->insert(t_flit); - g_eventQueue_ptr->scheduleEvent(link_consumer, m_latency); - m_link_utilized++; - m_vc_load[t_flit->get_vc()]++; - } + if (!link_srcQueue->isReady()) + return; + + flit *t_flit = link_srcQueue->getTopFlit(); + t_flit->set_time(g_eventQueue_ptr->getTime() + m_latency); + linkBuffer->insert(t_flit); + g_eventQueue_ptr->scheduleEvent(link_consumer, m_latency); + m_link_utilized++; + m_vc_load[t_flit->get_vc()]++; } -flit* NetworkLink::peekLink() +flit* +NetworkLink::peekLink() { - return linkBuffer->peekTopFlit(); + return linkBuffer->peekTopFlit(); } -flit* NetworkLink::consumeLink() +flit* +NetworkLink::consumeLink() { - return linkBuffer->getTopFlit(); + return linkBuffer->getTopFlit(); } |