ticks.py (12563:8d59ed22ae79) | ticks.py (13409:071d5425ce37) |
---|---|
1# Copyright (c) 2007 The Regents of The University of Michigan 2# All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer; 8# redistributions in binary form must reproduce the above copyright --- 17 unchanged lines hidden (view full) --- 26# 27# Authors: Nathan Binkert 28 29from __future__ import print_function 30 31import sys 32from m5.util import warn 33 | 1# Copyright (c) 2007 The Regents of The University of Michigan 2# All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer; 8# redistributions in binary form must reproduce the above copyright --- 17 unchanged lines hidden (view full) --- 26# 27# Authors: Nathan Binkert 28 29from __future__ import print_function 30 31import sys 32from m5.util import warn 33 |
34tps = 1.0e12 # default to 1 THz (1 Tick == 1 ps) 35tps_fixed = False # once set to true, can't be changed 36 37# fix the global frequency and tell C++ about it | 34# fix the global frequency |
38def fixGlobalFrequency(): 39 import _m5.core | 35def fixGlobalFrequency(): 36 import _m5.core |
40 global tps, tps_fixed 41 if not tps_fixed: 42 tps_fixed = True 43 _m5.core.setClockFrequency(int(tps)) 44 print("Global frequency set at %d ticks per second" % int(tps)) | 37 _m5.core.fixClockFrequency() |
45 46def setGlobalFrequency(ticksPerSecond): 47 from m5.util import convert | 38 39def setGlobalFrequency(ticksPerSecond): 40 from m5.util import convert |
41 import _m5.core |
|
48 | 42 |
49 global tps, tps_fixed 50 51 if tps_fixed: 52 raise AttributeError, \ 53 "Global frequency already fixed at %f ticks/s." % tps 54 | |
55 if isinstance(ticksPerSecond, (int, long)): 56 tps = ticksPerSecond 57 elif isinstance(ticksPerSecond, float): 58 tps = ticksPerSecond 59 elif isinstance(ticksPerSecond, str): 60 tps = round(convert.anyToFrequency(ticksPerSecond)) 61 else: 62 raise TypeError, \ 63 "wrong type '%s' for ticksPerSecond" % type(ticksPerSecond) | 43 if isinstance(ticksPerSecond, (int, long)): 44 tps = ticksPerSecond 45 elif isinstance(ticksPerSecond, float): 46 tps = ticksPerSecond 47 elif isinstance(ticksPerSecond, str): 48 tps = round(convert.anyToFrequency(ticksPerSecond)) 49 else: 50 raise TypeError, \ 51 "wrong type '%s' for ticksPerSecond" % type(ticksPerSecond) |
52 _m5.core.setClockFrequency(tps) |
|
64 65# how big does a rounding error need to be before we warn about it? 66frequency_tolerance = 0.001 # 0.1% 67 68def fromSeconds(value): | 53 54# how big does a rounding error need to be before we warn about it? 55frequency_tolerance = 0.001 # 0.1% 56 57def fromSeconds(value): |
58 import _m5.core 59 |
|
69 if not isinstance(value, float): 70 raise TypeError, "can't convert '%s' to type tick" % type(value) 71 72 # once someone needs to convert to seconds, the global frequency 73 # had better be fixed | 60 if not isinstance(value, float): 61 raise TypeError, "can't convert '%s' to type tick" % type(value) 62 63 # once someone needs to convert to seconds, the global frequency 64 # had better be fixed |
74 if not tps_fixed: | 65 if not _m5.core.clockFrequencyFixed(): |
75 raise AttributeError, \ 76 "In order to do conversions, the global frequency must be fixed" 77 78 if value == 0: 79 return 0 80 81 # convert the value from time to ticks | 66 raise AttributeError, \ 67 "In order to do conversions, the global frequency must be fixed" 68 69 if value == 0: 70 return 0 71 72 # convert the value from time to ticks |
82 value *= tps | 73 value *= _m5.core.getClockFrequency() |
83 84 int_value = int(round(value)) 85 err = (value - int_value) / value 86 if err > frequency_tolerance: 87 warn("rounding error > tolerance\n %f rounded to %d", value, 88 int_value) 89 return int_value 90 91__all__ = [ 'setGlobalFrequency', 'fixGlobalFrequency', 'fromSeconds', 92 'frequency_tolerance' ] | 74 75 int_value = int(round(value)) 76 err = (value - int_value) / value 77 if err > frequency_tolerance: 78 warn("rounding error > tolerance\n %f rounded to %d", value, 79 int_value) 80 return int_value 81 82__all__ = [ 'setGlobalFrequency', 'fixGlobalFrequency', 'fromSeconds', 83 'frequency_tolerance' ] |