BasicLink.hh revision 6493
14120Sgblack@eecs.umich.edu
24120Sgblack@eecs.umich.edu/*
34120Sgblack@eecs.umich.edu * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
44120Sgblack@eecs.umich.edu * All rights reserved.
54120Sgblack@eecs.umich.edu *
64120Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
74120Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
84120Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
94120Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
104120Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
114120Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
124120Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
134120Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
144120Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
154120Sgblack@eecs.umich.edu * this software without specific prior written permission.
164120Sgblack@eecs.umich.edu *
174120Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
184120Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
194120Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
204120Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
214120Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
224120Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
234120Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
244120Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
254120Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
264120Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
274120Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
284120Sgblack@eecs.umich.edu */
294120Sgblack@eecs.umich.edu
304120Sgblack@eecs.umich.edu/*
314120Sgblack@eecs.umich.edu * Network.hh
324120Sgblack@eecs.umich.edu *
334120Sgblack@eecs.umich.edu * Description: The Network class is the base class for classes that
344120Sgblack@eecs.umich.edu * implement the interconnection network between components
354120Sgblack@eecs.umich.edu * (processor/cache components and memory/directory components).  The
364120Sgblack@eecs.umich.edu * interconnection network as described here is not a physical
374120Sgblack@eecs.umich.edu * network, but a programming concept used to implement all
384120Sgblack@eecs.umich.edu * communication between components.  Thus parts of this 'network'
394120Sgblack@eecs.umich.edu * will model the on-chip connections between cache controllers and
404120Sgblack@eecs.umich.edu * directory controllers as well as the links between chip and network
414120Sgblack@eecs.umich.edu * switches.
424120Sgblack@eecs.umich.edu *
434120Sgblack@eecs.umich.edu * $Id$
444120Sgblack@eecs.umich.edu * */
454120Sgblack@eecs.umich.edu
464120Sgblack@eecs.umich.edu#ifndef NETWORK_H
474120Sgblack@eecs.umich.edu#define NETWORK_H
484120Sgblack@eecs.umich.edu
494120Sgblack@eecs.umich.edu#include "mem/ruby/common/Global.hh"
504120Sgblack@eecs.umich.edu#include "mem/ruby/system/NodeID.hh"
514120Sgblack@eecs.umich.edu#include "mem/protocol/MessageSizeType.hh"
524120Sgblack@eecs.umich.edu#include "mem/ruby/system/System.hh"
534120Sgblack@eecs.umich.edu
544120Sgblack@eecs.umich.educlass NetDest;
554120Sgblack@eecs.umich.educlass MessageBuffer;
564120Sgblack@eecs.umich.educlass Throttle;
574120Sgblack@eecs.umich.educlass Topology;
584120Sgblack@eecs.umich.edu
594120Sgblack@eecs.umich.educlass Network {
604120Sgblack@eecs.umich.edupublic:
614120Sgblack@eecs.umich.edu  // Constructors
624120Sgblack@eecs.umich.edu  Network(const string & name);
634120Sgblack@eecs.umich.edu  virtual void init(const vector<string> & argv);
644120Sgblack@eecs.umich.edu
654120Sgblack@eecs.umich.edu  // Destructor
664120Sgblack@eecs.umich.edu  virtual ~Network() {}
674120Sgblack@eecs.umich.edu
684120Sgblack@eecs.umich.edu  // Public Methods
694120Sgblack@eecs.umich.edu  int getBufferSize() { return m_buffer_size; }
704120Sgblack@eecs.umich.edu  int getNumberOfVirtualNetworks() { return m_virtual_networks; }
714120Sgblack@eecs.umich.edu  int getEndpointBandwidth() { return m_endpoint_bandwidth; }
724120Sgblack@eecs.umich.edu  bool getAdaptiveRouting() {return m_adaptive_routing; }
734120Sgblack@eecs.umich.edu  int getLinkLatency() { return m_link_latency; }
744120Sgblack@eecs.umich.edu  int MessageSizeType_to_int(MessageSizeType size_type);
754120Sgblack@eecs.umich.edu
764120Sgblack@eecs.umich.edu
774120Sgblack@eecs.umich.edu  // returns the queue requested for the given component
784120Sgblack@eecs.umich.edu  virtual MessageBuffer* getToNetQueue(NodeID id, bool ordered, int netNumber) = 0;
794120Sgblack@eecs.umich.edu  virtual MessageBuffer* getFromNetQueue(NodeID id, bool ordered, int netNumber) = 0;
804120Sgblack@eecs.umich.edu  virtual const Vector<Throttle*>* getThrottles(NodeID id) const { return NULL; }
814120Sgblack@eecs.umich.edu
824120Sgblack@eecs.umich.edu  virtual int getNumNodes() {return 1;}
834120Sgblack@eecs.umich.edu
844120Sgblack@eecs.umich.edu  virtual void makeOutLink(SwitchID src, NodeID dest, const NetDest& routing_table_entry, int link_latency, int link_weight, int bw_multiplier, bool isReconfiguration) = 0;
854120Sgblack@eecs.umich.edu  virtual void makeInLink(SwitchID src, NodeID dest, const NetDest& routing_table_entry, int link_latency, int bw_multiplier, bool isReconfiguration) = 0;
864202Sbinkertn@umich.edu  virtual void makeInternalLink(SwitchID src, NodeID dest, const NetDest& routing_table_entry, int link_latency, int link_weight, int bw_multiplier, bool isReconfiguration) = 0;
874202Sbinkertn@umich.edu
884601Sgblack@eecs.umich.edu  virtual void reset() = 0;
894202Sbinkertn@umich.edu
904202Sbinkertn@umich.edu  virtual void printStats(ostream& out) const = 0;
914202Sbinkertn@umich.edu  virtual void clearStats() = 0;
924249Sgblack@eecs.umich.edu  virtual void printConfig(ostream& out) const = 0;
934240Sgblack@eecs.umich.edu  virtual void print(ostream& out) const = 0;
944202Sbinkertn@umich.edu
954202Sbinkertn@umich.eduprotected:
964120Sgblack@eecs.umich.edu
974202Sbinkertn@umich.edu  // Private Methods
984202Sbinkertn@umich.edu  // Private copy constructor and assignment operator
994202Sbinkertn@umich.edu  Network(const Network& obj);
1004202Sbinkertn@umich.edu  Network& operator=(const Network& obj);
1014202Sbinkertn@umich.edu
1024120Sgblack@eecs.umich.edu  // Data Members (m_ prefix)
1034202Sbinkertn@umich.eduprotected:
1044202Sbinkertn@umich.edu  const string m_name;
1054202Sbinkertn@umich.edu  int m_nodes;
1064120Sgblack@eecs.umich.edu  int m_virtual_networks;
1074202Sbinkertn@umich.edu  int m_buffer_size;
1084202Sbinkertn@umich.edu  int m_endpoint_bandwidth;
1094202Sbinkertn@umich.edu  Topology* m_topology_ptr;
1104202Sbinkertn@umich.edu  bool m_adaptive_routing;
1114202Sbinkertn@umich.edu  int m_link_latency;
1124202Sbinkertn@umich.edu  int m_control_msg_size;
113  int m_data_msg_size;
114};
115
116// Output operator declaration
117ostream& operator<<(ostream& out, const Network& obj);
118
119// ******************* Definitions *******************
120
121// Output operator definition
122extern inline
123ostream& operator<<(ostream& out, const Network& obj)
124{
125  obj.print(out);
126  out << flush;
127  return out;
128}
129
130#endif //NETWORK_H
131