compat.fhdl.specials: fix platform lowering for TSTriple again.
This commit is contained in:
parent
79a3710255
commit
38917e4523
|
@ -7,6 +7,7 @@ from ...hdl.mem import Memory as NativeMemory
|
||||||
from ...hdl.ir import Fragment, Instance
|
from ...hdl.ir import Fragment, Instance
|
||||||
from ...hdl.dsl import Module
|
from ...hdl.dsl import Module
|
||||||
from .module import Module as CompatModule
|
from .module import Module as CompatModule
|
||||||
|
from ...lib.io import Pin
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["TSTriple", "Instance", "Memory", "READ_FIRST", "WRITE_FIRST", "NO_CHANGE"]
|
__all__ = ["TSTriple", "Instance", "Memory", "READ_FIRST", "WRITE_FIRST", "NO_CHANGE"]
|
||||||
|
@ -32,22 +33,25 @@ class TSTriple:
|
||||||
class Tristate(Elaboratable):
|
class Tristate(Elaboratable):
|
||||||
def __init__(self, target, o, oe, i=None):
|
def __init__(self, target, o, oe, i=None):
|
||||||
self.target = target
|
self.target = target
|
||||||
self.triple = TSTriple()
|
self.o = o
|
||||||
self.triple.o = o
|
self.oe = oe
|
||||||
self.triple.oe = oe
|
self.i = i if i is not None else None
|
||||||
if i is not None:
|
|
||||||
self.triple.i = i
|
|
||||||
|
|
||||||
def elaborate(self, platform):
|
def elaborate(self, platform):
|
||||||
if hasattr(platform, "get_input_output"):
|
if hasattr(platform, "get_input_output"):
|
||||||
return platform.get_input_output(self.triple, self.target, extras={})
|
pin = Pin(len(self.target), dir="oe" if self.i is None else "io")
|
||||||
|
pin.o = self.o
|
||||||
|
pin.oe = self.oe
|
||||||
|
if self.i is not None:
|
||||||
|
pin.i = self.i
|
||||||
|
return platform.get_input_output(pin, self.target, extras={})
|
||||||
|
|
||||||
m = Module()
|
m = Module()
|
||||||
m.d.comb += self.triple.i.eq(self.target)
|
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.triple.oe,
|
i_EN=self.oe,
|
||||||
i_A=self.triple.o,
|
i_A=self.o,
|
||||||
o_Y=self.target,
|
o_Y=self.target,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue