Skip to content

Commit 7afa3d6

Browse files
committedJul 2, 2015
mibuild/xilinx: Xilinx's FPGAs do not necessary share the same primitives: add xilinx_s7_special_overrides and specific XilinxDDROutputS7 implementation
Fix DDROutput implementation on spartan6 (tested with LiteETH's GMII phy)
1 parent 4509265 commit 7afa3d6

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed
 

Diff for: ‎mibuild/xilinx/common.py

+30-9
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,31 @@ def lower(dr):
103103

104104

105105
class XilinxDDROutputImpl(Module):
106+
def __init__(self, i1, i2, o, clk):
107+
self.specials += Instance("ODDR2",
108+
p_DDR_ALIGNMENT="NONE", p_INIT=0, p_SRTYPE="SYNC",
109+
i_C0=clk, i_C1=~clk, i_CE=1, i_S=0, i_R=0,
110+
i_D0=i1, i_D1=i2, o_Q=o,
111+
)
112+
113+
114+
class XilinxDDROutput:
115+
@staticmethod
116+
def lower(dr):
117+
return XilinxDDROutputImpl(dr.i1, dr.i2, dr.o, dr.clk)
118+
119+
120+
xilinx_special_overrides = {
121+
NoRetiming: XilinxNoRetiming,
122+
MultiReg: XilinxMultiReg,
123+
AsyncResetSynchronizer: XilinxAsyncResetSynchronizer,
124+
DifferentialInput: XilinxDifferentialInput,
125+
DifferentialOutput: XilinxDifferentialOutput,
126+
DDROutput: XilinxDDROutput
127+
}
128+
129+
130+
class XilinxDDROutputImplS7(Module):
106131
def __init__(self, i1, i2, o, clk):
107132
self.specials += Instance("ODDR",
108133
p_DDR_CLK_EDGE="SAME_EDGE",
@@ -111,16 +136,12 @@ def __init__(self, i1, i2, o, clk):
111136
)
112137

113138

114-
class XilinxDDROutput:
139+
class XilinxDDROutputS7:
115140
@staticmethod
116141
def lower(dr):
117-
return XilinxDDROutputImpl(dr.i1, dr.i2, dr.o, dr.clk)
142+
return XilinxDDROutputImplS7(dr.i1, dr.i2, dr.o, dr.clk)
118143

119-
xilinx_special_overrides = {
120-
NoRetiming: XilinxNoRetiming,
121-
MultiReg: XilinxMultiReg,
122-
AsyncResetSynchronizer: XilinxAsyncResetSynchronizer,
123-
DifferentialInput: XilinxDifferentialInput,
124-
DifferentialOutput: XilinxDifferentialOutput,
125-
DDROutput: XilinxDDROutput
144+
145+
xilinx_s7_special_overrides = {
146+
DDROutput: XilinxDDROutputS7
126147
}

Diff for: ‎mibuild/xilinx/platform.py

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ def __init__(self, *args, toolchain="ise", **kwargs):
1616

1717
def get_verilog(self, *args, special_overrides=dict(), **kwargs):
1818
so = dict(common.xilinx_special_overrides)
19+
if self.device[:3] == "xc7":
20+
so.update(dict(common.xilinx_s7_special_overrides))
1921
so.update(special_overrides)
2022
return GenericPlatform.get_verilog(self, *args, special_overrides=so, **kwargs)
2123

0 commit comments

Comments
 (0)