clash-lang / clash-lang/clash-protocols

Add simpler PacketStream FIFO

Open
#121 0 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.