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)
]