From 71b14ac8731527de3aced1029fb38d9e3945cc04 Mon Sep 17 00:00:00 2001
From: Florent Kermarrec <florent@enjoy-digital.fr>
Date: Wed, 4 Sep 2013 00:01:33 +0200
Subject: [PATCH] actorlib: add fifo

---
 migen/actorlib/fifo.py | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 migen/actorlib/fifo.py

diff --git a/migen/actorlib/fifo.py b/migen/actorlib/fifo.py
new file mode 100644
index 000000000..3d6f036da
--- /dev/null
+++ b/migen/actorlib/fifo.py
@@ -0,0 +1,41 @@
+from migen.fhdl.std import *
+from migen.flow.actor import *
+from migen.genlib import fifo
+
+def FIFOWrapper(sink, source, fifo):
+	return [
+			sink.ack.eq(fifo.writable),
+			fifo.we.eq(sink.stb & sink.ack),
+			fifo.din.eq(sink.payload),
+
+			source.stb.eq(fifo.readable),
+			source.payload.eq(fifo.dout),
+			fifo.re.eq(source.ack)
+	]
+
+class SyncFIFO(Module):
+	def __init__(self, layout, depth):
+
+		self.sink = Sink(layout)
+		self.source = Source(layout)
+		self.busy = Signal()
+
+		_fifo = fifo.SyncFIFO(layout, depth)		
+
+		self.submodules += _fifo
+
+		self.comb += FIFOWrapper(self.sink, self.source, _fifo)
+
+class AsyncFIFO(Module):
+	def __init__(self, layout, depth, cd_write="write", cd_read="read"):
+
+		self.sink = Sink(layout)
+		self.source = Source(layout)
+		self.busy = Signal()
+
+		_fifo = RenameClockDomains(fifo.AsyncFIFO(layout, depth),
+			{"write": cd_write, "read": cd_read})
+		self.submodules += _fifo
+
+		self.comb += FIFOWrapper(self.sink, self.source, _fifo)
+		
\ No newline at end of file