# Copyright (c) 2005-2007 The Regents of The University of Michigan
+# Copyright (c) 2010 Advanced Micro Devices, Inc.
# 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"
+
+ 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")