Define Q(t) = Q(0) + accepted_writes(t) - completed_reads(t). Required storage covers the largest Q over the allowed traffic and backpressure scenarios. Clock rates, relative phase, burst timing, consumer pauses and stop latency determine those event counts; a frequency ratio alone does not determine depth. If arrival rate remains above guaranteed service forever and the producer cannot be stopped, no finite FIFO is sufficient.
Illustrative synchronous event budget: start empty, accept one item at each of edges 1–8, and complete reads only at edges 4 and 8. The peak post-edge occupancy is six items. If instead you assert a stop request at occupancy six and two further items can be accepted with no guaranteed reads before the stop takes effect, storage must cover eight items. These are explicit traffic assumptions, not a universal depth recommendation.
For a conventional asynchronous FIFO, synchronised Gray-coded pointer information can make the local view conservative and delay recognition of freed space or new data. Account for that latency in the throughput and stop/restart budget; two synchroniser stages do not automatically mean two extra data slots. Use the selected FIFO implementation's documented flag, reset and physical CDC constraints. Do not synchronise a multi-bit data bus with independent bit synchronisers.
Almost-full threshold: reserve enough free slots for the maximum additional accepted items after requesting a stop.
Almost-empty threshold: cover refill/wakeup latency and required consumer service, rather than choosing an arbitrary percentage.
Synchronous FIFOs: simpler, but still size for burst not average.
When multiple sources share one destination port, arbitration selects which eligible item can advance. A source can be stalled while the destination is ready because another source received the grant. QoS fields or priorities are policy inputs; starvation freedom requires an explicit service rule plus eligibility and progress assumptions.
A round-robin policy can provide bounded turns among continuously eligible requesters if grants complete and the implementation advances correctly. Fixed priority can indefinitely deny a lower-priority source under sustained higher-priority demand. Weighted policies trade service shares and latency, but their guarantee must be stated and checked rather than inferred from the name.
Document arbiter policy for each shared slave.
Measure per-source stall duration and service gaps; finite long stalls are evidence to investigate, not proof of indefinite starvation.
Choose priorities from stated latency and bandwidth requirements; there is no universal CPU/display/DMA priority order.