Source code for hwtLib.commonHwIO.addr_data_bidir
from hwt.hwIOs.std import HwIOVectSignal, HwIORdVldSync
from hwt.hwParam import HwParam
from hwt.pyUtils.typingFuture import override
from hwtLib.handshaked.hwIOBiDirectional import HwIORdVldSyncBiDirectionalData, \
HwIORdVldSyncBiDirectionalDataAgent
from hwtSimApi.hdlSimulator import HdlSimulator
from ipCorePackager.constants import DIRECTION
[docs]
class HwIOAddrOutDataInRdVld(HwIORdVldSyncBiDirectionalData):
"""
.. hwt-autodoc::
"""
@override
def hwConfig(self):
self.ADDR_WIDTH = HwParam(32)
self.DATA_WIDTH = HwParam(32)
@override
def hwDeclr(self):
self.addr = HwIOVectSignal(self.ADDR_WIDTH)
self.data = HwIOVectSignal(self.DATA_WIDTH, masterDir=DIRECTION.IN)
HwIORdVldSync.hwDeclr(self)
[docs]
@override
def _initSimAgent(self, sim: HdlSimulator):
self._ag = HwIOAddrOutDataInRdVldAgent(sim, self)
[docs]
class HwIOAddrOutDataInRdVldAgent(HwIORdVldSyncBiDirectionalDataAgent):
"""
Simulation agent for :class:`.HwIOAddrOutDataInRdVld` interface
"""
[docs]
@override
def onMonitorReady(self):
d = self.dinData.popleft()
self.hwIO.data.write(d)
[docs]
@override
def onDriverWriteAck(self):
d = self.hwIO.data.read()
self.dinData.append(d)
[docs]
@override
def get_data(self):
return self.hwIO.addr.read()
[docs]
@override
def set_data(self, data):
self.hwIO.addr.write(data)
[docs]
class HwIOAddrInOutDataInRdVld(HwIORdVldSyncBiDirectionalData):
"""
.. hwt-autodoc::
"""
@override
def hwConfig(self):
self.ADDR_WIDTH = HwParam(32)
self.DATA_WIDTH = HwParam(32)
@override
def hwDeclr(self):
self.addrIn = HwIOVectSignal(self.ADDR_WIDTH, masterDir=DIRECTION.IN)
self.addrOut = HwIOVectSignal(self.ADDR_WIDTH)
self.data = HwIOVectSignal(self.DATA_WIDTH, masterDir=DIRECTION.IN)
HwIORdVldSync.hwDeclr(self)
[docs]
@override
def _initSimAgent(self, sim: HdlSimulator):
self._ag = HwIOAddrInOutDataInRdVldAgent(sim, self)
[docs]
class HwIOAddrInOutDataInRdVldAgent(HwIORdVldSyncBiDirectionalDataAgent):
"""
Simulation agent for :class:`.HwIOAddrInOutDataInRdVld` interface
"""
[docs]
@override
def onMonitorReady(self):
a, d = self.dinData.popleft()
self.hwIO.addrIn.write(a)
self.hwIO.data.write(d)
[docs]
@override
def onDriverWriteAck(self):
a = self.hwIO.data.read()
d = self.hwIO.data.read()
self.dinData.append((a, d))
[docs]
@override
def get_data(self):
return self.hwIO.addrOut.read()
[docs]
@override
def set_data(self, data):
self.hwIO.addrOut.write(data)
[docs]
class HwIOAddrInDataOutRdVld(HwIORdVldSyncBiDirectionalData):
"""
.. hwt-autodoc::
"""
@override
def hwConfig(self):
self.ADDR_WIDTH = HwParam(32)
self.DATA_WIDTH = HwParam(32)
@override
def hwDeclr(self):
self.addr = HwIOVectSignal(self.ADDR_WIDTH, masterDir=DIRECTION.IN)
self.data = HwIOVectSignal(self.DATA_WIDTH)
HwIORdVldSync.hwDeclr(self)
[docs]
@override
def _initSimAgent(self, sim: HdlSimulator):
self._ag = HwIOAddrInDataOutRdVldAgent(sim, self)
[docs]
class HwIOAddrInDataOutRdVldAgent(HwIORdVldSyncBiDirectionalDataAgent):
"""
Simulation agent for :class:`.AddrDataOutInHs` interface
"""
[docs]
@override
def onMonitorReady(self):
d = self.dinData.popleft()
self.hwIO.addr.write(d)
[docs]
@override
def onDriverWriteAck(self):
d = self.hwIO.addr.read()
self.dinData.append(d)
[docs]
@override
def get_data(self):
return self.hwIO.data.read()
[docs]
@override
def set_data(self, data):
self.hwIO.data.write(data)