Add Frequency and Latency as new parameter types and use them
authorNathan Binkert <binkertn@umich.edu>
Thu, 24 Mar 2005 17:24:17 +0000 (12:24 -0500)
committerNathan Binkert <binkertn@umich.edu>
Thu, 24 Mar 2005 17:24:17 +0000 (12:24 -0500)
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

python/m5/config.py
python/m5/objects/Bus.mpy

index e097173f3a0c037fc488cf26a47666c5f3a0d0f8..1af2c5e3e971407d7e5200f06043be10ade1133a 100644 (file)
@@ -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']
index 025d69785cfc7eafca9193c1752ed71d2f77dc9f..330a2c82b62d3f6458daf76b3e6043098a8fa444 100644 (file)
@@ -2,5 +2,5 @@ from BaseHier import BaseHier
 
 simobj Bus(BaseHier):
     type = 'Bus'
-    clock_ratio = Param.Int("ratio of CPU to bus frequency")
+    clock_ratio = Param.Frequency("ratio of CPU to bus frequency")
     width = Param.Int("bus width in bytes")