Source code for hwtLib.mem.atomic.flipCntr

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

from hwt.code import If
from hwt.interfaces.std import Signal, HandshakeSync, \
    RegCntrl
from hwt.interfaces.utils import addClkRstn, propagateClkRstn
from hwt.serializer.mode import serializeOnce
from hwt.synthesizer.unit import Unit
from hwt.synthesizer.param import Param
from hwtLib.mem.atomic.flipReg import FlipRegister


[docs]@serializeOnce class FlipCntr(Unit): """ 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:: """ def _config(self): self.DATA_WIDTH = Param(18) def _declr(self): with self._paramsShared(): addClkRstn(self) self.doIncr = Signal() self.doFlip = HandshakeSync() self.data = RegCntrl() 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)
def _impl(self): propagateClkRstn(self) self.flipHandler() self.dataHanldler()
if __name__ == "__main__": from hwt.synthesizer.utils import to_rtl_str u = FlipCntr() print(to_rtl_str(u))