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)