aboutsummaryrefslogtreecommitdiff
path: root/nmigen_boards/resources/user.py
diff options
context:
space:
mode:
authorwhitequark <whitequark@whitequark.org>2019-10-03 05:54:12 +0000
committerwhitequark <whitequark@whitequark.org>2019-10-03 06:16:18 +0000
commitc7c637043817eae6f48c33b707b40c9c1b20f199 (patch)
tree3fa379b97128ad93a7c98c5da7e578605828cd6c /nmigen_boards/resources/user.py
parentb033d53db305eb3f0aef336568cd69f8e8c536e1 (diff)
Reorganize resource taxonomy.
The current hierarchy isn't particularly well suited to resources like SDRAM or NOR flash, so make it much less fine-grained but easier to use and less nitpicky.
Diffstat (limited to 'nmigen_boards/resources/user.py')
-rw-r--r--nmigen_boards/resources/user.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/nmigen_boards/resources/user.py b/nmigen_boards/resources/user.py
new file mode 100644
index 0000000..8faa736
--- /dev/null
+++ b/nmigen_boards/resources/user.py
@@ -0,0 +1,43 @@
+from nmigen.build import *
+
+
+__all__ = ["LEDResources", "RGBLEDResource", "ButtonResources", "SwitchResources"]
+
+
+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 = [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))
+ 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", 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)
+
+
+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")