aboutsummaryrefslogtreecommitdiff
path: root/nmigen_boards/dev/user.py
diff options
context:
space:
mode:
authorwhitequark <whitequark@whitequark.org>2019-09-23 08:07:37 +0000
committerwhitequark <whitequark@whitequark.org>2019-09-23 08:07:37 +0000
commitdd87f472af92a73d18b3ef363603f20bd071306e (patch)
tree1f55589430c96914fff1a0ac95308c8451d1f27e /nmigen_boards/dev/user.py
parentcb0c2cd8595dab6dd3aa0c219a405e5f56880412 (diff)
[breaking-change] Factor out "led", "button" and "switch" resources.
These resources were renamed as: * user_led → led * user_btn → button * user_sw → switch Fixes #13.
Diffstat (limited to 'nmigen_boards/dev/user.py')
-rw-r--r--nmigen_boards/dev/user.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/nmigen_boards/dev/user.py b/nmigen_boards/dev/user.py
new file mode 100644
index 0000000..d2be28e
--- /dev/null
+++ b/nmigen_boards/dev/user.py
@@ -0,0 +1,43 @@
+from nmigen.build import *
+
+
+__all__ = ["UserLEDResource"]
+
+
+def _SplitResources(*args, pins, invert=False, attrs=None, default_name, dir):
+ assert isinstance(pins, (str, list, dict))
+
+ if isinstance(pins, str):
+ pins = pins.split()
+ if isinstance(pins, list):
+ pins = dict(enumerate(pins))
+
+ resources = []
+ for number, pin in pins.items():
+ ios = [PinsN(pin, dir=dir) if invert else Pins(pin, dir=dir)]
+ if attrs is not None:
+ ios.append(attrs)
+ resources.append(Resource.family(*args, number, default_name=default_name, ios=ios))
+ return resources
+
+
+def LEDResources(*args, **kwargs):
+ return _SplitResources(*args, **kwargs, default_name="led", dir="o")
+
+
+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)))
+ if attrs is not None:
+ ios.append(attrs)
+ return Resource.family(*args, default_name="rgb_led", ios=ios)
+
+
+def ButtonResources(*args, **kwargs):
+ return _SplitResources(*args, **kwargs, default_name="button", dir="i")
+
+
+def SwitchResources(*args, **kwargs):
+ return _SplitResources(*args, **kwargs, default_name="switch", dir="i")