1# Copyright (c) 2015 The University of Illinois Urbana Champaign 2# All rights reserved 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer; 8# redistributions in binary form must reproduce the above copyright 9# notice, this list of conditions and the following disclaimer in the 10# documentation and/or other materials provided with the distribution; 11# neither the name of the copyright holders nor the names of its 12# contributors may be used to endorse or promote products derived from 13# this software without specific prior written permission. 14# 15# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26# 27# Authors: Mohammad Alian 28 29# This is an example of an n port network switch to work in dist-gem5. 30# Users can extend this to have different different topologies 31 32import optparse 33import sys 34 35import m5 36from m5.defines import buildEnv 37from m5.objects import * 38from m5.util import addToPath, fatal 39 40addToPath('../') 41 42from common import Simulation 43from common import Options 44 45def build_switch(options): 46 # instantiate an EtherSwitch 47 switch = EtherSwitch() 48 # instantiate distEtherLinks to connect switch ports 49 # to other gem5 instances 50 switch.portlink = [DistEtherLink(speed = options.ethernet_linkspeed, 51 delay = options.ethernet_linkdelay, 52 dist_rank = options.dist_rank, 53 dist_size = options.dist_size, 54 server_name = options.dist_server_name, 55 server_port = options.dist_server_port, 56 sync_start = options.dist_sync_start, 57 sync_repeat = options.dist_sync_repeat, 58 is_switch = True, 59 num_nodes = options.dist_size) 60 for i in range(options.dist_size)] 61 62 for (i, link) in enumerate(switch.portlink): 63 link.int0 = switch.interface[i] 64 65 return switch 66 67def main(): 68 # Add options 69 parser = optparse.OptionParser() 70 Options.addCommonOptions(parser) 71 Options.addFSOptions(parser) 72 (options, args) = parser.parse_args() 73 74 system = build_switch(options) 75 root = Root(full_system = True, system = system) 76 Simulation.run(options, root, None, None) 77 78if __name__ == "__m5_main__": 79 main() 80