diff options
author | Brad Beckmann <Brad.Beckmann@amd.com> | 2010-08-20 11:46:12 -0700 |
---|---|---|
committer | Brad Beckmann <Brad.Beckmann@amd.com> | 2010-08-20 11:46:12 -0700 |
commit | 808701a10c7d2b79feb3746c2b47c5faa3fca042 (patch) | |
tree | 7568c1ff50ad192134621f1e17e74e34154e69e7 /configs/example | |
parent | 64b2205992783b6b0268f18e1930a81b109600eb (diff) | |
download | gem5-808701a10c7d2b79feb3746c2b47c5faa3fca042.tar.xz |
memtest: Memtester support for DMA
This patch adds DMA testing to the Memtester and is inherits many changes from
Polina's old tester_dma_extension patch. Since Ruby does not work in atomic
mode, the atomic mode options are removed.
Diffstat (limited to 'configs/example')
-rw-r--r-- | configs/example/memtest-ruby.py | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/configs/example/memtest-ruby.py b/configs/example/memtest-ruby.py index d67f300fc..d2e9c137e 100644 --- a/configs/example/memtest-ruby.py +++ b/configs/example/memtest-ruby.py @@ -48,25 +48,13 @@ m5_root = os.path.dirname(config_root) parser = optparse.OptionParser() -parser.add_option("-a", "--atomic", action="store_true", - help="Use atomic (non-timing) mode") -parser.add_option("-b", "--blocking", action="store_true", - help="Use blocking caches") parser.add_option("-l", "--maxloads", metavar="N", default=0, help="Stop after N loads") -parser.add_option("-f", "--functional", type="int", default=0, - metavar="PCT", - help="Target percentage of functional accesses " - "[default: %default]") -parser.add_option("-u", "--uncacheable", type="int", default=0, - metavar="PCT", - help="Target percentage of uncacheable accesses " - "[default: %default]") - parser.add_option("--progress", type="int", default=1000, metavar="NLOADS", help="Progress message interval " "[default: %default]") +parser.add_option("--num-dmas", type="int", default=0, help="# of dma testers") # # Add the ruby specific and protocol specific options @@ -101,36 +89,61 @@ if options.num_cpus > block_size: % (options.num_cpus, block_size) sys.exit(1) -cpus = [ MemTest(atomic=options.atomic, max_loads=options.maxloads, \ - percent_functional=options.functional, \ - percent_uncacheable=options.uncacheable, \ - progress_interval=options.progress) \ +# +# Currently ruby does not support atomic, functional, or uncacheable accesses +# +cpus = [ MemTest(atomic = False, \ + max_loads = options.maxloads, \ + issue_dmas = False, \ + percent_functional = 0, \ + percent_uncacheable = 0, \ + progress_interval = options.progress) \ for i in xrange(options.num_cpus) ] system = System(cpu = cpus, funcmem = PhysicalMemory(), physmem = PhysicalMemory()) -system.ruby = Ruby.create_system(options, system) +system.dmas = [ MemTest(atomic = False, \ + max_loads = options.maxloads, \ + issue_dmas = True, \ + percent_functional = 0, \ + percent_uncacheable = 0, \ + progress_interval = options.progress) \ + for i in xrange(options.num_dmas) ] + +system.ruby = Ruby.create_system(options, \ + system.physmem, \ + dma_devices = system.dmas) +# +# The tester is most effective when randomization is turned on and +# artifical delay is randomly inserted on messages +# +system.ruby.randomization = True + assert(len(cpus) == len(system.ruby.cpu_ruby_ports)) for (i, cpu) in enumerate(cpus): # - # Tie the memtester ports to the correct system ports + # Tie the cpu memtester ports to the correct system ports # cpu.test = system.ruby.cpu_ruby_ports[i].port cpu.functional = system.funcmem.port +for (i, dma) in enumerate(system.dmas): + # + # Tie the dma memtester ports to the correct functional port + # Note that the test port has already been connected to the dma_sequencer + # + dma.functional = system.funcmem.port + # ----------------------- # run simulation # ----------------------- root = Root( system = system ) -if options.atomic: - root.system.mem_mode = 'atomic' -else: - root.system.mem_mode = 'timing' +root.system.mem_mode = 'timing' # Not much point in this being higher than the L1 latency m5.ticks.setGlobalFrequency('1ns') |