compat.fhdl.specials: fix handling of tristate (i=None) pins.
Fixes #406.
This commit is contained in:
parent
369bc3e307
commit
8dd28fecc6
|
@ -39,16 +39,21 @@ class Tristate(Elaboratable):
|
||||||
self.i = i if i is not None else None
|
self.i = i if i is not None else None
|
||||||
|
|
||||||
def elaborate(self, platform):
|
def elaborate(self, platform):
|
||||||
if hasattr(platform, "get_input_output"):
|
if self.i is None:
|
||||||
pin = Pin(len(self.target), dir="oe" if self.i is None else "io")
|
pin = Pin(len(self.target), dir="oe")
|
||||||
pin.o = self.o
|
pin.o = self.o
|
||||||
pin.oe = self.oe
|
pin.oe = self.oe
|
||||||
if self.i is not None:
|
return platform.get_tristate(pin, self.target, attrs={}, invert=None)
|
||||||
pin.i = self.i
|
else:
|
||||||
|
pin = Pin(len(self.target), dir="io")
|
||||||
|
pin.o = self.o
|
||||||
|
pin.oe = self.oe
|
||||||
|
pin.i = self.i
|
||||||
return platform.get_input_output(pin, self.target, attrs={}, invert=None)
|
return platform.get_input_output(pin, self.target, attrs={}, invert=None)
|
||||||
|
|
||||||
m = Module()
|
m = Module()
|
||||||
m.d.comb += self.i.eq(self.target)
|
if self.i is not None:
|
||||||
|
m.d.comb += self.i.eq(self.target)
|
||||||
m.submodules += Instance("$tribuf",
|
m.submodules += Instance("$tribuf",
|
||||||
p_WIDTH=len(self.target),
|
p_WIDTH=len(self.target),
|
||||||
i_EN=self.oe,
|
i_EN=self.oe,
|
||||||
|
|
Loading…
Reference in a new issue