for i in xrange(options.testers) ]
 
 # create the desired simulated system
-# ruby memory
-ruby_memory = ruby_config.generate("MI_example-homogeneous.rb", options.testers)
+# ruby memory must be at least 16 MB to work with the mem tester
+ruby_memory = ruby_config.generate("MI_example-homogeneous.rb",
+                                   cores = options.testers,
+                                   memory_size = 16,
+                                   ports_per_cpu = 1)
 
 system = System(cpu = cpus, funcmem = PhysicalMemory(),
                 physmem = ruby_memory)
 
     num_dmas = Param.Int(0, "Number of DMA ports connected to the Ruby memory")
     dma_port = VectorPort("Ruby_dma_ports")
     pio_port = Port("Ruby_pio_port")
+    ports_per_core = Param.Int(2, "Number of per core. Typical two: icache + dcache")
 
     ruby_clock = p->clock;
     ruby_phase = p->phase;
 
+    ports_per_cpu = p->ports_per_core;
+
     DPRINTF(Ruby, "creating Ruby Memory from file %s\n",
             p->config_file.c_str());
 
 
     //
     // Currently this code assumes that each cpu has both a
-    // icache and dcache port and therefore divides by two.  This will be
-    // fixed once we unify the configuration systems and Ruby sequencers
+    // icache and dcache port and therefore divides by ports per cpu.  This will
+    // be fixed once we unify the configuration systems and Ruby sequencers
     // directly support M5 ports.
     //
-    assert(idx/2 < ruby_ports.size());
+    assert(idx/ports_per_cpu < ruby_ports.size());
     Port *port = new Port(csprintf("%s-port%d", name(), idx), 
                           this, 
-                          ruby_ports[idx/2]);
+                          ruby_ports[idx/ports_per_cpu]);
 
     ports[idx] = port;
     return port;
 
     Tick ruby_clock;
     Tick ruby_phase;
     RubyExitCallback* rubyExitCB;
+    int ports_per_cpu;
 
   public:
     static std::map<int64_t, PacketPtr> pending_requests;
 
 
 def generate(config_file, cores=1, memories=1, memory_size=1024, \
              cache_size=32768, cache_assoc=8, dmas=1,
-             ruby_tick='1t'):
+             ruby_tick='1t', ports_per_cpu=2):
     default = joinpath(dirname(__file__), '../../src/mem/ruby/config')
     ruby_config = os.environ.get('RUBY_CONFIG', default)
     args = [ "ruby", "-I", ruby_config, joinpath(ruby_config, "print_cfg.rb"),
                                  config_file = temp_config,
                                  num_cpus = cores,
                                  range = AddrRange(str(memory_size)+"MB"),
-                                 num_dmas = dmas)
+                                 num_dmas = dmas,
+                                 ports_per_core = ports_per_cpu)