From d0a19c4be85c2f3d21e891b8a5520ba5a7a3a258 Mon Sep 17 00:00:00 2001 From: Florent Kermarrec Date: Fri, 24 Jul 2015 13:02:54 +0200 Subject: [PATCH] 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. --- migen/actorlib/fifo.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/migen/actorlib/fifo.py b/migen/actorlib/fifo.py index 072e99c7d..4363870fd 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)