From: Florent Kermarrec Date: Tue, 3 Sep 2013 22:01:33 +0000 (+0200) Subject: actorlib: add fifo X-Git-Tag: 24jan2021_ls180~2099^2~467 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=71b14ac8731527de3aced1029fb38d9e3945cc04;p=litex.git actorlib: add fifo --- diff --git a/migen/actorlib/fifo.py b/migen/actorlib/fifo.py new file mode 100644 index 00000000..3d6f036d --- /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