diff options
Diffstat (limited to 'src/mem/ruby/network/garnet-flexible-pipeline/NetworkLink.hh')
-rw-r--r-- | src/mem/ruby/network/garnet-flexible-pipeline/NetworkLink.hh | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/mem/ruby/network/garnet-flexible-pipeline/NetworkLink.hh b/src/mem/ruby/network/garnet-flexible-pipeline/NetworkLink.hh new file mode 100644 index 000000000..cdea89d79 --- /dev/null +++ b/src/mem/ruby/network/garnet-flexible-pipeline/NetworkLink.hh @@ -0,0 +1,88 @@ +/* + * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution; + * neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * NetworkLink.h + * + * Niket Agarwal, Princeton University + * + * */ +#ifndef NETWORK_LINK_H +#define NETWORK_LINK_H + +#include "NetworkHeader.hh" +#include "FlexibleConsumer.hh" +#include "flitBuffer.hh" +#include "PrioHeap.hh" +#include "NetDest.hh" + +class GarnetNetwork; + +class NetworkLink : public FlexibleConsumer { +public: + NetworkLink(); + NetworkLink(int id, int latency, GarnetNetwork *net_ptr); + ~NetworkLink(); + + void setLinkConsumer(FlexibleConsumer *consumer); + void setSourceQueue(flitBuffer *srcQueue); + flit* peekLink(); + flit* consumeLink(); + + void print(ostream& out) const {} + + bool is_vc_ready(flit *t_flit); + + int get_id(); + void setInPort(int port); + void setOutPort(int port); + void wakeup(); + bool isReady(); + void grant_vc_link(int vc, Time grant_time); + void release_vc_link(int vc, Time release_time); + void request_vc_link(int vc, NetDest destination, Time request_time); + bool isBufferNotFull_link(int vc); + void setSource(FlexibleConsumer *source); + double getLinkUtilization(); + Vector<int> getVcLoad(); + +protected: + int m_id, m_latency; + int m_in_port, m_out_port; + int m_link_utilized; + Vector<int > m_vc_load; + GarnetNetwork *m_net_ptr; + + flitBuffer *linkBuffer; + FlexibleConsumer *link_consumer; + FlexibleConsumer *link_source; + flitBuffer *link_srcQueue; +}; + +#endif + |