Source code for hwtLib.commonHwIO.index_key_hs

from typing import Union, Tuple

from hwt.hwIOs.agents.rdVldSync import HwIODataRdVldAgent
from hwt.hwIOs.std import HwIODataRdVld, HwIORdVldSync, HwIOVectSignal
from hwt.hwParam import HwParam
from hwt.pyUtils.typingFuture import override
from hwtLib.handshaked.hwIOBiDirectional import HwIORdVldSyncBiDirectionalDataAgent
from hwtSimApi.hdlSimulator import HdlSimulator
from ipCorePackager.constants import DIRECTION


[docs] class HwIOIndexKeyRdVld(HwIODataRdVld): """ .. hwt-autodoc:: """ @override def hwConfig(self): self.INDEX_WIDTH = HwParam(4) self.KEY_WIDTH = HwParam(4) @override def hwDeclr(self): HwIORdVldSync.hwDeclr(self) if self.KEY_WIDTH: self.key = HwIOVectSignal(self.KEY_WIDTH) self.index = HwIOVectSignal(self.INDEX_WIDTH)
[docs] @override def _initSimAgent(self, sim: HdlSimulator): self._ag = HwIOIndexKeyRdVldAgent(sim, self)
[docs] class HwIOIndexKeyRdVldAgent(HwIODataRdVldAgent):
[docs] @override def get_data(self) -> Union[Tuple[int, int], int]: i = self.hwIO if i.KEY_WIDTH: return (i.key.read(), i.index.read()) else: return i.index.read()
[docs] @override def set_data(self, data: Union[Tuple[int, int], int]): hwIO = self.hwIO if hwIO.KEY_WIDTH: if data is None: k = None i = None else: k, i = data hwIO.key.write(k) else: i = data hwIO.index.write(i)
[docs] class HwIOIndexKeyInRdVld(HwIODataRdVld): """ .. hwt-autodoc:: """ @override def hwConfig(self): self.INDEX_WIDTH = HwParam(4) self.KEY_WIDTH = HwParam(4) @override def hwDeclr(self): HwIORdVldSync.hwDeclr(self) if self.KEY_WIDTH: self.key = HwIOVectSignal(self.KEY_WIDTH, masterDir=DIRECTION.IN) self.index = HwIOVectSignal(self.INDEX_WIDTH)
[docs] @override def _initSimAgent(self, sim: HdlSimulator): self._ag = HwIOIndexKeyInRdVldAgent(sim, self)
[docs] class HwIOIndexKeyInRdVldAgent(HwIORdVldSyncBiDirectionalDataAgent):
[docs] @override def onMonitorReady(self): "write din" i = self.hwIO if i.KEY_WIDTH: d = self.dinData.popleft() i.key.write(d)
[docs] @override def onDriverWriteAck(self): "read din" i = self.hwIO if i.KEY_WIDTH: d = i.key.read() self.dinData.append(d)
[docs] @override def get_data(self) -> Union[Tuple[int, int], int]: return self.hwIO.index.read()
[docs] @override def set_data(self, data: Union[Tuple[int, int], int]): self.hwIO.index.write(data)