vendor.lattice_{ecp5,machxo_2_3l}: remove -forceAll from Diamond scripts.
[nmigen.git] / nmigen / build / dsl.py
index 721f980ebc74f1b0ca41953f78d69693042f5913..3b445f6808b156d0e8fac7153f0201e9956fc8ec 100644 (file)
@@ -14,8 +14,9 @@ class Pins:
 
         if conn is not None:
             conn_name, conn_number = conn
-            if not (isinstance(conn_name, str) and isinstance(conn_number, int)):
-                raise TypeError("Connector must be None or a pair of string and integer, not {!r}"
+            if not (isinstance(conn_name, str) and isinstance(conn_number, (int, str))):
+                raise TypeError("Connector must be None or a pair of string (connector name) and "
+                                "integer/string (connector number), not {!r}"
                                 .format(conn))
             names = ["{}_{}:{}".format(conn_name, conn_number, name) for name in names]
 
@@ -54,13 +55,11 @@ class Pins:
 
 
 def PinsN(*args, **kwargs):
-    pins = Pins(*args, **kwargs)
-    pins.invert = True
-    return pins
+    return Pins(*args, invert=True, **kwargs)
 
 
 class DiffPairs:
-    def __init__(self, p, n, *, dir="io", conn=None, assert_width=None):
+    def __init__(self, p, n, *, dir="io", invert=False, conn=None, assert_width=None):
         self.p = Pins(p, dir=dir, conn=conn, assert_width=assert_width)
         self.n = Pins(n, dir=dir, conn=conn, assert_width=assert_width)
 
@@ -70,7 +69,7 @@ class DiffPairs:
                             .format(self.p, self.n))
 
         self.dir    = dir
-        self.invert = False
+        self.invert = bool(invert)
 
     def __len__(self):
         return len(self.p.names)
@@ -84,9 +83,7 @@ class DiffPairs:
 
 
 def DiffPairsN(*args, **kwargs):
-    diff_pairs = DiffPairs(*args, **kwargs)
-    diff_pairs.invert = True
-    return diff_pairs
+    return DiffPairs(*args, invert=True, **kwargs)
 
 
 class Attrs(OrderedDict):
@@ -236,8 +233,9 @@ class Connector:
 
         if conn is not None:
             conn_name, conn_number = conn
-            if not (isinstance(conn_name, str) and isinstance(conn_number, int)):
-                raise TypeError("Connector must be None or a pair of string and integer, not {!r}"
+            if not (isinstance(conn_name, str) and isinstance(conn_number, (int, str))):
+                raise TypeError("Connector must be None or a pair of string (connector name) and "
+                                "integer/string (connector number), not {!r}"
                                 .format(conn))
 
             for conn_pin, plat_pin in mapping.items():