Source code for hwt.synthesizer.rtlLevel.signalUtils.walkers
from hwt.doc_markers import internal
from hwt.hdl.operator import Operator
from hwt.hdl.operatorDefs import isEventDependentOp
from hwt.hdl.sensitivityCtx import SensitivityCtx
from hwt.synthesizer.rtlLevel.mainBases import RtlSignalBase
[docs]@internal
def discoverEventDependency(sig: RtlSignalBase):
"""
:return: generator of tuples (event operator, signal)
"""
try:
drivers = sig.drivers
except AttributeError:
return
if len(drivers) == 1:
d = drivers[0]
if isinstance(d, Operator):
if isEventDependentOp(d.operator):
yield (d.operator, d.operands[0])
else:
for op in d.operands:
yield from discoverEventDependency(op)
[docs]@internal
def discover_sensitivity_of_sig(signal: RtlSignalBase,
seen: set, ctx: SensitivityCtx):
casualSensitivity = set()
signal._walk_sensitivity(casualSensitivity, seen, ctx)
if not ctx.contains_ev_dependency:
# if event dependent sensitivity found do not add other sensitivity
ctx.extend(casualSensitivity)