Source code for hwtLib.common_nonstd_interfaces.data_mask_last_hs
from hwt.interfaces.agents.handshaked import HandshakedAgent
from hwt.interfaces.std import VectSignal, Signal, Handshaked
from hwt.synthesizer.param import Param
from hwtSimApi.hdlSimulator import HdlSimulator
[docs]class DataMaskLastHs(Handshaked):
"""
Handshaked interface with data, mask, last signal.
.. hwt-autodoc::
"""
def _config(self):
self.MASK_GRANULARITY = Param(8)
Handshaked._config(self)
def _declr(self):
super(DataMaskLastHs, self)._declr()
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 = VectSignal(self.DATA_WIDTH // self.MASK_GRANULARITY)
self.last = Signal()
[docs] def _initSimAgent(self, sim: HdlSimulator):
self._ag = DataMaskHsAgent(sim, self)
[docs]class DataMaskHsAgent(HandshakedAgent):
"""
Simulation agent for :class:`.DataMaskLastHs` interface.
"""
[docs] def set_data(self, data):
i = self.intf
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] def get_data(self):
i = self.intf
return i.data.read(), i.mask.read(), i.last.read()