mirror of
https://github.com/enjoy-digital/litex.git
synced 2025-01-04 09:52:26 -05:00
actorlib: add fifo
This commit is contained in:
parent
dac10f5570
commit
71b14ac873
1 changed files with 41 additions and 0 deletions
41
migen/actorlib/fifo.py
Normal file
41
migen/actorlib/fifo.py
Normal file
|
@ -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)
|
||||
|
Loading…
Reference in a new issue