genlib.cdc.MultiReg: pull in from Migen.
This commit is contained in:
parent
263d577323
commit
bc60631d68
10
examples/cdc.py
Normal file
10
examples/cdc.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
from nmigen.fhdl import *
|
||||||
|
from nmigen.back import rtlil, verilog
|
||||||
|
from nmigen.genlib.cdc import *
|
||||||
|
|
||||||
|
|
||||||
|
sys = ClockDomain()
|
||||||
|
i, o = Signal(name="i"), Signal(name="o")
|
||||||
|
frag = MultiReg(i, o).get_fragment(platform=None)
|
||||||
|
# print(rtlil.convert(frag, ports=[i, o], clock_domains={"sys": sys}))
|
||||||
|
print(verilog.convert(frag, ports=[i, o], clock_domains={"sys": sys}))
|
0
nmigen/genlib/__init__.py
Normal file
0
nmigen/genlib/__init__.py
Normal file
22
nmigen/genlib/cdc.py
Normal file
22
nmigen/genlib/cdc.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
from ..fhdl import *
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ["MultiReg"]
|
||||||
|
|
||||||
|
|
||||||
|
class MultiReg(Module):
|
||||||
|
def __init__(self, i, o, odomain="sys", n=2, reset=0):
|
||||||
|
self.i = i
|
||||||
|
self.o = o
|
||||||
|
self.odomain = odomain
|
||||||
|
|
||||||
|
self.regs = [Signal(self.i.bits_sign(), name="cdc{}".format(i),
|
||||||
|
reset=reset, reset_less=True)#, attrs=("no_retiming",))
|
||||||
|
for i in range(n)]
|
||||||
|
|
||||||
|
def get_fragment(self, platform):
|
||||||
|
f = Module()
|
||||||
|
for i, o in zip((self.i, *self.regs), self.regs):
|
||||||
|
f.sync[self.odomain] += o.eq(i)
|
||||||
|
f.comb += self.o.eq(self.regs[-1])
|
||||||
|
return f.lower(platform)
|
Loading…
Reference in a new issue