Source code for hdlConvertorAst.to.hwt.expr
from copy import copy
from hdlConvertorAst.hdlAst import HdlOpType
from hdlConvertorAst.to.basic_hdl_sim_model.expr import ToBasicHdlSimModelExpr
from hdlConvertorAst.to.common import ASSOCIATIVITY
[docs]class ToHwtExpr(ToBasicHdlSimModelExpr):
OP_PRECEDENCE = copy(ToBasicHdlSimModelExpr.OP_PRECEDENCE)
OP_PRECEDENCE.update({
HdlOpType.DOWNTO: (1, ASSOCIATIVITY.L_TO_R),
})
GENERIC_BIN_OPS = copy(ToBasicHdlSimModelExpr.GENERIC_BIN_OPS)
GENERIC_BIN_OPS.update({
HdlOpType.DOWNTO: ":",
})
[docs] def visit_HdlOp(self, o):
"""
:type op: HdlOp
"""
op = o.fn
if op in (HdlOpType.AND_UNARY, HdlOpType.OR_UNARY, HdlOpType.XOR_UNARY):
ops = o.ops
assert len(ops) == 1, ops
w = self.out.write
if HdlOpType.AND_UNARY:
w("And(*")
elif op is HdlOpType.OR_UNARY:
w("Or(*")
elif op is HdlOpType.XOR_UNARY:
w("Xor(*(")
else:
raise NotImplementedError()
self.visit_iHdlExpr(ops[0])
w("))")
return
return ToBasicHdlSimModelExpr.visit_HdlOp(self, o)