1/* 2 * Copyright (c) 2008 Princeton University 3 * Copyright (c) 2016 Georgia Institute of Technology 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer; 10 * redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution; 13 * neither the name of the copyright holders nor the names of its 14 * contributors may be used to endorse or promote products derived from 15 * this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * 29 * Authors: Niket Agarwal 30 * Tushar Krishna 31 */ 32 33 34#include "mem/ruby/network/garnet2.0/flit.hh" 35 36// Constructor for the flit 37flit::flit(int id, int vc, int vnet, RouteInfo route, int size, 38 MsgPtr msg_ptr, Cycles curTime) 39{ 40 m_size = size; 41 m_msg_ptr = msg_ptr; 42 m_enqueue_time = curTime; 43 m_dequeue_time = curTime; 44 m_time = curTime; 45 m_id = id; 46 m_vnet = vnet; 47 m_vc = vc; 48 m_route = route; 49 m_stage.first = I_; 50 m_stage.second = m_time; 51 52 if (size == 1) { 53 m_type = HEAD_TAIL_; 54 return; 55 } 56 if (id == 0) 57 m_type = HEAD_; 58 else if (id == (size - 1)) 59 m_type = TAIL_; 60 else 61 m_type = BODY_; 62} 63 64// Flit can be printed out for debugging purposes 65void 66flit::print(std::ostream& out) const 67{ 68 out << "[flit:: "; 69 out << "Id=" << m_id << " "; 70 out << "Type=" << m_type << " "; 71 out << "Vnet=" << m_vnet << " "; 72 out << "VC=" << m_vc << " "; 73 out << "Src NI=" << m_route.src_ni << " "; 74 out << "Src Router=" << m_route.src_router << " "; 75 out << "Dest NI=" << m_route.dest_ni << " "; 76 out << "Dest Router=" << m_route.dest_router << " "; 77 out << "Enqueue Time=" << m_enqueue_time << " "; 78 out << "]"; 79} 80 81bool 82flit::functionalWrite(Packet *pkt) 83{ 84 Message *msg = m_msg_ptr.get(); 85 return msg->functionalWrite(pkt); 86} 87