Source code for hwt.synthesizer.param

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from hwt.hdl.types.defs import INT, STR, BOOL, FLOAT64
from hwt.hdl.value import HValue


[docs]class Param(): """ Class used to mark object as a configuration of HDL module. ( The parameter instance will not appear on :class:`hwt.synthesizer.unit.Unit` instance, instead the value will appear. The parameter instance will be stored in ._params property of Unit/Interface object) :ivar ~._initval: value of the parameter which should be used for intialization :attention: the actual value is then store on parent object instance :ivar ~._name: name of parameter on parent Unit/Interface instance :ivar ~._parent: parent object instance """ __slots__ = ["_initval", "_name", "hdl_name", "_parent"]
[docs] def __init__(self, initval): self._initval = initval self._name = None self.hdl_name = None self._parent = None
[docs] def get_hdl_type(self): v = self.get_value() INT32_MAX = 2 ** (32 - 1) - 1 INT32_MIN = -2 ** (32 - 1) if isinstance(v, HValue): return v._dtype elif isinstance(v, bool): return BOOL elif isinstance(v, str): return STR elif isinstance(v, int) and v >= INT32_MIN and v <= INT32_MAX: return INT elif isinstance(v, float): return FLOAT64 else: return None
[docs] def get_hdl_value(self): t = self.get_hdl_type() v = self.get_value() if t is None: t = STR v = t.from_py(str(v)) else: if not isinstance(v, HValue): v = t.from_py(v) return v
[docs] def get_value(self): return getattr(self._parent, self._name)
[docs] def set_value(self, v): setattr(self._parent, self._name, v)
def __repr__(self): return "<%s at 0x%x %s=%s>" % ( self.__class__.__name__, id(self), "<unspecified name>" if self._name is None else self._name, repr(self.get_value()))