Source code for hwtLib.mem.atomic.flipCntr

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from hwt.code import If
from hwt.hwIOs.std import HwIOSignal, HwIORdVldSync, \
    HwIORegCntrl
from hwt.hwIOs.utils import addClkRstn, propagateClkRstn
from hwt.hwModule import HwModule
from hwt.hwParam import HwParam
from hwt.pyUtils.typingFuture import override
from hwt.serializer.mode import serializeOnce
from hwtLib.mem.atomic.flipReg import FlipRegister


[docs] @serializeOnce class FlipCntr(HwModule): """ Counter with FlipRegister which is form memory with atomic access interface doFilip drives switching of memories in flip register dataIn has higher priority than doIncr .. hwt-autodoc:: """ @override def hwConfig(self): self.DATA_WIDTH = HwParam(18) @override def hwDeclr(self): with self._hwParamsShared(): addClkRstn(self) self.doIncr = HwIOSignal() self.doFlip = HwIORdVldSync() self.data = HwIORegCntrl() self.cntr = FlipRegister()
[docs] def flipHandler(self): self.doFlip.rd(1) flipSt = self._reg("flipState", def_val=0) If(self.doFlip.vld, flipSt(~flipSt) ) self.cntr.select_sig(flipSt)
[docs] def dataHanldler(self): cntr = self.cntr cntr.first.dout.data(cntr.first.din + 1) cntr.first.dout.vld(self.doIncr) cntr.second(self.data)
@override def hwImpl(self): propagateClkRstn(self) self.flipHandler() self.dataHanldler()
if __name__ == "__main__": from hwt.synth import to_rtl_str m = FlipCntr() print(to_rtl_str(m))