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
This commit is contained in:
Nathan Binkert 2005-03-24 12:24:17 -05:00
parent 257be74341
commit eeff53841a
2 changed files with 39 additions and 3 deletions

View file

@ -27,7 +27,7 @@
from __future__ import generators from __future__ import generators
import os, re, sys, types, inspect import os, re, sys, types, inspect
from m5 import panic from m5 import panic, env
from convert import * from convert import *
from multidict import multidict from multidict import multidict
@ -1340,6 +1340,42 @@ class Enum(ParamType):
# "Constants"... handy aliases for various values. # "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. # Some memory range specifications use this as a default upper bound.
MaxAddr = Addr.max MaxAddr = Addr.max
MaxTick = Tick.max MaxTick = Tick.max
@ -1383,6 +1419,6 @@ __all__ = ['ConfigNode', 'SimObject', 'ParamContext', 'Param', 'VectorParam',
'Int', 'Unsigned', 'Int8', 'UInt8', 'Int16', 'UInt16', 'Int', 'Unsigned', 'Int8', 'UInt8', 'Int16', 'UInt16',
'Int32', 'UInt32', 'Int64', 'UInt64', 'Int32', 'UInt32', 'Int64', 'UInt64',
'Counter', 'Addr', 'Tick', 'Percent', 'Counter', 'Addr', 'Tick', 'Percent',
'MemorySize', 'MemorySize', 'Frequency', 'Latency',
'Range', 'AddrRange', 'MaxAddr', 'MaxTick', 'AllMemory', 'NULL', 'Range', 'AddrRange', 'MaxAddr', 'MaxTick', 'AllMemory', 'NULL',
'NextEthernetAddr', 'instantiate'] 'NextEthernetAddr', 'instantiate']

View file

@ -2,5 +2,5 @@ from BaseHier import BaseHier
simobj Bus(BaseHier): simobj Bus(BaseHier):
type = 'Bus' 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") width = Param.Int("bus width in bytes")