flit.cc revision 11797
14158Sgblack@eecs.umich.edu/* 24158Sgblack@eecs.umich.edu * Copyright (c) 2008 Princeton University 34158Sgblack@eecs.umich.edu * Copyright (c) 2016 Georgia Institute of Technology 44158Sgblack@eecs.umich.edu * All rights reserved. 54158Sgblack@eecs.umich.edu * 64158Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 74158Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 84158Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 94158Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 104158Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 114158Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 124158Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 134158Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 144158Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 154158Sgblack@eecs.umich.edu * this software without specific prior written permission. 164158Sgblack@eecs.umich.edu * 174158Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 184158Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 194158Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 204158Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 214158Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 224158Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 234158Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 244158Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 254158Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 264158Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 274158Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 284158Sgblack@eecs.umich.edu * 294158Sgblack@eecs.umich.edu * Authors: Niket Agarwal 304158Sgblack@eecs.umich.edu * Tushar Krishna 314158Sgblack@eecs.umich.edu */ 324158Sgblack@eecs.umich.edu 334158Sgblack@eecs.umich.edu 344158Sgblack@eecs.umich.edu#include "mem/ruby/network/garnet2.0/flit.hh" 354158Sgblack@eecs.umich.edu 364158Sgblack@eecs.umich.edu// Constructor for the flit 374158Sgblack@eecs.umich.eduflit::flit(int id, int vc, int vnet, RouteInfo route, int size, 384158Sgblack@eecs.umich.edu MsgPtr msg_ptr, Cycles curTime) 394158Sgblack@eecs.umich.edu{ 404158Sgblack@eecs.umich.edu m_size = size; 414158Sgblack@eecs.umich.edu m_msg_ptr = msg_ptr; 424158Sgblack@eecs.umich.edu m_enqueue_time = curTime; 434158Sgblack@eecs.umich.edu m_dequeue_time = curTime; 444158Sgblack@eecs.umich.edu m_time = curTime; 454158Sgblack@eecs.umich.edu m_id = id; 464158Sgblack@eecs.umich.edu m_vnet = vnet; 474158Sgblack@eecs.umich.edu m_vc = vc; 484158Sgblack@eecs.umich.edu m_route = route; 494158Sgblack@eecs.umich.edu m_stage.first = I_; 504158Sgblack@eecs.umich.edu m_stage.second = m_time; 514158Sgblack@eecs.umich.edu 524158Sgblack@eecs.umich.edu if (size == 1) { 534158Sgblack@eecs.umich.edu m_type = HEAD_TAIL_; 544158Sgblack@eecs.umich.edu return; 554158Sgblack@eecs.umich.edu } 564158Sgblack@eecs.umich.edu if (id == 0) 574158Sgblack@eecs.umich.edu m_type = HEAD_; 584158Sgblack@eecs.umich.edu else if (id == (size - 1)) 594158Sgblack@eecs.umich.edu m_type = TAIL_; 604158Sgblack@eecs.umich.edu else 614158Sgblack@eecs.umich.edu m_type = BODY_; 624158Sgblack@eecs.umich.edu} 634158Sgblack@eecs.umich.edu 644158Sgblack@eecs.umich.edu// Flit can be printed out for debugging purposes 654158Sgblack@eecs.umich.eduvoid 664158Sgblack@eecs.umich.eduflit::print(std::ostream& out) const 674158Sgblack@eecs.umich.edu{ 684158Sgblack@eecs.umich.edu out << "[flit:: "; 694158Sgblack@eecs.umich.edu out << "Id=" << m_id << " "; 704158Sgblack@eecs.umich.edu out << "Type=" << m_type << " "; 714158Sgblack@eecs.umich.edu out << "Vnet=" << m_vnet << " "; 724158Sgblack@eecs.umich.edu out << "VC=" << m_vc << " "; 734158Sgblack@eecs.umich.edu out << "Src NI=" << m_route.src_ni << " "; 744158Sgblack@eecs.umich.edu out << "Src Router=" << m_route.src_router << " "; 754158Sgblack@eecs.umich.edu out << "Dest NI=" << m_route.dest_ni << " "; 764158Sgblack@eecs.umich.edu out << "Dest Router=" << m_route.dest_router << " "; 774158Sgblack@eecs.umich.edu out << "Enqueue Time=" << m_enqueue_time << " "; 784158Sgblack@eecs.umich.edu out << "]"; 794158Sgblack@eecs.umich.edu} 804158Sgblack@eecs.umich.edu 814158Sgblack@eecs.umich.edubool 824158Sgblack@eecs.umich.eduflit::functionalWrite(Packet *pkt) 834158Sgblack@eecs.umich.edu{ 844158Sgblack@eecs.umich.edu Message *msg = m_msg_ptr.get(); 854158Sgblack@eecs.umich.edu return msg->functionalWrite(pkt); 864323Sgblack@eecs.umich.edu} 874323Sgblack@eecs.umich.edu