diff options
Diffstat (limited to 'src/mem/ruby/network/topologies/Crossbar.py')
-rw-r--r-- | src/mem/ruby/network/topologies/Crossbar.py | 17 |
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) |