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