summaryrefslogtreecommitdiff
path: root/src/mem/ruby/network/topologies/Crossbar.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/network/topologies/Crossbar.py')
-rw-r--r--src/mem/ruby/network/topologies/Crossbar.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/mem/ruby/network/topologies/Crossbar.py b/src/mem/ruby/network/topologies/Crossbar.py
index 77a6fd6f2..8aa6c3504 100644
--- a/src/mem/ruby/network/topologies/Crossbar.py
+++ b/src/mem/ruby/network/topologies/Crossbar.py
@@ -32,12 +32,19 @@ from m5.objects import *
class Crossbar(Topology):
description='Crossbar'
-def makeTopology(nodes, options):
- ext_links = [ExtLink(ext_node=n, int_node=i)
+def makeTopology(nodes, options, IntLink, ExtLink, Router):
+ # Create an individual router for each controller plus one more for the
+ # centralized crossbar. The large numbers of routers are needed because
+ # external links do not model outgoing bandwidth in the simple network, but
+ # internal links do.
+ routers = [Router(router_id=i) for i in range(len(nodes)+1)]
+ ext_links = [ExtLink(link_id=i, ext_node=n, int_node=routers[i])
for (i, n) in enumerate(nodes)]
- xbar = len(nodes) # node ID for crossbar switch
- int_links = [IntLink(node_a=i, node_b=xbar) for i in range(len(nodes))]
+ link_count = len(nodes)
+ xbar = routers[len(nodes)] # the crossbar router is the last router created
+ int_links = [IntLink(link_id=(link_count+i), node_a=routers[i], node_b=xbar)
+ for i in range(len(nodes))]
return Crossbar(ext_links=ext_links, int_links=int_links,
- num_int_nodes=len(nodes)+1)
+ routers=routers)