1 from migen
.fhdl
.module
import Module
2 from migen
.fhdl
.specials
import Instance
3 from migen
.genlib
.io
import *
4 from migen
.genlib
.resetsync
import AsyncResetSynchronizer
7 class LatticeAsyncResetSynchronizerImpl(Module
):
8 def __init__(self
, cd
, async_reset
):
11 Instance("FD1S3BX", i_D
=0, i_PD
=async_reset
,
12 i_CK
=cd
.clk
, o_Q
=rst1
),
13 Instance("FD1S3BX", i_D
=rst1
, i_PD
=async_reset
,
14 i_CK
=cd
.clk
, o_Q
=cd
.rst
)
18 class LatticeAsyncResetSynchronizer
:
21 return LatticeAsyncResetSynchronizerImpl(dr
.cd
, dr
.async_reset
)
24 class LatticeDDROutputImpl(Module
):
25 def __init__(self
, i1
, i2
, o
, clk
):
26 self
.specials
+= Instance("ODDRXD1",
27 synthesis_directive
="ODDRAPPS=\"SCLK_ALIGNED\"",
29 i_DA
=i1
, i_DB
=i2
, o_Q
=o
,
33 class LatticeDDROutput
:
36 return LatticeDDROutputImpl(dr
.i1
, dr
.i2
, dr
.o
, dr
.clk
)
38 lattice_special_overrides
= {
39 AsyncResetSynchronizer
: LatticeAsyncResetSynchronizer
,
40 DDROutput
: LatticeDDROutput