Example #1
0
    def _declr(self):
        addClkRstn(self)

        self.cntrl = HandshakeSync()

        self.COUNTER_WIDTH = log2ceil(self.ITERATIONS)
        self.index = VectSignal(self.COUNTER_WIDTH)._m()
        self.body = HandshakeSync()._m()
        self.bodyBreak = Signal()
Example #2
0
    def _declr(self):
        self.id = VectSignal(self.ID_WIDTH)

        self.addr = VectSignal(self.ADDR_WIDTH)
        #  len is number of words -1
        self.len = VectSignal(log2ceil(self.MAX_LEN))

        # rem is number of bits in last word which is valid - 1
        self.rem = VectSignal(log2ceil(self.DATA_WIDTH // 8))

        HandshakeSync._declr(self)
Example #3
0
    def _declr(self):
        HandshakeSync._declr(self)
        if self.LOOKUP_ID_WIDTH:
            self.lookupId = VectSignal(self.LOOKUP_ID_WIDTH)

        if self.LOOKUP_HASH:
            self.hash = VectSignal(self.HASH_WIDTH)

        if self.LOOKUP_KEY:
            self.key = VectSignal(self.KEY_WIDTH)

        if self.DATA_WIDTH:
            self.data = VectSignal(self.DATA_WIDTH)

        self.found = Signal()
        self.occupied = Signal()
Example #4
0
 def _declr(self):
     with self._paramsShared():
         addClkRstn(self)
         self.doIncr = Signal()
         self.doFlip = HandshakeSync()
         self.data = RegCntrl()
         self.cntr = FlipRegister()
Example #5
0
class StaticForLoopCntrl(Unit):
    """
    .. hwt-schematic::
    """
    def _config(self):
        self.ITERATIONS = Param(15)

    def _declr(self):
        addClkRstn(self)

        self.cntrl = HandshakeSync()

        self.COUNTER_WIDTH = log2ceil(self.ITERATIONS)
        self.index = VectSignal(self.COUNTER_WIDTH)._m()
        self.body = HandshakeSync()._m()
        self.bodyBreak = Signal()

    def _impl(self):
        ITERATIONS = int(self.ITERATIONS)
        """
        Iterates from ITERATIONS -1 to 0 body is enabled by bodyVld and if bodyRd
        then counter is decremented for next iteration
        break causes reset of counter
        """

        counter = self._reg("counter", Bits(self.COUNTER_WIDTH), ITERATIONS - 1)

        If(counter._eq(0),
            If(self.cntrl.vld,
               counter(ITERATIONS - 1)
            )
        ).Else(
            If(self.body.rd,
                If(self.bodyBreak,
                    counter(0) 
                ).Else(
                    counter(counter - 1)
                )
            )
        )

        self.cntrl.rd(counter._eq(0))
        self.body.vld(counter != 0) 
        self.index(counter[self.COUNTER_WIDTH:0])
Example #6
0
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-schematic::
    """

    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()

    def flipHandler(self):
        self.doFlip.rd(1)

        flipSt = self._reg("flipState", defVal=0)
        If(self.doFlip.vld,
            flipSt(~flipSt)
        )
        self.cntr.select_sig(flipSt)

    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()
Example #7
0
    def _declr(self):
        # rem is number of bits in last word which is valid - 1
        self.rem = VectSignal(log2ceil(self.DATA_WIDTH // 8))

        self.propagateLast = Signal()
        HandshakeSync._declr(self)
Example #8
0
 def _declr(self):
     HandshakeSync._declr(self)
     if self.LOOKUP_ID_WIDTH:
         self.lookupId = VectSignal(self.LOOKUP_ID_WIDTH)
     self.key = VectSignal(self.KEY_WIDTH)
Example #9
0
 def _declr(self):
     if self.ID_WIDTH:
         self.id = VectSignal(self.ID_WIDTH)
     self.addr = VectSignal(self.ADDR_WIDTH)
     HandshakeSync._declr(self)
Example #10
0
 def _declr(self):
     HandshakeSync._declr(self)
     if self.LOOKUP_ID_WIDTH:
         self.lookupId = VectSignal(self.LOOKUP_ID_WIDTH)
     self.key = VectSignal(self.KEY_WIDTH)
Example #11
0
 def _declr(self):
     self.id = VectSignal(self.ID_WIDTH)
     self.len = VectSignal(self.LEN_WIDTH)
     HandshakeSync._declr(self)
Example #12
0
 def _declr(self):
     self.isLast = Signal()
     HandshakeSync._declr(self)
Example #13
0
 def _declr(self):
     self.id = VectSignal(self.ID_WIDTH)
     HandshakeSync._declr(self)
Example #14
0
    def _declr(self):
        # rem is number of bits in last word which is valid - 1
        self.rem = VectSignal(log2ceil(self.DATA_WIDTH // 8))

        self.propagateLast = Signal()
        HandshakeSync._declr(self)
Example #15
0
 def _declr(self):
     self.addr = VectSignal(self.ADDR_WIDTH, masterDir=DIRECTION.IN)
     self.data = VectSignal(self.DATA_WIDTH)
     HandshakeSync._declr(self)