Skip to content

Commit a32096e

Browse files
Merge pull request #2068 from VOGL-electronic/ddrtristate_oe2_optional
build: io: make oe2 of DDRTristate optional
2 parents bff25c2 + c1733ea commit a32096e

File tree

4 files changed

+8
-7
lines changed

4 files changed

+8
-7
lines changed

litex/build/efinix/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ def lower(dr):
294294

295295
class EfinixDDRTristateImpl(LiteXModule):
296296
def __init__(self, io, o1, o2, oe1, oe2, i1, i2, clk):
297-
assert oe1 == oe2
297+
assert oe2 is None
298298
assert_is_signal_or_clocksignal(clk)
299299
platform = LiteXContext.platform
300300
io_name = platform.get_pin_name(io)

litex/build/io.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,20 +190,20 @@ def __init__(self, io, o1, o2, oe1, oe2, i1, i2, clk):
190190
_oe = Signal()
191191
_i = Signal()
192192
self.specials += DDROutput(o1, o2, _o, clk)
193-
self.specials += DDROutput(oe1, oe2, _oe, clk)
193+
self.specials += DDROutput(oe1, oe2, _oe, clk) if oe2 is not None else SDROutput(oe1, _oe, clk)
194194
self.specials += DDRInput(_i, i1, i2, clk)
195195
self.specials += Tristate(io, _o, _oe, _i)
196196

197197
class DDRTristate(Special):
198-
def __init__(self, io, o1, o2, oe1, oe2, i1, i2, clk=None):
198+
def __init__(self, io, o1, o2, oe1, oe2=None, i1=None, i2=None, clk=None):
199199
Special.__init__(self)
200200
self.io = io
201201
self.o1 = o1
202202
self.o2 = o2
203203
self.oe1 = oe1
204204
self.oe2 = oe2
205-
self.i1 = i1
206-
self.i2 = i2
205+
self.i1 = i1 if i1 is not None else Signal()
206+
self.i2 = i2 if i2 is not None else Signal()
207207
self.clk = clk if clk is not None else ClockSignal()
208208

209209
def iter_expressions(self):

litex/build/lattice/common.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,11 +324,12 @@ def lower(dr):
324324

325325
class LatticeNXDDRTristateImpl(Module):
326326
def __init__(self, io, o1, o2, oe1, oe2, i1, i2, clk):
327+
assert oe2 is None
327328
_o = Signal()
328329
_oe = Signal()
329330
_i = Signal()
330331
self.specials += DDROutput(o1, o2, _o, clk)
331-
self.specials += SDROutput(oe1 | oe2, _oe, clk)
332+
self.specials += SDROutput(oe1, _oe, clk)
332333
self.specials += DDRInput(_i, i1, i2, clk)
333334
self.specials += Tristate(io, _o, _oe, _i)
334335
_oe.attr.add("syn_useioff")

litex/build/xilinx/common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ def __init__(self, io, o1, o2, oe1, oe2, i1, i2, clk):
164164
_oe_n = Signal()
165165
_i = Signal()
166166
self.specials += DDROutput(o1, o2, _o, clk)
167-
self.specials += DDROutput(~oe1, ~oe2, _oe_n, clk)
167+
self.specials += DDROutput(~oe1, ~oe2, _oe_n, clk) if oe2 is not None else SDROutput(~oe1, _oe_n, clk)
168168
self.specials += DDRInput(_i, i1, i2, clk)
169169
self.specials += Instance("IOBUF",
170170
io_IO = io,

0 commit comments

Comments
 (0)