clock_domain.hh (10021:9d6d630f830e) | clock_domain.hh (10249:6bbb7ae309ac) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2013 ARM Limited | 2 * Copyright (c) 2013-2014 ARM Limited |
3 * Copyright (c) 2013 Cornell University 4 * All rights reserved 5 * 6 * The license below extends only to copyright in the software and shall 7 * not be construed as granting a license to any other intellectual 8 * property including but not limited to intellectual property relating 9 * to a hardware implementation of the functionality of the software 10 * licensed hereunder. You may use the software subject to the license --- 22 unchanged lines hidden (view full) --- 33 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 36 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 * 38 * Authors: Vasileios Spiliopoulos 39 * Akash Bagdia 40 * Christopher Torng | 3 * Copyright (c) 2013 Cornell University 4 * All rights reserved 5 * 6 * The license below extends only to copyright in the software and shall 7 * not be construed as granting a license to any other intellectual 8 * property including but not limited to intellectual property relating 9 * to a hardware implementation of the functionality of the software 10 * licensed hereunder. You may use the software subject to the license --- 22 unchanged lines hidden (view full) --- 33 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 34 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 35 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 36 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 * 38 * Authors: Vasileios Spiliopoulos 39 * Akash Bagdia 40 * Christopher Torng |
41 * Stephan Diestelhorst |
|
41 */ 42 43/** 44 * @file 45 * ClockDomain declarations. 46 */ 47 48#ifndef __SIM_CLOCK_DOMAIN_HH__ --- 65 unchanged lines hidden (view full) --- 114 115 void regStats(); 116 117 /** 118 * Get the clock period. 119 * 120 * @return Clock period in ticks 121 */ | 42 */ 43 44/** 45 * @file 46 * ClockDomain declarations. 47 */ 48 49#ifndef __SIM_CLOCK_DOMAIN_HH__ --- 65 unchanged lines hidden (view full) --- 115 116 void regStats(); 117 118 /** 119 * Get the clock period. 120 * 121 * @return Clock period in ticks 122 */ |
122 inline Tick clockPeriod() const { return _clockPeriod; } | 123 Tick clockPeriod() const { return _clockPeriod; } |
123 124 /** 125 * Register a ClockedObject to this ClockDomain. 126 * 127 * @param ClockedObject to add as a member 128 */ 129 void registerWithClockDomain(ClockedObject *c) 130 { --- 10 unchanged lines hidden (view full) --- 141 inline VoltageDomain *voltageDomain() const { return _voltageDomain; } 142 143 144 /** 145 * Get the current voltage this clock domain operates at. 146 * 147 * @return Voltage applied to the clock domain 148 */ | 124 125 /** 126 * Register a ClockedObject to this ClockDomain. 127 * 128 * @param ClockedObject to add as a member 129 */ 130 void registerWithClockDomain(ClockedObject *c) 131 { --- 10 unchanged lines hidden (view full) --- 142 inline VoltageDomain *voltageDomain() const { return _voltageDomain; } 143 144 145 /** 146 * Get the current voltage this clock domain operates at. 147 * 148 * @return Voltage applied to the clock domain 149 */ |
149 inline double voltage() const; | 150 double voltage() const; |
150 151 /** 152 * Add a derived domain. 153 * 154 * @param Derived domain to add as a child 155 */ 156 void addDerivedDomain(DerivedClockDomain *clock_domain) 157 { children.push_back(clock_domain); } 158 159}; 160 161/** 162 * The source clock domains provides the notion of a clock domain that is 163 * connected to a tunable clock source. It maintains the clock period and | 151 152 /** 153 * Add a derived domain. 154 * 155 * @param Derived domain to add as a child 156 */ 157 void addDerivedDomain(DerivedClockDomain *clock_domain) 158 { children.push_back(clock_domain); } 159 160}; 161 162/** 163 * The source clock domains provides the notion of a clock domain that is 164 * connected to a tunable clock source. It maintains the clock period and |
164 * provides methods for setting/getting the clock. | 165 * provides methods for setting/getting the clock and configuration parameters 166 * for clock domain that handler is going to manage. This includes frequency 167 * values at various performance levels, domain id, and current performance 168 * level. Note that a performance level as requested by the software corresponds 169 * to one of the frequency operational points the domain can operate at. |
165 */ 166class SrcClockDomain : public ClockDomain 167{ 168 169 public: 170 171 typedef SrcClockDomainParams Params; 172 SrcClockDomain(const Params *p); 173 174 /** 175 * Set new clock value 176 * @param clock The new clock period in ticks 177 */ 178 void clockPeriod(Tick clock_period); 179 180 // Explicitly import the otherwise hidden clockPeriod 181 using ClockDomain::clockPeriod; | 170 */ 171class SrcClockDomain : public ClockDomain 172{ 173 174 public: 175 176 typedef SrcClockDomainParams Params; 177 SrcClockDomain(const Params *p); 178 179 /** 180 * Set new clock value 181 * @param clock The new clock period in ticks 182 */ 183 void clockPeriod(Tick clock_period); 184 185 // Explicitly import the otherwise hidden clockPeriod 186 using ClockDomain::clockPeriod; |
187 188 typedef int32_t DomainID; 189 static const DomainID emptyDomainID = -1; 190 191 /** 192 * @return the domainID of the domain 193 */ 194 uint32_t domainID() const { return _domainID; } 195 196 typedef uint32_t PerfLevel; 197 /** 198 * Checks whether the performance level requested exists in the current 199 * domain configuration 200 * 201 * @param the target performance level of the domain 202 * 203 * @return validity status of the given performance level 204 */ 205 bool validPerfLevel(PerfLevel perf_level) const { 206 return perf_level < numPerfLevels(); 207 } 208 209 /** 210 * Sets the current performance level of the domain 211 * 212 * @param perf_level the target performance level 213 */ 214 void perfLevel(PerfLevel perf_level); 215 216 /** 217 * @return the current performance level of the domain 218 */ 219 PerfLevel perfLevel() const { return _perfLevel; } 220 221 /** 222 * Get the number of available performance levels for this clock domain. 223 * 224 * @return Number of perf levels configured for this domain. 225 */ 226 PerfLevel numPerfLevels() const {return freqOpPoints.size();} 227 228 /** 229 * @returns the clock period (expressed in ticks) for the current 230 * performance level 231 */ 232 Tick clkPeriodAtPerfLevel() const { return freqOpPoints[perfLevel()]; } 233 234 Tick clkPeriodAtPerfLevel(PerfLevel perf_level) const 235 { 236 assert(validPerfLevel(perf_level)); 237 return freqOpPoints[perf_level]; 238 } 239 240 void serialize(std::ostream &os); 241 void unserialize(Checkpoint *cp, const std::string §ion); 242 243 private: 244 /** 245 * List of possible frequency operational points, should be in 246 * descending order 247 * An empty list corresponds to default frequency specified for its 248 * clock domain, overall implying NO DVFS 249 */ 250 const std::vector<Tick> freqOpPoints; 251 252 /** 253 * Software recognizable id number for the domain, should be unique for 254 * each domain 255 */ 256 const uint32_t _domainID; 257 258 /** 259 * Current performance level the domain is set to. 260 * The performance level corresponds to one selected frequency (and related 261 * voltage) from the supplied list of frequencies, with perfLevel = 0 being 262 * the fastest performance state. 263 */ 264 PerfLevel _perfLevel; |
|
182}; 183 184/** 185 * The derived clock domains provides the notion of a clock domain 186 * that is connected to a parent clock domain that can either be a 187 * source clock domain or a derived clock domain. It maintains the 188 * clock divider and provides methods for getting the clock. 189 */ --- 30 unchanged lines hidden --- | 265}; 266 267/** 268 * The derived clock domains provides the notion of a clock domain 269 * that is connected to a parent clock domain that can either be a 270 * source clock domain or a derived clock domain. It maintains the 271 * clock divider and provides methods for getting the clock. 272 */ --- 30 unchanged lines hidden --- |