Source code for hwtLib.amba.axis_comp.fifoDrop

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

from typing import Tuple, Optional, Union

from hwt.hwIOs.std import HwIOSignal, HwIORst_n, HwIORst, HwIOClk
from hwt.pyUtils.typingFuture import override
from hwt.serializer.mode import serializeParamsUniq
from hwt.synthesizer.interfaceLevel.utils import HwIO_pack
from hwtLib.amba.axis_comp.base import Axi4SCompBase
from hwtLib.handshaked.fifo import HandshakedFifo
from hwtLib.handshaked.fifoDrop import HandshakedFifoDrop


[docs] @serializeParamsUniq class Axi4SFifoDrop(Axi4SCompBase, HandshakedFifoDrop): """ Synchronous FIFO for axi-stream interface with frame drop functionality and speculative buffering. Also known as a speculative FIFO. :note: DEPTH > axis.MAX_FRAME_LEN :see: :class:`hwtLib.handshaked.fifo_drop.HandshakedFifoDrop` .. hwt-autodoc:: _example_Axi4SFifoDrop """ REG_CLS = NotImplementedError @override def hwDeclr(self): HandshakedFifo.hwDeclr(self) self.dataIn_discard = HwIOSignal() @override def hwImpl(self, clk_rst: Optional[Tuple[ Tuple[HwIOClk, Union[HwIORst, HwIORst_n]], Tuple[HwIOClk, Union[HwIORst, HwIORst_n]]]]=None): super(HandshakedFifoDrop, self).hwImpl(clk_rst=clk_rst)
[docs] def _connect_fifo_in(self): rd = self.get_ready_signal vld = self.get_valid_signal din = self.dataIn fIn = self.fifo.dataIn wr_en = ~fIn.wait rd(din)(wr_en) fIn.discard(self.dataIn_discard) fIn.commit(din.valid & din.last) fIn.data(HwIO_pack(din, exclude=[vld(din), rd(din)])) fIn.en(vld(din) & wr_en)
[docs] def _example_Axi4SFifoDrop(): m = Axi4SFifoDrop() m.DEPTH = 4 m.EXPORT_SIZE = True m.EXPORT_SPACE = True return m
if __name__ == "__main__": from hwt.synth import to_rtl_str m = _example_Axi4SFifoDrop() print(to_rtl_str(m))