From eeff53841a6cb6c3819b69543fae861fa84cc541 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Thu, 24 Mar 2005 12:24:17 -0500 Subject: 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 --- python/m5/config.py | 40 ++++++++++++++++++++++++++++++++++++++-- python/m5/objects/Bus.mpy | 2 +- 2 files changed, 39 insertions(+), 3 deletions(-) (limited to 'python/m5') 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'] diff --git a/python/m5/objects/Bus.mpy b/python/m5/objects/Bus.mpy index 025d69785..330a2c82b 100644 --- a/python/m5/objects/Bus.mpy +++ b/python/m5/objects/Bus.mpy @@ -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") -- cgit v1.2.3