Skip to content

Commit

Permalink
mibuild/xilinx: Xilinx's FPGAs do not necessary share the same primit…
Browse files Browse the repository at this point in the history
…ives: add xilinx_s7_special_overrides and specific XilinxDDROutputS7 implementation

Fix DDROutput implementation on spartan6 (tested with LiteETH's GMII phy)
  • Loading branch information
enjoy-digital committed Jul 2, 2015
1 parent 4509265 commit 7afa3d6
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 9 deletions.
39 changes: 30 additions & 9 deletions mibuild/xilinx/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,31 @@ def lower(dr):


class XilinxDDROutputImpl(Module):
def __init__(self, i1, i2, o, clk):
self.specials += Instance("ODDR2",
p_DDR_ALIGNMENT="NONE", p_INIT=0, p_SRTYPE="SYNC",
i_C0=clk, i_C1=~clk, i_CE=1, i_S=0, i_R=0,
i_D0=i1, i_D1=i2, o_Q=o,
)


class XilinxDDROutput:
@staticmethod
def lower(dr):
return XilinxDDROutputImpl(dr.i1, dr.i2, dr.o, dr.clk)


xilinx_special_overrides = {
NoRetiming: XilinxNoRetiming,
MultiReg: XilinxMultiReg,
AsyncResetSynchronizer: XilinxAsyncResetSynchronizer,
DifferentialInput: XilinxDifferentialInput,
DifferentialOutput: XilinxDifferentialOutput,
DDROutput: XilinxDDROutput
}


class XilinxDDROutputImplS7(Module):
def __init__(self, i1, i2, o, clk):
self.specials += Instance("ODDR",
p_DDR_CLK_EDGE="SAME_EDGE",
Expand All @@ -111,16 +136,12 @@ def __init__(self, i1, i2, o, clk):
)


class XilinxDDROutput:
class XilinxDDROutputS7:
@staticmethod
def lower(dr):
return XilinxDDROutputImpl(dr.i1, dr.i2, dr.o, dr.clk)
return XilinxDDROutputImplS7(dr.i1, dr.i2, dr.o, dr.clk)

xilinx_special_overrides = {
NoRetiming: XilinxNoRetiming,
MultiReg: XilinxMultiReg,
AsyncResetSynchronizer: XilinxAsyncResetSynchronizer,
DifferentialInput: XilinxDifferentialInput,
DifferentialOutput: XilinxDifferentialOutput,
DDROutput: XilinxDDROutput

xilinx_s7_special_overrides = {
DDROutput: XilinxDDROutputS7
}
2 changes: 2 additions & 0 deletions mibuild/xilinx/platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ def __init__(self, *args, toolchain="ise", **kwargs):

def get_verilog(self, *args, special_overrides=dict(), **kwargs):
so = dict(common.xilinx_special_overrides)
if self.device[:3] == "xc7":
so.update(dict(common.xilinx_s7_special_overrides))
so.update(special_overrides)
return GenericPlatform.get_verilog(self, *args, special_overrides=so, **kwargs)

Expand Down

0 comments on commit 7afa3d6

Please sign in to comment.