Source code for hwtLib.peripheral.ethernet.vldsynced_data_err_last
from hwt.hwIOs.agents.vldSync import HwIODataVldAgent
from hwt.hwIOs.std import HwIOSignal, HwIODataVld, HwIOVectSignal
from hwt.pyUtils.typingFuture import override
from hwtSimApi.hdlSimulator import HdlSimulator
[docs]
class VldSyncedDataErrLast(HwIODataVld):
"""
Interface with data, vld, err, last signal
.. hwt-autodoc::
"""
@override
def hwDeclr(self):
HwIODataVld.hwDeclr(self)
if self.DATA_WIDTH > 8:
self.mask = HwIOVectSignal(self.DATA_WIDTH // 8)
self.err = HwIOSignal()
self.last = HwIOSignal()
[docs]
@override
def _initSimAgent(self, sim: HdlSimulator):
self._ag = VldSyncedDataErrLastAgent(sim, self)
[docs]
class VldSyncedDataErrLastAgent(HwIODataVldAgent):
[docs]
def __init__(self, sim: HdlSimulator, hwIO, allowNoReset=False):
HwIODataVldAgent.__init__(self, sim, hwIO, allowNoReset=allowNoReset)
self.has_mask = hasattr(hwIO, "mask")
[docs]
@override
def get_data(self):
i = self.hwIO
if self.has_mask:
return (i.data.read(), i.mask.read(), i.err.read(), i.last.read())
else:
return (i.data.read(), i.err.read(), i.last.read())
[docs]
@override
def set_data(self, data):
i = self.hwIO
if self.has_mask:
if data is None:
data = (None, None, None, None)
d, m, e, last = data
i.mask.write(m)
else:
if data is None:
data = (None, None, None)
d, e, last = data
i.data.write(d)
i.err.write(e)
i.last.write(last)