summaryrefslogtreecommitdiff
path: root/python/m5/config.py
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2005-03-24 12:24:17 -0500
committerNathan Binkert <binkertn@umich.edu>2005-03-24 12:24:17 -0500
commiteeff53841a6cb6c3819b69543fae861fa84cc541 (patch)
tree5106a052f1cdcd5b382874240bc830ef3c56722a /python/m5/config.py
parent257be7434193c8a06e024f5fa9eca151025bda1e (diff)
downloadgem5-eeff53841a6cb6c3819b69543fae861fa84cc541.tar.xz
Add Frequency and Latency as new parameter types and use them
where we can python/m5/config.py: Add two new parameter types: Frequency and Latency. These will soon be an integral part of the tick is picosecond thing. If the value can be converted directly to an integer without any special tricks, we assume that the number is the exact value desired. Otherwise, we convert the number assuming that it is in Hz or s. python/m5/objects/Bus.mpy: Use the new Latency and Frequency types where we can --HG-- extra : convert_revision : b3cff6020db83fb819507c348451c98697d1cf27
Diffstat (limited to 'python/m5/config.py')
-rw-r--r--python/m5/config.py40
1 files changed, 38 insertions, 2 deletions
diff --git a/python/m5/config.py b/python/m5/config.py
index e097173f3..1af2c5e3e 100644
--- a/python/m5/config.py
+++ b/python/m5/config.py
@@ -27,7 +27,7 @@
from __future__ import generators
import os, re, sys, types, inspect
-from m5 import panic
+from m5 import panic, env
from convert import *
from multidict import multidict
@@ -1340,6 +1340,42 @@ class Enum(ParamType):
# "Constants"... handy aliases for various values.
#
+class Frequency(int,ParamType):
+ _cpp_param_decl = 'Tick'
+
+ def __new__(cls, value):
+ if isinstance(value, basestring):
+ val = int(env['FREQUENCY'] / toFrequency(value))
+ else:
+ val = toFrequency(value)
+ return super(cls, Frequency).__new__(cls, val)
+
+ def _convert(cls, value):
+ return cls(value)
+ _convert = classmethod(_convert)
+
+ def _string(cls, value):
+ return '%d' % value
+ _string = classmethod(_string)
+
+class Latency(int,ParamType):
+ _cpp_param_decl = 'Tick'
+ def __new__(cls, value):
+ if isinstance(value, basestring):
+ val = int(env['FREQUENCY'] * toLatency(value))
+ else:
+ val = toLatency(value)
+ return super(cls, Latency).__new__(cls, val)
+
+ def _convert(cls, value):
+ return cls(value)
+ _convert = classmethod(_convert)
+
+ def _string(cls, value):
+ return '%d' % value
+ _string = classmethod(_string)
+
+
# Some memory range specifications use this as a default upper bound.
MaxAddr = Addr.max
MaxTick = Tick.max
@@ -1383,6 +1419,6 @@ __all__ = ['ConfigNode', 'SimObject', 'ParamContext', 'Param', 'VectorParam',
'Int', 'Unsigned', 'Int8', 'UInt8', 'Int16', 'UInt16',
'Int32', 'UInt32', 'Int64', 'UInt64',
'Counter', 'Addr', 'Tick', 'Percent',
- 'MemorySize',
+ 'MemorySize', 'Frequency', 'Latency',
'Range', 'AddrRange', 'MaxAddr', 'MaxTick', 'AllMemory', 'NULL',
'NextEthernetAddr', 'instantiate']