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:
parent
257be74341
commit
eeff53841a
2 changed files with 39 additions and 3 deletions
|
@ -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']
|
||||||
|
|
|
@ -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")
|
||||||
|
|
Loading…
Reference in a new issue