gem5 v24.0.0.0
Loading...
Searching...
No Matches
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
48namespace gem5
49{
50
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
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.
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:93
STL vector class.
Definition stl.hh:37
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:317
Bitfield< 0 > p
Bitfield< 11, 7 > vd
Definition types.hh:163
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
std::ostream CheckpointOut
Definition serialize.hh:66
Declaration of Statistics objects.
statistics::Value voltage
Stat for reporting voltage of the domain.

Generated on Tue Jun 18 2024 16:24:06 for gem5 by doxygen 1.11.0