pwr: Enable multiple power models per component
authorDavid Guillen Fandos <david.guillen@arm.com>
Fri, 1 Jul 2016 16:46:25 +0000 (17:46 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Thu, 16 Nov 2017 16:15:12 +0000 (16:15 +0000)
This patch allows the user to specify more than one
power model for any given Clocked Object. This is
useful and some times necessary to properly model
components that have multiple power sources (or
subcomponents) but gem5 doesn't model them.

The ideal solution would be to have a DictParam
to replace the VectorParam so each model can have
a name and can be identified in the stats file.

Change-Id: I4080a7054a16b56069c44750a7a9ce4e674cdf9d
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/5733
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/sim/ClockedObject.py
src/sim/clocked_object.cc

index c8bf809be97b628907d646b8846b36467f57e2b4..2d6171888ae96f2d27b2ce9921e6676d31fe8950 100644 (file)
@@ -67,7 +67,7 @@ class ClockedObject(SimObject):
     clk_domain = Param.ClockDomain(Parent.clk_domain, "Clock domain")
 
     # Power model for this ClockedObject
-    power_model = Param.PowerModel(NULL, "Power model")
+    power_model = VectorParam.PowerModel([], "Power models")
 
     # Provide initial power state, should ideally get redefined in startup
     # routine
index f1e3134c3c1b547b9e59648fa3512d5029aae87d..56389119ac1a13dc04686b967aef53dfbbbd08df 100644 (file)
@@ -49,8 +49,8 @@ ClockedObject::ClockedObject(const ClockedObjectParams *p) :
     prvEvalTick(0)
 {
     // Register the power_model with the object
-    if (p->power_model)
-        p->power_model->setClockedObject(this);
+    for (auto & power_model: p->power_model)
+        power_model->setClockedObject(this);
 }
 
 void