flitBuffer.cc revision 11666
17860SN/A/* 27860SN/A * Copyright (c) 2008 Princeton University 37860SN/A * Copyright (c) 2016 Georgia Institute of Technology 48825Snilay@cs.wisc.edu * All rights reserved. 57935SN/A * 67935SN/A * Redistribution and use in source and binary forms, with or without 77935SN/A * modification, are permitted provided that the following conditions are 87860SN/A * met: redistributions of source code must retain the above copyright 97860SN/A * notice, this list of conditions and the following disclaimer; 107860SN/A * redistributions in binary form must reproduce the above copyright 117860SN/A * notice, this list of conditions and the following disclaimer in the 128825Snilay@cs.wisc.edu * documentation and/or other materials provided with the distribution; 138825Snilay@cs.wisc.edu * neither the name of the copyright holders nor the names of its 148825Snilay@cs.wisc.edu * contributors may be used to endorse or promote products derived from 158825Snilay@cs.wisc.edu * this software without specific prior written permission. 167860SN/A * 178464SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 188721SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 197860SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 208825Snilay@cs.wisc.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 218825Snilay@cs.wisc.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 227935SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 237935SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 247935SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 257935SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 267935SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 277935SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 287935SN/A * 298893Ssaidi@eecs.umich.edu * Authors: Niket Agarwal 307860SN/A * Tushar Krishna 317860SN/A */ 327860SN/A 338825Snilay@cs.wisc.edu 347860SN/A#include "mem/ruby/network/garnet2.0/flitBuffer.hh" 357860SN/A 367860SN/AflitBuffer::flitBuffer() 377860SN/A{ 388210SN/A max_size = INFINITE_; 398210SN/A} 407860SN/A 417860SN/AflitBuffer::flitBuffer(int maximum_size) 427860SN/A{ 437860SN/A max_size = maximum_size; 447860SN/A} 457860SN/A 467860SN/Abool 477860SN/AflitBuffer::isEmpty() 487860SN/A{ 497860SN/A return (m_buffer.size() == 0); 507860SN/A} 517860SN/A 527860SN/Abool 537860SN/AflitBuffer::isReady(Cycles curTime) 547860SN/A{ 557860SN/A if (m_buffer.size() != 0 ) { 567860SN/A flit *t_flit = peekTopFlit(); 577860SN/A if (t_flit->get_time() <= curTime) 587860SN/A return true; 597860SN/A } 607860SN/A return false; 617860SN/A} 628825Snilay@cs.wisc.edu 637860SN/Avoid 647860SN/AflitBuffer::print(std::ostream& out) const 657860SN/A{ 667860SN/A out << "[flitBuffer: " << m_buffer.size() << "] " << std::endl; 677860SN/A} 687860SN/A 697860SN/Abool 707860SN/AflitBuffer::isFull() 717860SN/A{ 727860SN/A return (m_buffer.size() >= max_size); 737860SN/A} 747860SN/A 757860SN/Avoid 767860SN/AflitBuffer::setMaxSize(int maximum) 777860SN/A{ 787860SN/A max_size = maximum; 797860SN/A} 808825Snilay@cs.wisc.edu 817860SN/Auint32_t 827860SN/AflitBuffer::functionalWrite(Packet *pkt) 837860SN/A{ 847860SN/A uint32_t num_functional_writes = 0; 857860SN/A 867860SN/A for (unsigned int i = 0; i < m_buffer.size(); ++i) { 877860SN/A if (m_buffer[i]->functionalWrite(pkt)) { 887860SN/A num_functional_writes++; 897860SN/A } 907860SN/A } 917860SN/A 928825Snilay@cs.wisc.edu return num_functional_writes; 937860SN/A} 947860SN/A