Source code for hwt.serializer.hwt.ops

from hdlConvertorAst.hdlAst._expr import HdlOp, HdlValueId
from hdlConvertorAst.translate.verilog_to_basic_hdl_sim_model.utils import hdl_getattr, \
    hdl_call
from hdlConvertorAst.translate.common.name_scope import LanguageKeyword
from hwt.hdl.operator import Operator
from hwt.hdl.operatorDefs import AllOps
from hwt.serializer.hwt.context import ValueWidthRequirementScope
from hwt.serializer.simModel.value import ToHdlAstSimModel_value


[docs]class ToHdlAstHwt_ops(): CONCAT = HdlValueId("Concat", obj=LanguageKeyword()) op_transl_dict = ToHdlAstSimModel_value.op_transl_dict _cast_ops = ToHdlAstSimModel_value._cast_ops
[docs] def as_hdl_Operator(self, op: Operator): ops = op.operands o = op.operator with ValueWidthRequirementScope(self, o == AllOps.CONCAT): if o in self._cast_ops: op0 = hdl_getattr(self.as_hdl(ops[0]), "_reinterpret_cast") op1 = self.as_hdl_HdlType(op.result._dtype) return hdl_call(op0, [op1, ]) elif o == AllOps.EQ: return hdl_call(hdl_getattr(self.as_hdl(ops[0]), "_eq"), [self.as_hdl(ops[1])]) elif o == AllOps.CONCAT: return hdl_call(self.CONCAT, [self.as_hdl(o2) for o2 in ops]) elif o == AllOps.TERNARY: cond, op0, op1 = ops cond = self.as_hdl(cond) with ValueWidthRequirementScope(self, True): op0 = self.as_hdl(op0) op1 = self.as_hdl(op1) return hdl_call(hdl_getattr(cond, "_ternary"), [op0, op1]) else: o = self.op_transl_dict[o] return HdlOp(o, [self.as_hdl(o2) for o2 in ops])