Source code for hwtLib.commonHwIO.data_mask_last_hs
from hwt.hwIOs.agents.rdVldSync import HwIODataRdVldAgent
from hwt.hwIOs.std import HwIOVectSignal, HwIOSignal, HwIODataRdVld
from hwt.hwParam import HwParam
from hwtSimApi.hdlSimulator import HdlSimulator
from hwt.pyUtils.typingFuture import override
[docs]
class HwIODataMaskLastRdVld(HwIODataRdVld):
"""
HwIODataRdVld interface with data, mask, last signal.
.. hwt-autodoc::
"""
@override
def hwConfig(self):
self.MASK_GRANULARITY = HwParam(8)
HwIODataRdVld.hwConfig(self)
@override
def hwDeclr(self):
super(HwIODataMaskLastRdVld, self).hwDeclr()
assert self.DATA_WIDTH % self.MASK_GRANULARITY == 0, (
self.DATA_WIDTH, self.MASK_GRANULARITY)
self.USE_MASK = self.MASK_GRANULARITY != self.DATA_WIDTH
if self.USE_MASK:
self.mask = HwIOVectSignal(self.DATA_WIDTH // self.MASK_GRANULARITY)
self.last = HwIOSignal()
[docs]
@override
def _initSimAgent(self, sim: HdlSimulator):
self._ag = HwIODataMaskRdVldAgent(sim, self)
[docs]
class HwIODataMaskRdVldAgent(HwIODataRdVldAgent):
"""
Simulation agent for :class:`.HwIODataMaskLastRdVld` interface.
"""
[docs]
@override
def set_data(self, data):
i = self.hwIO
if data is None:
d, m, last = None, None, None
else:
d, m, last = data
i.mask.write(m)
i.data.write(d)
i.last.write(last)
[docs]
@override
def get_data(self):
i = self.hwIO
return i.data.read(), i.mask.read(), i.last.read()