cpu_sequencers.append(cpu_seq)
         l1_cntrl_nodes.append(l1_cntrl)
 
+    phys_mem_size = long(phys_mem.range.second) - long(phys_mem.range.first) + 1
+    mem_module_size = phys_mem_size / options.num_dirs
+
     for i in xrange(options.num_dirs):
         #
         # Create the Ruby objects associated with the directory controller
 
         mem_cntrl = RubyMemoryControl(version = i)
 
+        dir_size = MemorySize('0B')
+        dir_size.value = mem_module_size
+
         dir_cntrl = Directory_Controller(version = i,
                                          directory = \
-                                           RubyDirectoryMemory(version = i),
+                                         RubyDirectoryMemory(version = i,
+                                                             size = dir_size),
                                          memBuffer = mem_cntrl)
 
         dir_cntrl_nodes.append(dir_cntrl)
 
     network = SimpleNetwork(topology = makeCrossbar(all_cntrls))
 
     #
-    # determine the total memory size of the ruby system
+    # determine the total memory size of the ruby system and verify it is equal
+    # to physmem
     #
     total_mem_size = MemorySize('0B')
     for dir_cntrl in dir_cntrls:
         total_mem_size.value += dir_cntrl.directory.size.value
+    physmem_size = long(physmem.range.second) - long(physmem.range.first) + 1
+    assert(total_mem_size.value == physmem_size)
 
     ruby_profiler = RubyProfiler(num_of_sequencers = len(cpu_sequencers))