Source code for hwtLib.peripheral.ethernet.vldsynced_data_err_last
from hwt.interfaces.agents.vldSynced import VldSyncedAgent
from hwtSimApi.hdlSimulator import HdlSimulator
from hwt.interfaces.std import Signal, VldSynced, VectSignal
[docs]class VldSyncedDataErrLast(VldSynced):
"""
Interface with data, vld, err, last signal
.. hwt-autodoc::
"""
def _declr(self):
VldSynced._declr(self)
if self.DATA_WIDTH > 8:
self.mask = VectSignal(self.DATA_WIDTH // 8)
self.err = Signal()
self.last = Signal()
[docs] def _initSimAgent(self, sim: HdlSimulator):
self._ag = VldSyncedDataErrLastAgent(sim, self)
[docs]class VldSyncedDataErrLastAgent(VldSyncedAgent):
[docs] def __init__(self, sim: HdlSimulator, intf, allowNoReset=False):
VldSyncedAgent.__init__(self, sim, intf, allowNoReset=allowNoReset)
self.has_mask = hasattr(intf, "mask")
[docs] def get_data(self):
i = self.intf
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] def set_data(self, data):
i = self.intf
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)