[breaking-change] Factor out "display_7seg" resource.
[nmigen-boards.git] / nmigen_boards / dev / user.py
index 3adcbe7df6ec9c1c7902f2ac90f5285f333a70aa..336595eaa7b648a8938ff179fe37af4dc7c318cc 100644 (file)
@@ -1,7 +1,10 @@
 from nmigen.build import *
 
 
-__all__ = ["LEDResources", "RGBLEDResource", "ButtonResources", "SwitchResources"]
+__all__ = [
+    "LEDResources", "RGBLEDResource", "ButtonResources", "SwitchResources",
+    "Display7SegResource",
+]
 
 
 def _SplitResources(*args, pins, invert=False, attrs=None, default_name, dir):
@@ -14,7 +17,7 @@ def _SplitResources(*args, pins, invert=False, attrs=None, default_name, dir):
 
     resources = []
     for number, pin in pins.items():
-        ios = [PinsN(pin, dir=dir) if invert else Pins(pin, dir=dir)]
+        ios = [Pins(pin, dir=dir, invert=invert)]
         if attrs is not None:
             ios.append(attrs)
         resources.append(Resource.family(*args, number, default_name=default_name, ios=ios))
@@ -27,9 +30,9 @@ def LEDResources(*args, **kwargs):
 
 def RGBLEDResource(*args, r, g, b, invert=False, attrs=None):
     ios = []
-    ios.append(Subsignal("r", Pins(r, dir="o", assert_width=1)))
-    ios.append(Subsignal("g", Pins(g, dir="o", assert_width=1)))
-    ios.append(Subsignal("b", Pins(b, dir="o", assert_width=1)))
+    ios.append(Subsignal("r", Pins(r, dir="o", invert=invert, assert_width=1)))
+    ios.append(Subsignal("g", Pins(g, dir="o", invert=invert, assert_width=1)))
+    ios.append(Subsignal("b", Pins(b, dir="o", invert=invert, assert_width=1)))
     if attrs is not None:
         ios.append(attrs)
     return Resource.family(*args, default_name="rgb_led", ios=ios)
@@ -41,3 +44,19 @@ def ButtonResources(*args, **kwargs):
 
 def SwitchResources(*args, **kwargs):
     return _SplitResources(*args, **kwargs, default_name="switch", dir="i")
+
+
+def Display7SegResource(*args, a, b, c, d, e, f, g, dp=None, invert=False, attrs=None):
+    ios = []
+    ios.append(Subsignal("a", Pins(a, dir="o", invert=invert, assert_width=1)))
+    ios.append(Subsignal("b", Pins(b, dir="o", invert=invert, assert_width=1)))
+    ios.append(Subsignal("c", Pins(c, dir="o", invert=invert, assert_width=1)))
+    ios.append(Subsignal("d", Pins(d, dir="o", invert=invert, assert_width=1)))
+    ios.append(Subsignal("e", Pins(e, dir="o", invert=invert, assert_width=1)))
+    ios.append(Subsignal("f", Pins(f, dir="o", invert=invert, assert_width=1)))
+    ios.append(Subsignal("g", Pins(g, dir="o", invert=invert, assert_width=1)))
+    if dp is not None:
+        ios.append(Subsignal("dp", Pins(dp, dir="o", assert_width=1)))
+    if attrs is not None:
+        ios.append(attrs)
+    return Resource.family(*args, default_name="display_7seg", ios=ios)