From: Florent Kermarrec Date: Fri, 24 Jul 2015 11:02:54 +0000 (+0200) Subject: migen/actorlib/fifo: add FIFO wrapper function X-Git-Tag: 24jan2021_ls180~2099^2~35 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d0a19c4be85c2f3d21e891b8a5520ba5a7a3a258;p=litex.git migen/actorlib/fifo: add FIFO wrapper function Allow automatic instantiation of the correct fifo (SyncFIFO or AsyncFIFO) according to the clock domains passed in argument. --- diff --git a/migen/actorlib/fifo.py b/migen/actorlib/fifo.py index 072e99c7..4363870f 100644 --- a/migen/actorlib/fifo.py +++ b/migen/actorlib/fifo.py @@ -55,3 +55,15 @@ class SyncFIFO(_FIFOActor): class AsyncFIFO(_FIFOActor): def __init__(self, layout, depth): _FIFOActor.__init__(self, fifo.AsyncFIFO, layout, depth) + + +def FIFO(layout, depth, buffered=False, + sink_cd="sys", source_cd="sys"): + if sink_cd != source_cd: + if buffered: + ValueError("AsyncFIFO does not support buffered mode") + fifo = AsyncFIFO(layout, depth) + return ClockDomainsRenamer({"write": sink_cd, "read": source_cd})(fifo) + else: + fifo = SyncFIFO(layout, depth, buffered) + return ClockDomainsRenamer(sink_cd)(fifo)