Source code for hwtLib.mem.cuckooHashTable_intf

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


[docs] class HwIOCuckooInsert(HwIORdVldSync): """ Cuckoo hash insert interface """ @override def hwConfig(self): self.KEY_WIDTH = HwParam(8) self.DATA_WIDTH = HwParam(0) @override def hwDeclr(self): super(HwIOCuckooInsert, self).hwDeclr() self.key = HwIOVectSignal(self.KEY_WIDTH) if self.DATA_WIDTH: self.data = HwIOVectSignal(self.DATA_WIDTH)
[docs] @override def _initSimAgent(self, sim: HdlSimulator): self._ag = HwIOCuckooInsertAgent(sim, self)
[docs] class HwIOCuckooInsertRes(HwIOCuckooInsert): """ An interface with an result of insert operation. :ivar pop: signal if 1 the key and data on this interface contains the item which had to be removed during insert because the insertion limit was exceeded """ @override def hwDeclr(self): self.pop = HwIOSignal() HwIOCuckooInsert.hwDeclr(self)
[docs] @override def _initSimAgent(self, sim: HdlSimulator): self._ag = HwIOCuckooInsertResAgent(sim, self)
[docs] class HwIOCuckooInsertAgent(HwIODataRdVldAgent): """ Agent for HwIOCuckooInsert interface """
[docs] def __init__(self, sim, hwIO): HwIODataRdVldAgent.__init__(self, sim, hwIO) self._hasData = bool(hwIO.DATA_WIDTH)
[docs] @override def get_data(self): hwIO = self.hwIO if self._hasData: return hwIO.key.read(), hwIO.data.read() else: return hwIO.key.read()
[docs] @override def set_data(self, data): hwIO = self.hwIO if self._hasData: if data is None: k = None d = None else: k, d = data hwIO.key.write(k) hwIO.data.write(d) else: hwIO.key.write(data)
[docs] class HwIOCuckooInsertResAgent(HwIOCuckooInsertAgent): """ Agent for HwIOCuckooInsertRes interface """
[docs] @override def get_data(self): hwIO = self.hwIO if self._hasData: return hwIO.pop.read(), hwIO.key.read(), hwIO.data.read() else: return hwIO.pop.read(), hwIO.key.read()
[docs] @override def set_data(self, data): hwIO = self.hwIO if self._hasData: if data is None: p = None k = None d = None else: p, k, d = data hwIO.pop.write(p) hwIO.key.write(k) hwIO.data.write(d) else: hwIO.pop.write(p) hwIO.key.write(data)