sim: bump checkpoint version for multiple event queues
[gem5.git] / src / sim / Root.py
index fff998e0dea8b2fbf8c8ea85111b539e24836d0f..c6f7cfba6610779b65389d6c6e6322c706be61da 100644 (file)
@@ -1,4 +1,6 @@
 # Copyright (c) 2005-2007 The Regents of The University of Michigan
+# Copyright (c) 2010-2013 Advanced Micro Devices, Inc.
+# Copyright (c) 2013 Mark D. Hill and David A. Wood
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # Authors: Nathan Binkert
 
 from m5.SimObject import SimObject
+from m5.defines import buildEnv
 from m5.params import *
+from m5.util import fatal
 
 class Root(SimObject):
+
+    _the_instance = None
+
+    def __new__(cls, **kwargs):
+        if Root._the_instance:
+            fatal("Attempt to allocate multiple instances of Root.")
+            return None
+
+        # first call: allocate the unique instance
+        #
+        # If SimObject ever implements __new__, we may want to pass
+        # kwargs here, but for now this goes straight to
+        # object.__new__ which prints an ugly warning if you pass it
+        # args.  Seems like a bad design but that's the way it is.
+        Root._the_instance = SimObject.__new__(cls)
+        return Root._the_instance
+        
+    @classmethod
+    def getInstance(cls):
+        return Root._the_instance
+
+    def path(self):
+        return 'root'
+
     type = 'Root'
-    dummy = Param.Int(0, "We don't support objects without params")
+    cxx_header = "sim/root.hh"
+
+    # By default, root sim object and hence all other sim objects schedule
+    # event on the eventq with index 0.
+    eventq_index = 0
+
+    # Simulation Quantum for multiple main event queue simulation.
+    # Needs to be set explicitly for a multi-eventq simulation.
+    sim_quantum = Param.Tick(0, "simulation quantum")
+
+    full_system = Param.Bool("if this is a full system simulation")
+
+    # Time syncing prevents the simulation from running faster than real time.
+    time_sync_enable = Param.Bool(False, "whether time syncing is enabled")
+    time_sync_period = Param.Clock("100ms", "how often to sync with real time")
+    time_sync_spin_threshold = \
+            Param.Clock("100us", "when less than this much time is left, spin")