Source code for hwt.serializer.simModel.types

from hdlConvertorAst.hdlAst import HdlValueId, HdlValueInt
from hdlConvertorAst.translate.verilog_to_basic_hdl_sim_model.utils import hdl_call, \
    hdl_getattr
from hdlConvertorAst.translate.common.name_scope import LanguageKeyword
from hwt.hdl.types.bits import Bits
from hwt.hdl.types.slice import HSlice
from pyMathBitPrecise.bits3t import Bits3t


[docs]class ToHdlAstSimModel_types(): """ part of ToHdlAstSimModel responsible for type serialization """ SELF = HdlValueId("self", obj=LanguageKeyword()) BITS3T = HdlValueId("Bits3t", obj=Bits3t) SLICE = HdlValueId("slice", obj=slice)
[docs] def as_hdl_HdlType_bits(self, typ: Bits, declaration=False): assert not declaration w = typ.bit_length() if isinstance(w, int): pass else: w = int(w) return hdl_call(self.BITS3T, [HdlValueInt(w, None, None), HdlValueInt(int(bool(typ.signed)), None, None)])
[docs] def as_hdl_HdlType_slice(self, typ: HSlice, declaration=False): if declaration: raise NotImplementedError() else: return self.SLICE
[docs] def as_hdl_HdlType_array(self, typ, declaration=False): if declaration: return super(ToHdlAstSimModel_types, self).as_hdl_HdlType_array(typ, declaration=declaration) else: t_name = self.name_scope.get_object_name(typ) return hdl_getattr(self.SELF, t_name)
[docs] def as_hdl_HdlType_enum(self, typ, declaration=False): if declaration: return super(ToHdlAstSimModel_types, self).as_hdl_HdlType_enum(typ, declaration=True) else: t_name = self.name_scope.get_object_name(typ) return hdl_getattr(self.SELF, t_name)