1/* |
2 * Copyright (c) 2015-2016 ARM Limited |
3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 25 unchanged lines hidden (view full) --- 36 * 37 * Authors: Akash Bagdia 38 * David Guillen Fandos 39 */ 40 41#include "sim/clocked_object.hh" 42 43#include "base/misc.hh" |
44 |
45void 46ClockedObject::serialize(CheckpointOut &cp) const 47{ 48 unsigned int currPwrState = (unsigned int)_currPwrState; 49 50 SERIALIZE_SCALAR(currPwrState); 51 SERIALIZE_SCALAR(prvEvalTick); 52} --- 14 unchanged lines hidden (view full) --- 67{ 68 // Function should ideally be called only when there is a state change 69 if (_currPwrState == p) { 70 warn("ClockedObject: Already in the requested power state, request "\ 71 "ignored"); 72 return; 73 } 74 |
75 // No need to compute stats if in the same tick, update state though. This 76 // can happen in cases like a) during start of the simulation multiple 77 // state changes happens in init/startup phase, b) one takes a decision to 78 // migrate state but decides to reverts back to the original state in the 79 // same tick if other conditions are not met elsewhere. 80 // Any state change related stats would have been recorded on previous call 81 // to the pwrState() function. |
82 if (prvEvalTick == curTick()) { 83 warn("ClockedObject: More than one power state change request "\ 84 "encountered within the same simulation tick"); 85 _currPwrState = p; 86 return; 87 } 88 89 // Record stats for previous state. --- 31 unchanged lines hidden (view full) --- 121 pwrStateResidencyTicks.value(residencies); 122 123 // Account for current state too! 124 Tick elapsed_time = curTick() - prvEvalTick; 125 residencies[_currPwrState] += elapsed_time; 126 127 ret.resize(Enums::PwrState::Num_PwrState); 128 for (unsigned i = 0; i < Enums::PwrState::Num_PwrState; i++) |
129 ret[i] = residencies[i] / \ |
130 (pwrStateResidencyTicks.total() + elapsed_time); 131 132 return ret; 133} 134 135void 136ClockedObject::regStats() 137{ --- 40 unchanged lines hidden --- |