--- /dev/null
+from nmigen import *
+from nmigen.cli import main
+
+
+pin = Signal()
+pin_t = TSTriple()
+
+m = Module()
+m.submodules += pin_t.get_tristate(pin)
+
+if __name__ == "__main__":
+ main(m.lower(platform=None), ports=[pin, pin_t.oe, pin_t.i, pin_t.o])
from .hdl.xfrm import ResetInserter, CEInserter
from .lib.cdc import MultiReg
+from .lib.io import TSTriple
from .. import *
-__all__ = ["TSTriple"]
+__all__ = ["TSTriple", "Tristate"]
class TSTriple:
def get_fragment(self, platform):
return Fragment()
+
+ def get_tristate(self, io):
+ return Tristate(self, io)
+
+
+class Tristate:
+ def __init__(self, triple, io):
+ self.triple = triple
+ self.io = io
+
+ def get_fragment(self, platform):
+ if hasattr(platform, "get_tristate"):
+ return platform.get_tristate(self.triple)
+
+ m = Module()
+ m.d.comb += self.triple.i.eq(self.io)
+ m.submodules += Instance("$tribuf",
+ p_WIDTH=len(self.io),
+ i_EN=self.triple.oe,
+ i_A=self.triple.o,
+ o_Y=self.io,
+ )
+ return m.lower(platform)