Source code for hwtLib.avalon.st

from hwt.interfaces.agents.handshaked import HandshakedAgent
from hwt.interfaces.std import Handshaked, VectSignal, Signal
from hwt.synthesizer.param import Param
from hwtSimApi.hdlSimulator import HdlSimulator


[docs]class AvalonST(Handshaked): """ Avalon stream interface :note: handshaked stream with cahnnel, error, sof, eof signal .. hwt-autodoc:: """ def _config(self): Handshaked._config(self) self.CHANNEL_WIDTH = Param(1) self.ERROR_WIDTH = Param(1) def _declr(self): # fundamentals self.channel = VectSignal(self.CHANNEL_WIDTH) self.error = VectSignal(self.ERROR_WIDTH) Handshaked._declr(self) # packet transfer signals self.endOfPacket = Signal() self.startOfPacket = Signal()
[docs] def _initSimAgent(self, sim: HdlSimulator): self._ag = AvalonSTAgent(sim, self)
[docs]class AvalonSTAgent(HandshakedAgent): """ Simulation Agent for AvalonST interface Data is stored in .data property and data format is tuple (channel, data, error, startOfPacket, endOfPacket) """
[docs] def get_data(self): intf = self.intf return (intf.channel.read(), intf.data.read(), intf.error.read(), intf.startOfPacket.read(), intf.endOfPacket.read())
[docs] def set_data(self, data): intf = self.intf if data is None: intf.channel.write(None) intf.data.write(None) intf.error.write(None) intf.endOfPacket.write(None) intf.startOfPacket.write(None) else: channel, data, error, startOfPacket, endOfPacket = data intf.channel.write(channel) intf.data.write(data) intf.error.write(error) intf.endOfPacket.write(endOfPacket) intf.startOfPacket.write(startOfPacket)