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