Source code for hwtLib.commonHwIO.addr_data

from hwt.hwIO import HwIO
from hwt.hwIOs.agents.rdVldSync import HwIODataRdVldAgent
from hwt.hwIOs.std import HwIOVectSignal, HwIORdVldSync, HwIOSignal
from hwt.hwParam import HwParam
from hwt.pyUtils.typingFuture import override
from hwtSimApi.hdlSimulator import HdlSimulator
from ipCorePackager.constants import DIRECTION


[docs] class HwIOAddrData(HwIO): """ .. hwt-autodoc:: """ @override def hwConfig(self): self.ADDR_WIDTH = HwParam(32) self.DATA_WIDTH = HwParam(64) @override def hwDeclr(self): self.addr = HwIOVectSignal(self.ADDR_WIDTH) self.data = HwIOVectSignal(self.DATA_WIDTH, masterDir=DIRECTION.IN)
[docs] class HwIOAddrDataRdVld(HwIORdVldSync): """ Simple handshaked interface with address and data signal .. hwt-autodoc:: """ @override def hwConfig(self): self.ADDR_WIDTH = HwParam(8) self.DATA_WIDTH = HwParam(8) self.HAS_MASK = HwParam(False) @override def hwDeclr(self): super(HwIOAddrDataRdVld, self).hwDeclr() self.addr = HwIOVectSignal(self.ADDR_WIDTH) self.data = HwIOVectSignal(self.DATA_WIDTH) if self.HAS_MASK: assert self.DATA_WIDTH % 8 == 0, self.DATA_WIDTH self.mask = HwIOVectSignal(self.DATA_WIDTH // 8)
[docs] @override def _initSimAgent(self, sim: HdlSimulator): if self.HAS_MASK: self._ag = HwIOAddrDataMaskRdVldAgent(sim, self) else: self._ag = HwIOAddrDataRdVldAgent(sim, self)
[docs] class HwIOAddrDataVldRdVld(HwIOAddrDataRdVld): """ :see: :class:`.HwIOAddrDataRdVld` with a vld_flag signal .. hwt-autodoc:: """ @override def hwDeclr(self): super(HwIOAddrDataVldRdVld, self).hwDeclr() self.vld_flag = HwIOSignal()
[docs] @override def _initSimAgent(self, sim: HdlSimulator): self._ag = HwIOAddrDataVldAgent(sim, self)
[docs] class HwIOAddrDataBitMaskRdVld(HwIOAddrDataRdVld): """ :see: :class:`.HwIOAddrDataRdVld` with a mask signal :note: mask has 1b granularity .. hwt-autodoc:: """ @override def hwDeclr(self): super(HwIOAddrDataBitMaskRdVld, self).hwDeclr() self.mask = HwIOVectSignal(self.DATA_WIDTH)
[docs] @override def _initSimAgent(self, sim: HdlSimulator): self._ag = HwIOAddrDataMaskRdVldAgent(sim, self)
[docs] class HwIOAddrDataRdVldAgent(HwIODataRdVldAgent):
[docs] @override def set_data(self, data): i = self.hwIO if data is None: addr, d = None, None else: addr, d = data i.addr.write(addr) i.data.write(d)
[docs] @override def get_data(self): i = self.hwIO return i.addr.read(), i.data.read()
[docs] class HwIOAddrDataMaskRdVldAgent(HwIODataRdVldAgent):
[docs] @override def set_data(self, data): i = self.hwIO if data is None: addr, d, mask = None, None, None else: addr, d, mask = data i.addr.write(addr) i.data.write(d) i.mask.write(mask)
[docs] @override def get_data(self): i = self.hwIO return i.addr.read(), i.data.read(), i.mask.read()
[docs] class HwIOAddrDataVldAgent(HwIODataRdVldAgent):
[docs] @override def set_data(self, data): i = self.hwIO if data is None: addr, d, vld = None, None, None else: addr, d, vld = data i.addr.write(addr) i.data.write(d) i.vld_flag.write(vld)
[docs] @override def get_data(self): i = self.hwIO return i.addr.read(), i.data.read(), i.vld_flag.read()