Source code for hwtLib.logic.rtlSignalBuilder

from typing import Optional

from hwt.synthesizer.rtlLevel.rtlSignal import RtlSignal


[docs] class RtlSignalBuilder():
[docs] @staticmethod def buildAndOptional(a:Optional[RtlSignal], b:Optional[RtlSignal]): if a is None: if b is None: return None else: return b else: if b is None or a is b: return a else: return b & a
[docs] @staticmethod def buildOrOptional(a:Optional[RtlSignal], b:Optional[RtlSignal]): if a is None: if b is None: return None else: return b else: if b is None or a is b: return a else: return b | a
[docs] @staticmethod def buildOrNegatedMaskOptional(a:Optional[RtlSignal], aMask:Optional[RtlSignal]): if a is None: if aMask is None: return None else: return ~aMask else: if aMask is None: return a else: return a & ~aMask
[docs] @staticmethod def buildOrWithNegatedMaskedOptional( a:Optional[RtlSignal], b:Optional[RtlSignal], bMask:Optional[RtlSignal]): """ :return: a | (b & ~bMask) where every member can be None """ if a is None: if bMask is None: if b is None: return None else: return b else: return b & ~bMask else: if a is b: return a elif bMask is None: return a | b else: return a | (b & ~bMask)
[docs] @staticmethod def buildAndNegatedMaskedOptional(a:Optional[RtlSignal], b:Optional[RtlSignal], bMask:Optional[RtlSignal]): if a is None: if bMask is None or b is bMask: return b elif b is None: return None else: return b & ~bMask else: if bMask is None: if b is None or a is b: return a else: return a & b else: if b is None or b is bMask: return a & ~bMask else: return a & (b & ~bMask)