clash-lang / clash-lang/clash-protocols
Add simpler PacketStream FIFO
- Dominant language
- Haskell
- Stars
- 25
- Forks
- 12
- PR merge metrics
- No merged PRs in 30d
Description
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 (`Nothing`s) in output packets.
- The FIFO does not drop aborted packets.
The circuit is expected to have the following type:
```Haskell
fifoC ::
forall dataWidth meta dom contentDepth metaDepth.
SNat contentDepth ->
SNat metaDepth ->
Circuit (PacketStream dom meta dataWidth) (PacketStream dom meta dataWidth)
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by locating the existing `packetFifoC` implementation and the `DfConv.fifo` alternative referenced in the issue. Compare their handling of packet data, metadata, gaps, timing information, and aborted packets; done means a circuit with the specified `fifoC` type that preserves data while allowing output `Nothing`s and never drops aborted packets.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- haskell
- Domain
- embedded-iot
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100