stream/AsyncFIFO: Add a minimum of 2 buffers on Efinix FPGAs to fix issues on hardware.

Root cause still need to be understand, but when testing with another AsyncFIFO (from verilog axis),
the behavior was similar. So is it an Efinity issue? Constraint issue?
This commit is contained in:
Florent Kermarrec 2023-07-27 13:29:05 +02:00
parent 72a1592bee
commit 924da55ea0
1 changed files with 13 additions and 2 deletions

View File

@ -13,6 +13,8 @@ from migen.util.misc import xdir
from migen.genlib import fifo
from migen.genlib.cdc import MultiReg, PulseSynchronizer, AsyncResetSynchronizer
from litex.gen import LiteXContext
from litex.soc.interconnect.csr import *
# Endpoint -----------------------------------------------------------------------------------------
@ -234,10 +236,19 @@ class AsyncFIFO(_FIFOWrapper):
def __init__(self, layout, depth=None, buffered=False):
depth = 4 if depth is None else depth
assert depth >= 4
nbuffers = 0
if buffered:
nbuffers = 1
from litex.build.efinix import EfinixPlatform
if isinstance(LiteXContext.platform, EfinixPlatform):
nbuffers = 2 # Minimum of 2 buffers required on Efinix FPGAs.
_FIFOWrapper.__init__(self,
fifo_class = fifo.AsyncFIFOBuffered if buffered else fifo.AsyncFIFO,
fifo_class = fifo.AsyncFIFOBuffered if nbuffers > 0 else fifo.AsyncFIFO,
layout = layout,
depth = depth)
depth = depth
)
if nbuffers > 1:
ClockDomainsRenamer("read")(BufferizeEndpoints({"source": DIR_SOURCE})(self))
# ClockDomainCrossing ------------------------------------------------------------------------------