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)