gem5  v22.1.0.0
voltage_domain.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2012, 2019 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 
38 #ifndef __SIM_VOLTAGE_DOMAIN_HH__
39 #define __SIM_VOLTAGE_DOMAIN_HH__
40 
41 #include <vector>
42 
43 #include "base/statistics.hh"
44 #include "params/VoltageDomain.hh"
45 #include "sim/clock_domain.hh"
46 #include "sim/sim_object.hh"
47 
48 namespace gem5
49 {
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  gem5_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 serialize(CheckpointOut &cp) const override;
130  void unserialize(CheckpointIn &cp) override;
131 
132  private:
143 
145  {
147 
152  } stats;
153 
160 };
161 
162 } // namespace gem5
163 
164 #endif
VoltageDomain * voltageDomain() const
Get the voltage domain.
virtual std::string name() const
Definition: named.hh:47
Abstract superclass for simulation objects.
Definition: sim_object.hh:148
SimObjectParams Params
Definition: sim_object.hh:170
The source clock domains provides the notion of a clock domain that is connected to a tunable clock s...
A VoltageDomain is used to group clock domains that operate under the same voltage.
PerfLevel perfLevel() const
Get the voltage point of the domain.
double voltage() const
Get the current voltage.
void registerSrcClockDom(SrcClockDomain *src_clock_dom)
Register a SrcClockDomain with this voltage domain.
const Voltages voltageOpPoints
List of possible minimum voltage at each of the frequency operational points, should be in descending...
void unserialize(CheckpointIn &cp) override
Unserialize an object.
std::vector< double > Voltages
VoltageDomainParams Params
void startup() override
Startup has all SrcClockDomains registered with this voltage domain, so try to make sure that all per...
double voltage(PerfLevel perf_level) const
Get the voltage at specified performance level.
void serialize(CheckpointOut &cp) const override
Serialize an object.
gem5::VoltageDomain::VoltageDomainStats stats
uint32_t numVoltages() const
SrcClockChildren srcClockChildren
bool sanitiseVoltages()
Recomputes the highest (fastest, i.e., numerically lowest) requested performance level of all associa...
SrcClockDomain::PerfLevel PerfLevel
std::vector< SrcClockDomain * > SrcClockChildren
List of associated SrcClockDomains that are connected to this voltage domain.
VoltageDomain(const Params &p)
Statistics container.
Definition: group.hh:94
ClockDomain declarations.
#define gem5_assert(cond,...)
The assert macro will function like a normal assert, but will use panic instead of straight abort().
Definition: logging.hh:318
Bitfield< 54 > p
Definition: pagetable.hh:70
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
std::ostream CheckpointOut
Definition: serialize.hh:66
Declaration of Statistics objects.
statistics::Value voltage
Stat for reporting voltage of the domain.

Generated on Wed Dec 21 2022 10:22:40 for gem5 by doxygen 1.9.1