changeset fff17530cef6 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=fff17530cef6
description:
ruby: interface with classic memory controller
This patch is the final in the series. The whole series and this patch
in
particular were written with the aim of interfacing ruby's directory
controller
with the memory controller in the classic memory system. This is being
done
since ruby's memory controller has not being kept up to date with the
changes
going on in DRAMs. Classic's memory controller is more up to date and
supports multiple different types of DRAM. This also brings classic and
ruby ever more close. The patch also changes ruby's memory controller
to
expose the same interface.
diffstat:
configs/common/MemConfig.py | 3 +-
configs/example/fs.py | 2 -
configs/example/ruby_direct_test.py | 20 +-
configs/example/ruby_mem_test.py | 1 -
configs/example/ruby_random_test.py | 3 +-
configs/example/se.py | 5 -
configs/ruby/MESI_Three_Level.py | 14 +-
configs/ruby/MESI_Two_Level.py | 17 +-
configs/ruby/MI_example.py | 20 +-
configs/ruby/MOESI_CMP_directory.py | 16 +-
configs/ruby/MOESI_CMP_token.py | 16 +-
configs/ruby/MOESI_hammer.py | 21 +-
configs/ruby/Ruby.py | 88 ++++---
src/mem/protocol/MESI_Two_Level-dir.sm | 81 +-----
src/mem/protocol/MI_example-dir.sm | 76 +----
src/mem/protocol/MOESI_CMP_directory-dir.sm | 85 +-----
src/mem/protocol/MOESI_CMP_token-dir.sm | 90 ++-----
src/mem/protocol/MOESI_hammer-dir.sm | 106 +++------
src/mem/protocol/RubySlicc_Defines.sm | 16 +
src/mem/protocol/RubySlicc_Types.sm | 6 -
src/mem/ruby/SConscript | 1 -
src/mem/ruby/network/MessageBuffer.cc | 6 +-
src/mem/ruby/slicc_interface/AbstractController.cc | 164 +++++++++++++-
src/mem/ruby/slicc_interface/AbstractController.hh | 65 +++++-
src/mem/ruby/slicc_interface/Controller.py | 8 +-
src/mem/ruby/structures/Cache.py | 1 -
src/mem/ruby/structures/DirectoryMemory.py | 2 -
src/mem/ruby/structures/MemoryControl.cc | 49 ----
src/mem/ruby/structures/MemoryControl.hh | 114 ----------
src/mem/ruby/structures/MemoryControl.py | 39 ---
src/mem/ruby/structures/MemoryNode.cc | 2 +-
src/mem/ruby/structures/MemoryNode.hh | 12 +-
src/mem/ruby/structures/MemoryVector.hh | 237 ---------------------
src/mem/ruby/structures/RubyMemoryControl.cc | 182 +++++++--------
src/mem/ruby/structures/RubyMemoryControl.hh | 62 ++++-
src/mem/ruby/structures/RubyMemoryControl.py | 10 +-
src/mem/ruby/structures/SConscript | 2 -
src/mem/ruby/system/RubySystem.py | 4 +-
src/mem/ruby/system/Sequencer.py | 2 +-
src/mem/ruby/system/System.cc | 58 +----
src/mem/ruby/system/System.hh | 14 -
src/mem/slicc/symbols/StateMachine.py | 6 +-
src/python/swig/pyobject.cc | 2 +-
tests/configs/memtest-ruby.py | 1 -
tests/configs/pc-simple-timing-ruby.py | 3 -
tests/configs/rubytest-ruby.py | 2 +-
tests/configs/simple-timing-mp-ruby.py | 3 +-
tests/configs/simple-timing-ruby.py | 4 +-
48 files changed, 600 insertions(+), 1141 deletions(-)
diffs (truncated from 3031 to 300 lines):
diff -r 5777a3e55603 -r fff17530cef6 configs/common/MemConfig.py
--- a/configs/common/MemConfig.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/common/MemConfig.py Thu Nov 06 05:42:21 2014 -0600
@@ -54,7 +54,8 @@
("lpddr2_s4_1066_x32", "LPDDR2_S4_1066_x32"),
("lpddr3_1600_x32", "LPDDR3_1600_x32"),
("wio_200_x128", "WideIO_200_x128"),
- ("dramsim2", "DRAMSim2")
+ ("dramsim2", "DRAMSim2"),
+ ("ruby_memory", "RubyMemoryControl")
]
# Filtered list of aliases. Only aliases for existing memory
diff -r 5777a3e55603 -r fff17530cef6 configs/example/fs.py
--- a/configs/example/fs.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/example/fs.py Thu Nov 06 05:42:21 2014 -0600
@@ -137,8 +137,6 @@
Ruby.create_system(options, True, test_sys, test_sys.iobus,
test_sys._dma_ports)
- test_sys.physmem = [SimpleMemory(range = r, null = True)
- for r in test_sys.mem_ranges]
# Create a seperate clock domain for Ruby
test_sys.ruby.clk_domain = SrcClockDomain(clock = options.ruby_clock,
diff -r 5777a3e55603 -r fff17530cef6 configs/example/ruby_direct_test.py
--- a/configs/example/ruby_direct_test.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/example/ruby_direct_test.py Thu Nov 06 05:42:21 2014 -0600
@@ -48,7 +48,7 @@
parser = optparse.OptionParser()
Options.addCommonOptions(parser)
-parser.add_option("-l", "--requests", metavar="N", default=100,
+parser.add_option("--requests", metavar="N", default=100,
help="Stop after N requests")
parser.add_option("-f", "--wakeup_freq", metavar="N", default=10,
help="Wakeup every N cycles")
@@ -87,13 +87,8 @@
print "Error: unknown direct test generator"
sys.exit(1)
-#
-# Create the M5 system. Note that the Memory Object isn't
-# actually used by the rubytester, but is included to support the
-# M5 memory size == Ruby memory size checks
-#
-system = System(physmem = SimpleMemory(),
- mem_ranges = [AddrRange(options.mem_size)])
+# Create the M5 system.
+system = System(mem_ranges = [AddrRange(options.mem_size)])
# Create a top-level voltage domain and clock domain
@@ -102,12 +97,9 @@
system.clk_domain = SrcClockDomain(clock = options.sys_clock,
voltage_domain = system.voltage_domain)
-#
# Create the ruby random tester
-#
-system.cpu = RubyDirectedTester(requests_to_complete = \
- options.requests,
- generator = generator)
+system.cpu = RubyDirectedTester(requests_to_complete = options.requests,
+ generator = generator)
Ruby.create_system(options, False, system)
@@ -121,7 +113,7 @@
#
# Tie the ruby tester ports to the ruby cpu ports
#
- system.tester.cpuPort = ruby_port.slave
+ system.cpu.cpuPort = ruby_port.slave
# -----------------------
# run simulation
diff -r 5777a3e55603 -r fff17530cef6 configs/example/ruby_mem_test.py
--- a/configs/example/ruby_mem_test.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/example/ruby_mem_test.py Thu Nov 06 05:42:21 2014 -0600
@@ -107,7 +107,6 @@
system = System(cpu = cpus,
funcmem = SimpleMemory(in_addr_map = False),
funcbus = NoncoherentXBar(),
- physmem = SimpleMemory(),
clk_domain = SrcClockDomain(clock = options.sys_clock),
mem_ranges = [AddrRange(options.mem_size)])
diff -r 5777a3e55603 -r fff17530cef6 configs/example/ruby_random_test.py
--- a/configs/example/ruby_random_test.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/example/ruby_random_test.py Thu Nov 06 05:42:21 2014 -0600
@@ -97,8 +97,7 @@
# actually used by the rubytester, but is included to support the
# M5 memory size == Ruby memory size checks
#
-system = System(cpu = tester, physmem = SimpleMemory(),
- mem_ranges = [AddrRange(options.mem_size)])
+system = System(cpu = tester, mem_ranges = [AddrRange(options.mem_size)])
# Create a top-level voltage domain and clock domain
system.voltage_domain = VoltageDomain(voltage = options.sys_voltage)
diff -r 5777a3e55603 -r fff17530cef6 configs/example/se.py
--- a/configs/example/se.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/example/se.py Thu Nov 06 05:42:21 2014 -0600
@@ -225,11 +225,6 @@
print >> sys.stderr, "Ruby requires TimingSimpleCPU or O3CPU!!"
sys.exit(1)
- # Use SimpleMemory with the null option since this memory is only used
- # for determining which addresses are within the range of the memory.
- # No space allocation is required.
- system.physmem = SimpleMemory(range=AddrRange(options.mem_size),
- null = True)
options.use_map = True
Ruby.create_system(options, False, system)
assert(options.num_cpus == len(system.ruby._cpu_ports))
diff -r 5777a3e55603 -r fff17530cef6 configs/ruby/MESI_Three_Level.py
--- a/configs/ruby/MESI_Three_Level.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/ruby/MESI_Three_Level.py Thu Nov 06 05:42:21 2014 -0600
@@ -182,22 +182,12 @@
#
# Create the Ruby objects associated with the directory controller
#
-
- mem_cntrl = RubyMemoryControl(
- clk_domain = ruby_system.memctrl_clk_domain,
- version = i,
- ruby_system = ruby_system)
-
dir_size = MemorySize('0B')
dir_size.value = mem_module_size
dir_cntrl = Directory_Controller(version = i,
- directory = \
- RubyDirectoryMemory(version = i,
- size = dir_size,
- use_map =
- options.use_map),
- memBuffer = mem_cntrl,
+ directory = RubyDirectoryMemory(
+ version = i, size = dir_size),
transitions_per_cycle = options.ports,
ruby_system = ruby_system)
diff -r 5777a3e55603 -r fff17530cef6 configs/ruby/MESI_Two_Level.py
--- a/configs/ruby/MESI_Two_Level.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/ruby/MESI_Two_Level.py Thu Nov 06 05:42:21 2014 -0600
@@ -162,25 +162,12 @@
clk_divider=3)
for i in xrange(options.num_dirs):
- #
- # Create the Ruby objects associated with the directory controller
- #
-
- mem_cntrl = RubyMemoryControl(
- clk_domain = ruby_system.memctrl_clk_domain,
- version = i,
- ruby_system = ruby_system)
-
dir_size = MemorySize('0B')
dir_size.value = mem_module_size
dir_cntrl = Directory_Controller(version = i,
- directory = \
- RubyDirectoryMemory(version = i,
- size = dir_size,
- use_map =
- options.use_map),
- memBuffer = mem_cntrl,
+ directory = RubyDirectoryMemory(
+ version = i, size = dir_size),
transitions_per_cycle = options.ports,
ruby_system = ruby_system)
diff -r 5777a3e55603 -r fff17530cef6 configs/ruby/MI_example.py
--- a/configs/ruby/MI_example.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/ruby/MI_example.py Thu Nov 06 05:42:21 2014 -0600
@@ -117,27 +117,11 @@
clk_divider=3)
for i in xrange(options.num_dirs):
- #
- # Create the Ruby objects associated with the directory controller
- #
-
- mem_cntrl = RubyMemoryControl(
- clk_domain = ruby_system.memctrl_clk_domain,
- version = i,
- ruby_system = ruby_system)
-
dir_size = MemorySize('0B')
dir_size.value = mem_module_size
-
dir_cntrl = Directory_Controller(version = i,
- directory = \
- RubyDirectoryMemory( \
- version = i,
- size = dir_size,
- use_map = options.use_map,
- map_levels = \
- options.map_levels),
- memBuffer = mem_cntrl,
+ directory = RubyDirectoryMemory(
+ version = i, size = dir_size),
transitions_per_cycle = options.ports,
ruby_system = ruby_system)
diff -r 5777a3e55603 -r fff17530cef6 configs/ruby/MOESI_CMP_directory.py
--- a/configs/ruby/MOESI_CMP_directory.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/ruby/MOESI_CMP_directory.py Thu Nov 06 05:42:21 2014 -0600
@@ -156,24 +156,12 @@
clk_divider=3)
for i in xrange(options.num_dirs):
- #
- # Create the Ruby objects associated with the directory controller
- #
-
- mem_cntrl = RubyMemoryControl(
- clk_domain = ruby_system.memctrl_clk_domain,
- version = i,
- ruby_system = ruby_system)
-
dir_size = MemorySize('0B')
dir_size.value = mem_module_size
dir_cntrl = Directory_Controller(version = i,
- directory = \
- RubyDirectoryMemory(version = i,
- size = dir_size,
- use_map = options.use_map),
- memBuffer = mem_cntrl,
+ directory = RubyDirectoryMemory(
+ version = i, size = dir_size),
transitions_per_cycle = options.ports,
ruby_system = ruby_system)
diff -r 5777a3e55603 -r fff17530cef6 configs/ruby/MOESI_CMP_token.py
--- a/configs/ruby/MOESI_CMP_token.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/ruby/MOESI_CMP_token.py Thu Nov 06 05:42:21 2014 -0600
@@ -180,24 +180,12 @@
clk_divider=3)
for i in xrange(options.num_dirs):
- #
- # Create the Ruby objects associated with the directory controller
- #
-
- mem_cntrl = RubyMemoryControl(
- clk_domain = ruby_system.memctrl_clk_domain,
- version = i,
- ruby_system = ruby_system)
-
dir_size = MemorySize('0B')
dir_size.value = mem_module_size
dir_cntrl = Directory_Controller(version = i,
- directory = \
- RubyDirectoryMemory(version = i,
- use_map = options.use_map,
- size = dir_size),
- memBuffer = mem_cntrl,
+ directory = RubyDirectoryMemory(
+ version = i, size = dir_size),
l2_select_num_bits = l2_bits,
transitions_per_cycle = options.ports,
ruby_system = ruby_system)
diff -r 5777a3e55603 -r fff17530cef6 configs/ruby/MOESI_hammer.py
--- a/configs/ruby/MOESI_hammer.py Thu Nov 06 05:42:20 2014 -0600
+++ b/configs/ruby/MOESI_hammer.py Thu Nov 06 05:42:21 2014 -0600
@@ -170,15 +170,6 @@
clk_divider=3)
for i in xrange(options.num_dirs):
- #
- # Create the Ruby objects associated with the directory controller
- #
-
- mem_cntrl = RubyMemoryControl(
- clk_domain = ruby_system.memctrl_clk_domain,
- version = i,
- ruby_system = ruby_system)
-
dir_size = MemorySize('0B')
dir_size.value = mem_module_size
@@ -186,17 +177,9 @@
start_index_bit = pf_start_bit)
dir_cntrl = Directory_Controller(version = i,
- directory = \
- RubyDirectoryMemory( \
- version = i,
- size = dir_size,
- use_map = options.use_map,
- map_levels = \
- options.map_levels,
- numa_high_bit = \
- options.numa_high_bit),
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev