clocked_object.hh (11430:bd1c6789c33f) | clocked_object.hh (11524:3101ce98c55c) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2012-2013 ARM Limited | 2 * Copyright (c) 2012-2013, 2015-2016 ARM Limited |
3 * Copyright (c) 2013 Cornell University 4 * All rights reserved 5 * 6 * The license below extends only to copyright in the software and shall 7 * not be construed as granting a license to any other intellectual 8 * property including but not limited to intellectual property relating 9 * to a hardware implementation of the functionality of the software 10 * licensed hereunder. You may use the software subject to the license --- 21 unchanged lines hidden (view full) --- 32 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 33 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 36 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 * 38 * Authors: Andreas Hansson 39 * Christopher Torng | 3 * Copyright (c) 2013 Cornell University 4 * All rights reserved 5 * 6 * The license below extends only to copyright in the software and shall 7 * not be construed as granting a license to any other intellectual 8 * property including but not limited to intellectual property relating 9 * to a hardware implementation of the functionality of the software 10 * licensed hereunder. You may use the software subject to the license --- 21 unchanged lines hidden (view full) --- 32 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 33 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 36 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 * 38 * Authors: Andreas Hansson 39 * Christopher Torng |
40 * Akash Bagdia 41 * David Guillen Fandos |
|
40 */ 41 42/** 43 * @file 44 * ClockedObject declaration and implementation. 45 */ 46 47#ifndef __SIM_CLOCKED_OBJECT_HH__ 48#define __SIM_CLOCKED_OBJECT_HH__ 49 | 42 */ 43 44/** 45 * @file 46 * ClockedObject declaration and implementation. 47 */ 48 49#ifndef __SIM_CLOCKED_OBJECT_HH__ 50#define __SIM_CLOCKED_OBJECT_HH__ 51 |
52#include "base/callback.hh" |
|
50#include "base/intmath.hh" 51#include "base/misc.hh" | 53#include "base/intmath.hh" 54#include "base/misc.hh" |
55#include "enums/PwrState.hh" |
|
52#include "params/ClockedObject.hh" 53#include "sim/core.hh" 54#include "sim/clock_domain.hh" 55#include "sim/sim_object.hh" 56 57/** 58 * Helper class for objects that need to be clocked. Clocked objects 59 * typically inherit from this class. Objects that need SimObject --- 168 unchanged lines hidden (view full) --- 228 * The ClockedObject class extends the SimObject with a clock and 229 * accessor functions to relate ticks to the cycles of the object. 230 */ 231class ClockedObject 232 : public SimObject, public Clocked 233{ 234 public: 235 ClockedObject(const ClockedObjectParams *p) | 56#include "params/ClockedObject.hh" 57#include "sim/core.hh" 58#include "sim/clock_domain.hh" 59#include "sim/sim_object.hh" 60 61/** 62 * Helper class for objects that need to be clocked. Clocked objects 63 * typically inherit from this class. Objects that need SimObject --- 168 unchanged lines hidden (view full) --- 232 * The ClockedObject class extends the SimObject with a clock and 233 * accessor functions to relate ticks to the cycles of the object. 234 */ 235class ClockedObject 236 : public SimObject, public Clocked 237{ 238 public: 239 ClockedObject(const ClockedObjectParams *p) |
236 : SimObject(p), Clocked(*p->clk_domain) { } | 240 : SimObject(p), Clocked(*p->clk_domain), 241 _currPwrState(p->default_p_state), 242 prvEvalTick(0) 243 { } 244 245 /** Parameters of ClockedObject */ 246 typedef ClockedObjectParams Params; 247 const Params* params() const 248 { return reinterpret_cast<const Params*>(_params); } 249 250 void serialize(CheckpointOut &cp) const override; 251 void unserialize(CheckpointIn &cp) override; 252 253 inline Enums::PwrState pwrState() const 254 { return _currPwrState; } 255 256 inline std::string pwrStateName() const 257 { return Enums::PwrStateStrings[_currPwrState]; } 258 259 /** Returns the percentage residency for each power state */ 260 std::vector<double> pwrStateWeights() const; 261 262 /** 263 * Record stats values like state residency by computing the time 264 * difference from previous update. Also, updates the previous evaluation 265 * tick once all stats are recorded. 266 * Usually called on power state change and stats dump callback. 267 */ 268 void computeStats(); 269 270 void pwrState(Enums::PwrState); 271 void regStats(); 272 273 protected: 274 275 /** To keep track of the current power state */ 276 Enums::PwrState _currPwrState; 277 278 Tick prvEvalTick; 279 280 Stats::Scalar numPwrStateTransitions; 281 Stats::Distribution pwrStateClkGateDist; 282 Stats::Vector pwrStateResidencyTicks; 283 |
237}; 238 | 284}; 285 |
286class ClockedObjectDumpCallback : public Callback 287{ 288 ClockedObject *co; 289 public: 290 ClockedObjectDumpCallback(ClockedObject *co_t) : co(co_t) {} 291 virtual void process() { co->computeStats(); }; 292}; 293 |
|
239#endif //__SIM_CLOCKED_OBJECT_HH__ | 294#endif //__SIM_CLOCKED_OBJECT_HH__ |