SimpleNetwork.hh revision 11663
17170Sgblack@eecs.umich.edu/* 210037SARM gem5 Developers * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 37170Sgblack@eecs.umich.edu * All rights reserved. 47170Sgblack@eecs.umich.edu * 57170Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 67170Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 77170Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 87170Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 97170Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 107170Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 117170Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 127170Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 137170Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 147170Sgblack@eecs.umich.edu * this software without specific prior written permission. 157170Sgblack@eecs.umich.edu * 167170Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177170Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187170Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197170Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207170Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217170Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227170Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237170Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247170Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 257170Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 267170Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277170Sgblack@eecs.umich.edu */ 287170Sgblack@eecs.umich.edu 297170Sgblack@eecs.umich.edu#ifndef __MEM_RUBY_NETWORK_SIMPLE_SIMPLENETWORK_HH__ 307170Sgblack@eecs.umich.edu#define __MEM_RUBY_NETWORK_SIMPLE_SIMPLENETWORK_HH__ 317170Sgblack@eecs.umich.edu 327170Sgblack@eecs.umich.edu#include <iostream> 337170Sgblack@eecs.umich.edu#include <vector> 347170Sgblack@eecs.umich.edu 357170Sgblack@eecs.umich.edu#include "mem/ruby/network/Network.hh" 367170Sgblack@eecs.umich.edu#include "params/SimpleNetwork.hh" 377170Sgblack@eecs.umich.edu 387170Sgblack@eecs.umich.educlass NetDest; 397170Sgblack@eecs.umich.educlass MessageBuffer; 407170Sgblack@eecs.umich.educlass Throttle; 417170Sgblack@eecs.umich.educlass Switch; 427170Sgblack@eecs.umich.edu 438229Snate@binkert.orgclass SimpleNetwork : public Network 448229Snate@binkert.org{ 457170Sgblack@eecs.umich.edu public: 4610037SARM gem5 Developers typedef SimpleNetworkParams Params; 478961Sgblack@eecs.umich.edu SimpleNetwork(const Params *p); 4810037SARM gem5 Developers ~SimpleNetwork(); 497170Sgblack@eecs.umich.edu 507853SMatt.Horsnell@ARM.com void init(); 517170Sgblack@eecs.umich.edu 527170Sgblack@eecs.umich.edu int getBufferSize() { return m_buffer_size; } 537170Sgblack@eecs.umich.edu int getEndpointBandwidth() { return m_endpoint_bandwidth; } 547170Sgblack@eecs.umich.edu bool getAdaptiveRouting() {return m_adaptive_routing; } 557170Sgblack@eecs.umich.edu 567170Sgblack@eecs.umich.edu void collateStats(); 577170Sgblack@eecs.umich.edu void regStats(); 587170Sgblack@eecs.umich.edu 597170Sgblack@eecs.umich.edu bool isVNetOrdered(int vnet) const { return m_ordered[vnet]; } 607170Sgblack@eecs.umich.edu 617170Sgblack@eecs.umich.edu // Methods used by Topology to setup the network 627170Sgblack@eecs.umich.edu void makeExtOutLink(SwitchID src, NodeID dest, BasicLink* link, 637170Sgblack@eecs.umich.edu const NetDest& routing_table_entry); 648148SAli.Saidi@ARM.com void makeExtInLink(NodeID src, SwitchID dest, BasicLink* link, 658148SAli.Saidi@ARM.com const NetDest& routing_table_entry); 668148SAli.Saidi@ARM.com void makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link, 678148SAli.Saidi@ARM.com const NetDest& routing_table_entry); 688148SAli.Saidi@ARM.com 698148SAli.Saidi@ARM.com void print(std::ostream& out) const; 708148SAli.Saidi@ARM.com 717170Sgblack@eecs.umich.edu bool functionalRead(Packet *pkt); 727170Sgblack@eecs.umich.edu uint32_t functionalWrite(Packet *pkt); 737170Sgblack@eecs.umich.edu 747170Sgblack@eecs.umich.edu private: 757170Sgblack@eecs.umich.edu void addLink(SwitchID src, SwitchID dest, int link_latency); 767170Sgblack@eecs.umich.edu void makeLink(SwitchID src, SwitchID dest, 777170Sgblack@eecs.umich.edu const NetDest& routing_table_entry, int link_latency); 787170Sgblack@eecs.umich.edu void makeTopology(); 797170Sgblack@eecs.umich.edu 807190Sgblack@eecs.umich.edu // Private copy constructor and assignment operator 817190Sgblack@eecs.umich.edu SimpleNetwork(const SimpleNetwork& obj); 827170Sgblack@eecs.umich.edu SimpleNetwork& operator=(const SimpleNetwork& obj); 837170Sgblack@eecs.umich.edu 847190Sgblack@eecs.umich.edu std::vector<Switch*> m_switches; 857190Sgblack@eecs.umich.edu std::vector<MessageBuffer*> m_int_link_buffers; 867170Sgblack@eecs.umich.edu int m_num_connected_buffers; 878148SAli.Saidi@ARM.com const int m_buffer_size; 887170Sgblack@eecs.umich.edu const int m_endpoint_bandwidth; 897170Sgblack@eecs.umich.edu const bool m_adaptive_routing; 907170Sgblack@eecs.umich.edu 917190Sgblack@eecs.umich.edu //Statistical variables 927170Sgblack@eecs.umich.edu Stats::Formula m_msg_counts[MessageSizeType_NUM]; 937170Sgblack@eecs.umich.edu Stats::Formula m_msg_bytes[MessageSizeType_NUM]; 947170Sgblack@eecs.umich.edu}; 957170Sgblack@eecs.umich.edu 967170Sgblack@eecs.umich.eduinline std::ostream& 978148SAli.Saidi@ARM.comoperator<<(std::ostream& out, const SimpleNetwork& obj) 987170Sgblack@eecs.umich.edu{ 997310Sgblack@eecs.umich.edu obj.print(out); 1007170Sgblack@eecs.umich.edu out << std::flush; 1017170Sgblack@eecs.umich.edu return out; 1027170Sgblack@eecs.umich.edu} 1038148SAli.Saidi@ARM.com 1048148SAli.Saidi@ARM.com#endif // __MEM_RUBY_NETWORK_SIMPLE_SIMPLENETWORK_HH__ 1058148SAli.Saidi@ARM.com