Source code for hwtLib.handshaked.compBase

from typing import Type, Optional, List

from hwt.hwIOs.std import HwIODataRdVld, HwIORdVldSync, HwIOSignal
from hwt.hwParam import HwParam
from hwt.hwModule import HwModule
from hwt.hwIO import HwIO


[docs] class HandshakedCompBase(HwModule): """ Abstract class for components which has HwIODataRdVld interface as main """
[docs] def __init__(self, hshwIO: Type[HwIORdVldSync], hdlName:Optional[str]=None): """ :param hshwIO: class of interface which should be used as interface of this unit """ assert(issubclass(hshwIO, (HwIODataRdVld, HwIORdVldSync))), hshwIO self.hwIOCls = hshwIO HwModule.__init__(self, hdlName=hdlName)
def hwConfig(self): self.HWIO_CLS = HwParam(self.hwIOCls) self.hwIOCls.hwConfig(self)
[docs] @classmethod def get_valid_signal(cls, hwIO: HwIORdVldSync) -> HwIOSignal: return hwIO.vld
[docs] @classmethod def get_ready_signal(cls, hwIO: HwIORdVldSync) -> HwIOSignal: return hwIO.rd
[docs] def get_data(self, hwIO: HwIORdVldSync) -> List[HwIO]: rd = self.get_ready_signal(hwIO) vld = self.get_valid_signal(hwIO) return [ cHwIO for cHwIO in hwIO._hwIOs if (cHwIO is not rd) and (cHwIO is not vld) ]