Source code for hwtLib.common_nonstd_interfaces.addr_data_hs_bidir

from hwt.interfaces.std import VectSignal, HandshakeSync
from hwt.synthesizer.param import Param
from hwtLib.handshaked.intfBiDirectional import HandshakedBiDirectional, \
    HandshakedBiDirectionalAgent
from ipCorePackager.constants import DIRECTION
from hwtSimApi.hdlSimulator import HdlSimulator


[docs]class AddrOutDataInHs(HandshakedBiDirectional): """ .. hwt-autodoc:: """ def _config(self): self.ADDR_WIDTH = Param(32) self.DATA_WIDTH = Param(32) def _declr(self): self.addr = VectSignal(self.ADDR_WIDTH) self.data = VectSignal(self.DATA_WIDTH, masterDir=DIRECTION.IN) HandshakeSync._declr(self)
[docs] def _initSimAgent(self, sim: HdlSimulator): self._ag = AddrOutDataInHsAgent(sim, self)
[docs]class AddrOutDataInHsAgent(HandshakedBiDirectionalAgent): """ Simulation agent for :class:`.AddrOutDataInHs` interface """
[docs] def onMonitorReady(self): d = self.dinData.popleft() self.intf.data.write(d)
[docs] def onDriverWriteAck(self): d = self.intf.data.read() self.dinData.append(d)
[docs] def get_data(self): return self.intf.addr.read()
[docs] def set_data(self, data): self.intf.addr.write(data)
[docs]class AddrInOutDataInHs(HandshakedBiDirectional): """ .. hwt-autodoc:: """ def _config(self): self.ADDR_WIDTH = Param(32) self.DATA_WIDTH = Param(32) def _declr(self): self.addrIn = VectSignal(self.ADDR_WIDTH, masterDir=DIRECTION.IN) self.addrOut = VectSignal(self.ADDR_WIDTH) self.data = VectSignal(self.DATA_WIDTH, masterDir=DIRECTION.IN) HandshakeSync._declr(self)
[docs] def _initSimAgent(self, sim: HdlSimulator): self._ag = AddrInOutDataInHsAgent(sim, self)
[docs]class AddrInOutDataInHsAgent(HandshakedBiDirectionalAgent): """ Simulation agent for :class:`.AddrInOutDataInHs` interface """
[docs] def onMonitorReady(self): a, d = self.dinData.popleft() self.intf.addrIn.write(a) self.intf.data.write(d)
[docs] def onDriverWriteAck(self): a = self.intf.data.read() d = self.intf.data.read() self.dinData.append((a, d))
[docs] def get_data(self): return self.intf.addrOut.read()
[docs] def set_data(self, data): self.intf.addrOut.write(data)
[docs]class AddrInDataOutHs(HandshakedBiDirectional): """ .. hwt-autodoc:: """ def _config(self): self.ADDR_WIDTH = Param(32) self.DATA_WIDTH = Param(32) def _declr(self): self.addr = VectSignal(self.ADDR_WIDTH, masterDir=DIRECTION.IN) self.data = VectSignal(self.DATA_WIDTH) HandshakeSync._declr(self)
[docs] def _initSimAgent(self, sim: HdlSimulator): self._ag = AddrInDataOutHsAgent(sim, self)
[docs]class AddrInDataOutHsAgent(HandshakedBiDirectionalAgent): """ Simulation agent for :class:`.AddrDataOutInHs` interface """
[docs] def onMonitorReady(self): d = self.dinData.popleft() self.intf.addr.write(d)
[docs] def onDriverWriteAck(self): d = self.intf.addr.read() self.dinData.append(d)
[docs] def get_data(self): return self.intf.data.read()
[docs] def set_data(self, data): self.intf.data.write(data)