diff options
author | Nilay Vaish <nilay@cs.wisc.edu> | 2014-09-01 16:55:47 -0500 |
---|---|---|
committer | Nilay Vaish <nilay@cs.wisc.edu> | 2014-09-01 16:55:47 -0500 |
commit | 7a0d5aafe4b845a2d1cff6210d7c6ee66e8aba61 (patch) | |
tree | 6ef6157a33d226688f2909998b71936976ee755b /configs/ruby/Ruby.py | |
parent | 00286fc5cbb7b8635d56eb335fed11d1499e2552 (diff) | |
download | gem5-7a0d5aafe4b845a2d1cff6210d7c6ee66e8aba61.tar.xz |
ruby: message buffers: significant changes
This patch is the final patch in a series of patches. The aim of the series
is to make ruby more configurable than it was. More specifically, the
connections between controllers are not at all possible (unless one is ready
to make significant changes to the coherence protocol). Moreover the buffers
themselves are magically connected to the network inside the slicc code.
These connections are not part of the configuration file.
This patch makes changes so that these connections will now be made in the
python configuration files associated with the protocols. This requires
each state machine to expose the message buffers it uses for input and output.
So, the patch makes these buffers configurable members of the machines.
The patch drops the slicc code that usd to connect these buffers to the
network. Now these buffers are exposed to the python configuration system
as Master and Slave ports. In the configuration files, any master port
can be connected any slave port. The file pyobject.cc has been modified to
take care of allocating the actual message buffer. This is inline with how
other port connections work.
Diffstat (limited to 'configs/ruby/Ruby.py')
-rw-r--r-- | configs/ruby/Ruby.py | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/configs/ruby/Ruby.py b/configs/ruby/Ruby.py index d9517456b..3c43fa6c6 100644 --- a/configs/ruby/Ruby.py +++ b/configs/ruby/Ruby.py @@ -106,31 +106,7 @@ def create_system(options, system, piobus = None, dma_ports = []): system.ruby = RubySystem(no_mem_vec = options.use_map) ruby = system.ruby - 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 - - - # # Set the network classes based on the command line options - # if options.garnet_network == "fixed": NetworkClass = GarnetNetwork_d IntLinkClass = GarnetIntLink_d @@ -152,10 +128,34 @@ def create_system(options, system, piobus = None, dma_ports = []): 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 - network = NetworkClass(ruby_system = ruby, topology = topology.description, - routers = [], ext_links = [], int_links = [], netifs = []) topology.makeTopology(options, network, IntLinkClass, ExtLinkClass, RouterClass) @@ -168,14 +168,12 @@ def create_system(options, system, piobus = None, dma_ports = []): 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. - # total_mem_size = MemorySize('0B') ruby.block_size_bytes = options.cacheline_size @@ -196,8 +194,6 @@ def create_system(options, system, piobus = None, dma_ports = []): phys_mem_size = sum(map(lambda r: r.size(), system.mem_ranges)) assert(total_mem_size.value == phys_mem_size) - - ruby.network = network ruby.mem_size = total_mem_size # Connect the cpu sequencers and the piobus |