Sometimes all you want to achieve with a FIFO is absorb minimal backpressure. Not having to buffer full packets allows for a shallower FIFO and less logic. The implementation can be largely copied from packetFifoC, removing all of the dropping semantics. Note that using DfConv.fifo is also a solution, but highly suboptimal because it does not have a separate FIFO for metadata.
Expected behaviour
Dropping all timing information, the output data should be identical to the input data.
Unlike packetFifoC, there may be gaps (Nothings) in output packets.
The FIFO does not drop aborted packets.
The circuit is expected to have the following type:
fifoC ::
forall dataWidth meta dom contentDepth metaDepth.
SNat contentDepth ->
SNat metaDepth ->
Circuit (PacketStream dom meta dataWidth) (PacketStream dom meta dataWidth)
Sometimes all you want to achieve with a FIFO is absorb minimal backpressure. Not having to buffer full packets allows for a shallower FIFO and less logic. The implementation can be largely copied from
packetFifoC
, removing all of the dropping semantics. Note that usingDfConv.fifo
is also a solution, but highly suboptimal because it does not have a separate FIFO for metadata.Expected behaviour
packetFifoC
, there may be gaps (Nothing
s) in output packets.The circuit is expected to have the following type: