- print "Error: unsupported ruby protocol"
- sys.exit(1)
-
- #
- # Important: the topology constructor must be called before the network
- # constructor.
- #
- if options.topology == "crossbar":
- net_topology = makeCrossbar(all_cntrls)
- elif options.topology == "mesh":
- #
- # The uniform mesh topology assumes one router per cpu
- #
- net_topology = makeMesh(all_cntrls,
- len(cpu_sequencers),
- options.mesh_rows)
-
- network = SimpleNetwork(topology = net_topology)
-
- #
- # determine the total memory size of the ruby system and verify it is equal
- # to physmem
- #
+ NetworkClass = SimpleNetwork
+ IntLinkClass = SimpleIntLink
+ ExtLinkClass = SimpleExtLink
+ RouterClass = Switch
+ InterfaceClass = None
+
+ # Instantiate the network object so that the controllers can connect to it.
+ network = NetworkClass(ruby_system = ruby, topology = options.topology,
+ routers = [], ext_links = [], int_links = [], netifs = [])
+ ruby.network = network
+
+ protocol = buildEnv['PROTOCOL']
+ exec "import %s" % protocol
+ try:
+ (cpu_sequencers, dir_cntrls, topology) = \
+ eval("%s.create_system(options, system, dma_ports, ruby)"
+ % protocol)
+ except:
+ print "Error: could not create sytem for ruby protocol %s" % protocol
+ raise
+
+ # Create a port proxy for connecting the system port. This is
+ # independent of the protocol and kept in the protocol-agnostic
+ # part (i.e. here).
+ sys_port_proxy = RubyPortProxy(ruby_system = ruby)
+
+ # Give the system port proxy a SimObject parent without creating a
+ # full-fledged controller
+ system.sys_port_proxy = sys_port_proxy
+
+ # Connect the system port for loading of binaries etc
+ system.system_port = system.sys_port_proxy.slave
+
+ # Create the network topology
+ topology.makeTopology(options, network, IntLinkClass, ExtLinkClass,
+ RouterClass)
+
+ if InterfaceClass != None:
+ netifs = [InterfaceClass(id=i) for (i,n) in enumerate(network.ext_links)]
+ network.netifs = netifs
+
+ if options.network_fault_model:
+ assert(options.garnet_network == "fixed")
+ network.enable_fault_model = True
+ network.fault_model = FaultModel()
+
+ # Loop through the directory controlers.
+ # Determine the total memory size of the ruby system and verify it is equal
+ # to physmem. However, if Ruby memory is using sparse memory in SE
+ # mode, then the system should not back-up the memory state with
+ # the Memory Vector and thus the memory size bytes should stay at 0.
+ # Also set the numa bits to the appropriate values.