49 #ifndef __SIM_CLOCK_DOMAIN_HH__
50 #define __SIM_CLOCK_DOMAIN_HH__
55 #include "params/ClockDomain.hh"
56 #include "params/DerivedClockDomain.hh"
57 #include "params/SrcClockDomain.hh"
158 {
children.push_back(clock_domain); }
uint32_t domainID() const
void addDerivedDomain(DerivedClockDomain *clock_domain)
Add a derived domain.
void startup() override
startup() is the final initialization call before simulation.
void signalPerfLevelUpdate()
Inform other components about the changed performance level.
double voltage() const
Get the current voltage this clock domain operates at.
DerivedClockDomainParams Params
const uint64_t clockDivider
Local clock divider of the domain.
VoltageDomain * _voltageDomain
Voltage domain this clock domain belongs to.
VoltageDomain * voltageDomain() const
Get the voltage domain.
Declaration of Statistics objects.
const uint32_t _domainID
Software recognizable id number for the domain, should be unique for each domain. ...
bool validPerfLevel(PerfLevel perf_level) const
Checks whether the performance level requested exists in the current domain configuration.
The derived clock domains provides the notion of a clock domain that is connected to a parent clock d...
PerfLevel numPerfLevels() const
Get the number of available performance levels for this clock domain.
const std::vector< Tick > freqOpPoints
List of possible frequency operational points, should be in descending order An empty list correspond...
uint64_t Tick
Tick count type.
ClockDomain & parent
Reference to the parent clock domain this clock domain derives its clock period from.
Stats::Value currentClock
Stat to report clock period of clock domain.
Helper class for objects that need to be clocked.
void updateClockPeriod()
Called by the parent clock domain to propagate changes.
void serialize(CheckpointOut &cp) const override
Serialize an object.
A VoltageDomain is used to group clock domains that operate under the same voltage.
SrcClockDomain(const Params *p)
The source clock domains provides the notion of a clock domain that is connected to a tunable clock s...
Tick clkPeriodAtPerfLevel(PerfLevel perf_level) const
static const DomainID emptyDomainID
std::vector< DerivedClockDomain * > children
Pointers to potential derived clock domains so we can propagate changes.
void unserialize(CheckpointIn &cp) override
Unserialize an object.
The ClockDomain provides clock to group of clocked objects bundled under the same clock domain...
std::vector< Clocked * > members
Pointers to members of this clock domain, so that when the clock period changes, we can update each m...
std::ostream CheckpointOut
PerfLevel perfLevel() const
ClockDomain(const Params *p, VoltageDomain *voltage_domain)
void registerWithClockDomain(Clocked *c)
Register a Clocked object with this ClockDomain.
Tick clkPeriodAtPerfLevel() const
DerivedClockDomain(const Params *p)
Tick _clockPeriod
Pre-computed clock period in ticks.
void regStats()
Register statistics for this object.
SrcClockDomainParams Params
PerfLevel _perfLevel
Current performance level the domain is set to.
Abstract superclass for simulation objects.
Tick clockPeriod() const
Get the clock period.