add differential in/out support to mibuild/altera
authorAlain Péteut <alain.peteut@yahoo.com>
Mon, 20 Apr 2015 08:06:24 +0000 (10:06 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Mon, 20 Apr 2015 08:08:26 +0000 (10:08 +0200)
mibuild/altera/common.py

index 3303e1807a31b124b5dfcc7fad794387a3de119e..86c0cd2b363708abe639aaba49e6795d24e40764 100644 (file)
@@ -1 +1,40 @@
-altera_special_overrides = {}
+from migen.fhdl.std import (Instance, Module)
+from migen.genlib.io import (DifferentialInput, DifferentialOutput)
+
+
+__all__ = ['altera_special_overrides']
+
+
+class QuartusDifferentialInputImpl(Module):
+    def __init__(self, i_p, i_n, o):
+        self.specials += Instance("ALT_INBUF_DIFF",
+                                  name='ibuf_diff',
+                                  i_i=i_p,
+                                  i_ibar=i_n,
+                                  o_o=o)
+
+
+class QuartusDifferentialInput:
+    @staticmethod
+    def lower(dr):
+        return QuartusDifferentialInputImpl(dr.i_p, dr.i_n, dr.o)
+
+
+class QuartusDifferentialOutputImpl(Module):
+    def __init__(self, i, o_p, o_n):
+        self.specials += Instance("ALT_OUTBUF_DIFF",
+                                  name='obuf_diff',
+                                  i_i=i,
+                                  o_o=o_p,
+                                  o_obar=o_n)
+
+
+class QuartusDifferentialOutput:
+    @staticmethod
+    def lower(dr):
+        return QuartusDifferentialOutputImpl(dr.i, dr.o_p, dr.o_n)
+
+altera_special_overrides = {
+    DifferentialInput: QuartusDifferentialInput,
+    DifferentialOutput: QuartusDifferentialOutput
+}