gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
voltage_domain.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012 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
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  *
37  * Authors: Vasileios Spiliopoulos
38  * Akash Bagdia
39  */
40 
41 #ifndef __SIM_VOLTAGE_DOMAIN_HH__
42 #define __SIM_VOLTAGE_DOMAIN_HH__
43 
44 #include <vector>
45 
46 #include "base/statistics.hh"
47 #include "params/VoltageDomain.hh"
48 #include "sim/clock_domain.hh"
49 #include "sim/sim_object.hh"
50 
56 class VoltageDomain : public SimObject
57 {
58  public:
59 
60  typedef VoltageDomainParams Params;
61  VoltageDomain(const Params *p);
62 
64 
70  double voltage() const { return voltageOpPoints[_perfLevel]; }
71 
78  double voltage(PerfLevel perf_level) const
79  {
80  chatty_assert(perf_level < numVoltages(), "VoltageDomain %s "\
81  "request for voltage perf level %u is outside "\
82  "of numVoltages %u", name(), perf_level,
83  numVoltages());
84  return voltageOpPoints[perf_level];
85  }
86 
87  uint32_t numVoltages() const { return (uint32_t)voltageOpPoints.size(); }
88 
93  void perfLevel(PerfLevel perf_level);
94 
99  PerfLevel perfLevel() const { return _perfLevel; }
100 
105  void registerSrcClockDom(SrcClockDomain *src_clock_dom) {
106  assert(src_clock_dom->voltageDomain() == this);
107  srcClockChildren.push_back(src_clock_dom);
108  }
109 
114  void startup() override;
115 
127  bool sanitiseVoltages();
128 
129  void regStats() override;
130 
131  void serialize(CheckpointOut &cp) const override;
132  void unserialize(CheckpointIn &cp) override;
133 
134  private:
145 
150 
157 };
158 
159 #endif
#define chatty_assert(cond,...)
The chatty assert macro will function like a normal assert, but will allow the specification of addit...
Definition: misc.hh:259
void registerSrcClockDom(SrcClockDomain *src_clock_dom)
Register a SrcClockDomain with this voltage domain.
SimObjectParams Params
Definition: sim_object.hh:110
PerfLevel perfLevel() const
Get the voltage point of the domain.
std::vector< SrcClockDomain * > SrcClockChildren
List of associated SrcClockDomains that are connected to this voltage domain.
void unserialize(CheckpointIn &cp) override
Unserialize an object.
VoltageDomain * voltageDomain() const
Get the voltage domain.
Declaration of Statistics objects.
uint32_t PerfLevel
bool sanitiseVoltages()
Recomputes the highest (fastest, i.e., numerically lowest) requested performance level of all associa...
uint32_t numVoltages() const
double voltage() const
Get the current voltage.
ClockDomain declarations.
void regStats() override
Register statistics for this object.
double voltage(PerfLevel perf_level) const
Get the voltage at specified performance level.
A VoltageDomain is used to group clock domains that operate under the same voltage.
VoltageDomain(const Params *p)
The source clock domains provides the notion of a clock domain that is connected to a tunable clock s...
std::vector< double > Voltages
VoltageDomainParams Params
SrcClockChildren srcClockChildren
virtual const std::string name() const
Definition: sim_object.hh:117
std::ostream CheckpointOut
Definition: serialize.hh:67
PerfLevel _perfLevel
Stats::Value currentVoltage
Stat for reporting voltage of the domain.
void startup() override
Startup has all SrcClockDomains registered with this voltage domain, so try to make sure that all per...
void serialize(CheckpointOut &cp) const override
Serialize an object.
SrcClockDomain::PerfLevel PerfLevel
Bitfield< 0 > p
const Voltages voltageOpPoints
List of possible minimum voltage at each of the frequency operational points, should be in descending...
Abstract superclass for simulation objects.
Definition: sim_object.hh:94

Generated on Fri Jun 9 2017 13:03:52 for gem5 by doxygen 1.8.6