summaryrefslogtreecommitdiff
path: root/configs
diff options
context:
space:
mode:
Diffstat (limited to 'configs')
-rw-r--r--configs/common/CacheConfig.py25
-rw-r--r--configs/common/Options.py2
2 files changed, 27 insertions, 0 deletions
diff --git a/configs/common/CacheConfig.py b/configs/common/CacheConfig.py
index c7a724b34..f31b3d566 100644
--- a/configs/common/CacheConfig.py
+++ b/configs/common/CacheConfig.py
@@ -76,6 +76,9 @@ def config_cache(options, system):
system.l2.cpu_side = system.tol2bus.master
system.l2.mem_side = system.membus.slave
+ if options.memchecker:
+ system.memchecker = MemChecker()
+
for i in xrange(options.num_cpus):
if options.caches:
icache = icache_class(size=options.l1i_size,
@@ -83,6 +86,21 @@ def config_cache(options, system):
dcache = dcache_class(size=options.l1d_size,
assoc=options.l1d_assoc)
+ if options.memchecker:
+ dcache_mon = MemCheckerMonitor(warn_only=True)
+ dcache_real = dcache
+
+ # Do not pass the memchecker into the constructor of
+ # MemCheckerMonitor, as it would create a copy; we require
+ # exactly one MemChecker instance.
+ dcache_mon.memchecker = system.memchecker
+
+ # Connect monitor
+ dcache_mon.mem_side = dcache.cpu_side
+
+ # Let CPU connect to monitors
+ dcache = dcache_mon
+
# When connecting the caches, the clock is also inherited
# from the CPU in question
if buildEnv['TARGET_ISA'] == 'x86':
@@ -91,6 +109,13 @@ def config_cache(options, system):
PageTableWalkerCache())
else:
system.cpu[i].addPrivateSplitL1Caches(icache, dcache)
+
+ if options.memchecker:
+ # The mem_side ports of the caches haven't been connected yet.
+ # Make sure connectAllPorts connects the right objects.
+ system.cpu[i].dcache = dcache_real
+ system.cpu[i].dcache_mon = dcache_mon
+
system.cpu[i].createInterruptController()
if options.l2cache:
system.cpu[i].connectAllPorts(system.tol2bus, system.membus)
diff --git a/configs/common/Options.py b/configs/common/Options.py
index cb5ffad2e..f81e69a61 100644
--- a/configs/common/Options.py
+++ b/configs/common/Options.py
@@ -97,6 +97,8 @@ def addCommonOptions(parser):
parser.add_option("-l", "--lpae", action="store_true")
parser.add_option("-V", "--virtualisation", action="store_true")
+ parser.add_option("--memchecker", action="store_true")
+
# Cache Options
parser.add_option("--caches", action="store_true")
parser.add_option("--l2cache", action="store_true")