aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nmigen_boards/_blinky.py2
-rw-r--r--nmigen_boards/arty_a7.py50
-rw-r--r--nmigen_boards/atlys.py65
-rw-r--r--nmigen_boards/blackice.py27
-rw-r--r--nmigen_boards/blackice_ii.py22
-rw-r--r--nmigen_boards/dev/__init__.py3
-rw-r--r--nmigen_boards/dev/user.py43
-rw-r--r--nmigen_boards/fomu_hacker.py10
-rw-r--r--nmigen_boards/ice40_hx1k_blink_evn.py15
-rw-r--r--nmigen_boards/ice40_hx8k_b_evn.py12
-rw-r--r--nmigen_boards/icebreaker.py11
-rw-r--r--nmigen_boards/icestick.py6
-rw-r--r--nmigen_boards/kc705.py10
-rw-r--r--nmigen_boards/mercury.py43
-rw-r--r--nmigen_boards/numato_mimas.py29
-rw-r--r--nmigen_boards/tinyfpga_bx.py2
-rw-r--r--nmigen_boards/versa_ecp5.py22
17 files changed, 158 insertions, 214 deletions
diff --git a/nmigen_boards/_blinky.py b/nmigen_boards/_blinky.py
index a9bbde9..4a173d4 100644
--- a/nmigen_boards/_blinky.py
+++ b/nmigen_boards/_blinky.py
@@ -11,7 +11,7 @@ class Blinky(Elaboratable):
leds = []
for n in itertools.count():
try:
- leds.append(platform.request("user_led", n))
+ leds.append(platform.request("led", n))
except ResourceError:
break
leds = Cat(led.o for led in leds)
diff --git a/nmigen_boards/arty_a7.py b/nmigen_boards/arty_a7.py
index 7012fbd..53869a3 100644
--- a/nmigen_boards/arty_a7.py
+++ b/nmigen_boards/arty_a7.py
@@ -15,50 +15,18 @@ class ArtyA7Platform(Xilinx7SeriesPlatform):
speed = "1L"
default_clk = "clk100"
resources = [
- Resource("clk100", 0, Pins("E3", dir="i"), Clock(100e6), Attrs(IOSTANDARD="LVCMOS33")),
+ Resource("clk100", 0, Pins("E3", dir="i"),
+ Clock(100e6), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 0, Pins("H5", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 1, Pins("J5", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 2, Pins("T9", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 3, Pins("T10", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
+ *LEDResources(pins="H5 J5 T9 T10", attrs=Attrs(IOSTANDARD="LVCMOS33")),
- Resource("rgb_led", 0,
- Subsignal("r", Pins("G6", dir="o")),
- Subsignal("g", Pins("F6", dir="o")),
- Subsignal("b", Pins("E1", dir="o")),
- Attrs(IOSTANDARD="LVCMOS33")
- ),
-
- Resource("rgb_led", 1,
- Subsignal("r", Pins("G3", dir="o")),
- Subsignal("g", Pins("J4", dir="o")),
- Subsignal("b", Pins("G4", dir="o")),
- Attrs(IOSTANDARD="LVCMOS33")
- ),
-
- Resource("rgb_led", 2,
- Subsignal("r", Pins("J3", dir="o")),
- Subsignal("g", Pins("J2", dir="o")),
- Subsignal("b", Pins("H4", dir="o")),
- Attrs(IOSTANDARD="LVCMOS33")
- ),
-
- Resource("rgb_led", 3,
- Subsignal("r", Pins("K1", dir="o")),
- Subsignal("g", Pins("H6", dir="o")),
- Subsignal("b", Pins("K2", dir="o")),
- Attrs(IOSTANDARD="LVCMOS33")
- ),
-
- Resource("user_sw", 0, Pins("A8" , dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_sw", 1, Pins("C11", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_sw", 2, Pins("C10", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_sw", 3, Pins("A10", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
+ RGBLEDResource(0, r="G6", g="F6", b="E1", attrs=Attrs(IOSTANDARD="LVCMOS33")),
+ RGBLEDResource(1, r="G3", g="J4", b="G4", attrs=Attrs(IOSTANDARD="LVCMOS33")),
+ RGBLEDResource(2, r="J3", g="J2", b="H4", attrs=Attrs(IOSTANDARD="LVCMOS33")),
+ RGBLEDResource(3, r="K1", g="H6", b="K2", attrs=Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_btn", 0, Pins("D9", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_btn", 1, Pins("C9", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_btn", 2, Pins("B9", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_btn", 3, Pins("B8", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
+ *ButtonResources(pins="D9 C9 B9 B8 ", attrs=Attrs(IOSTANDARD="LVCMOS33")),
+ *SwitchResources(pins="A8 C11 C10 A10", attrs=Attrs(IOSTANDARD="LVCMOS33")),
UARTResource(0,
rx="A9", tx="D10",
diff --git a/nmigen_boards/atlys.py b/nmigen_boards/atlys.py
index 70d9100..d010307 100644
--- a/nmigen_boards/atlys.py
+++ b/nmigen_boards/atlys.py
@@ -13,9 +13,9 @@ class AtlysPlatform(XilinxSpartan6Platform):
"""Platform file for Digilent Atlys Spartan 6 board.
https://reference.digilentinc.com/reference/programmable-logic/atlys/start"""
- device = "xc6slx45"
- package = "csg324"
- speed = "3"
+ device = "xc6slx45"
+ package = "csg324"
+ speed = "3"
def __init__(self, *, JP12="2V5", **kwargs):
super().__init__(**kwargs)
@@ -28,35 +28,36 @@ class AtlysPlatform(XilinxSpartan6Platform):
default_clk = "clk100"
resources = [
- Resource("clk100" , 0, Pins("L15", dir="i"), Attrs(IOSTANDARD="LVCMOS33"), Clock(100e6)), # GCLK
-
- Resource("user_led", 0, Pins("U18", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD0
- Resource("user_led", 1, Pins("M14", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD1
- Resource("user_led", 2, Pins("N14", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD2
- Resource("user_led", 3, Pins("L14", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD3
- Resource("user_led", 4, Pins("M13", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD4
- Resource("user_led", 5, Pins("D4", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD5
- Resource("user_led", 6, Pins("P16", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD6
- Resource("user_led", 7, Pins("N12", dir="o"), Attrs(IOSTANDARD=bank2_iostandard)), # LD7
-
- Resource("user_btn", 0, PinsN("T15", dir="i"), Attrs(IOSTANDARD=bank2_iostandard)), # RESET
- Resource("reset" , 0, PinsN("T15", dir="i"), Attrs(IOSTANDARD=bank2_iostandard)), # RESET
- Resource("user_btn", 1, Pins("N4", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # BTNU
- Resource("user_btn", 2, Pins("P4", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # BTNL
- Resource("user_btn", 3, Pins("P3", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # BTND
- Resource("user_btn", 4, Pins("F6", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # BTNR
- Resource("user_btn", 5, Pins("F5", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # BTNC
-
- Resource("user_sw" , 0, Pins("A10", dir="i"), Attrs(IOSTANDARD="LVCMOS33")), # SW0
- Resource("user_sw" , 1, Pins("D14", dir="i"), Attrs(IOSTANDARD="LVCMOS33")), # SW1
- Resource("user_sw" , 2, Pins("C14", dir="i"), Attrs(IOSTANDARD="LVCMOS33")), # SW2
- Resource("user_sw" , 3, Pins("P15", dir="i"), Attrs(IOSTANDARD="LVCMOS33")), # SW3
- Resource("user_sw" , 4, Pins("P12", dir="i"), Attrs(IOSTANDARD=bank2_iostandard)), # SW4
- Resource("user_sw" , 5, Pins("R5", dir="i"), Attrs(IOSTANDARD=bank2_iostandard)), # SW5
- Resource("user_sw" , 6, Pins("T5", dir="i"), Attrs(IOSTANDARD=bank2_iostandard)), # SW6
- Resource("user_sw" , 7, Pins("E4", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # SW7
-
- UARTResource(0, rx="A16", tx="B16", attrs=Attrs(IOSTANDARD="LVCMOS33")), # J17/UART
+ Resource("clk100", 0, Pins("L15", dir="i"),
+ Clock(100e6), Attrs(IOSTANDARD="LVCMOS33")), # GCLK
+
+ Resource("led", 0, Pins("U18", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD0
+ Resource("led", 1, Pins("M14", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD1
+ Resource("led", 2, Pins("N14", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD2
+ Resource("led", 3, Pins("L14", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD3
+ Resource("led", 4, Pins("M13", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD4
+ Resource("led", 5, Pins("D4", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD5
+ Resource("led", 6, Pins("P16", dir="o"), Attrs(IOSTANDARD="LVCMOS33")), # LD6
+ Resource("led", 7, Pins("N12", dir="o"), Attrs(IOSTANDARD=bank2_iostandard)), # LD7
+
+ Resource("button", 0, PinsN("T15", dir="i"), Attrs(IOSTANDARD=bank2_iostandard)), # RESET
+ Resource("reset", 0, PinsN("T15", dir="i"), Attrs(IOSTANDARD=bank2_iostandard)), # RESET
+ Resource("button", 1, Pins("N4", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # BTNU
+ Resource("button", 2, Pins("P4", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # BTNL
+ Resource("button", 3, Pins("P3", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # BTND
+ Resource("button", 4, Pins("F6", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # BTNR
+ Resource("button", 5, Pins("F5", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # BTNC
+
+ Resource("switch", 0, Pins("A10", dir="i"), Attrs(IOSTANDARD="LVCMOS33")), # SW0
+ Resource("switch", 1, Pins("D14", dir="i"), Attrs(IOSTANDARD="LVCMOS33")), # SW1
+ Resource("switch", 2, Pins("C14", dir="i"), Attrs(IOSTANDARD="LVCMOS33")), # SW2
+ Resource("switch", 3, Pins("P15", dir="i"), Attrs(IOSTANDARD="LVCMOS33")), # SW3
+ Resource("switch", 4, Pins("P12", dir="i"), Attrs(IOSTANDARD=bank2_iostandard)), # SW4
+ Resource("switch", 5, Pins("R5", dir="i"), Attrs(IOSTANDARD=bank2_iostandard)), # SW5
+ Resource("switch", 6, Pins("T5", dir="i"), Attrs(IOSTANDARD=bank2_iostandard)), # SW6
+ Resource("switch", 7, Pins("E4", dir="i"), Attrs(IOSTANDARD="LVCMOS18")), # SW7
+
+ UARTResource(0, rx="A16", tx="B16", attrs=Attrs(IOSTANDARD="LVCMOS33")), # J17/UART
Resource("ps2", 0, # PS/2 keyboard interface converted from J13 "HOST" USB connector
Subsignal("clk", Pins("P17", dir="i")),
diff --git a/nmigen_boards/blackice.py b/nmigen_boards/blackice.py
index 4e0bb5c..ec67def 100644
--- a/nmigen_boards/blackice.py
+++ b/nmigen_boards/blackice.py
@@ -15,26 +15,17 @@ class BlackIcePlatform(LatticeICE40Platform):
default_clk = "clk100"
resources = [
Resource("clk100", 0, Pins("129", dir="i"),
- Clock(100e6), Attrs(GLOBAL=True, IO_STANDARD="SB_LVCMOS")
- ),
-
- Resource("user_led", 0, Pins("71", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 1, Pins("67", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 2, Pins("68", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 3, Pins("70", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- # Color aliases
- Resource("user_ledb", 0, Pins("71", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_ledg", 0, Pins("67", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_ledo", 0, Pins("68", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_ledr", 0, Pins("70", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Clock(100e6), Attrs(GLOBAL=True, IO_STANDARD="SB_LVCMOS")),
- Resource("user_btn", 0, PinsN("63", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_btn", 1, PinsN("64", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ *LEDResources(pins="71 67 68 70", attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
+ # Semantic aliases
+ Resource("led_b", 0, Pins("71", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("led_g", 0, Pins("67", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("led_o", 0, Pins("68", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("led_r", 0, Pins("70", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_sw", 0, PinsN("37", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_sw", 1, PinsN("38", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_sw", 2, PinsN("39", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_sw", 3, PinsN("41", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ *ButtonResources(pins="63 64", invert=True, attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
+ *SwitchResources(pins="37 38 39 41", invert=True, attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
UARTResource(0,
rx="88", tx="85", rts="91", cts="94",
diff --git a/nmigen_boards/blackice_ii.py b/nmigen_boards/blackice_ii.py
index e74d855..baa135c 100644
--- a/nmigen_boards/blackice_ii.py
+++ b/nmigen_boards/blackice_ii.py
@@ -18,23 +18,15 @@ class BlackIceIIPlatform(LatticeICE40Platform):
Clock(100e6), Attrs(GLOBAL=True, IO_STANDARD="SB_LVCMOS")
),
- Resource("user_led", 0, Pins("71", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 1, Pins("67", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 2, Pins("68", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 3, Pins("70", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ *LEDResources(pins="71 67 68 70", attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
# Color aliases
- Resource("user_ledb", 0, Pins("71", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_ledg", 0, Pins("67", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_ledo", 0, Pins("68", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_ledr", 0, Pins("70", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("led_b", 0, Pins("71", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("led_g", 0, Pins("67", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("led_o", 0, Pins("68", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("led_r", 0, Pins("70", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_btn", 0, PinsN("63", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_btn", 1, PinsN("64", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
-
- Resource("user_sw", 0, PinsN("37", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_sw", 1, PinsN("38", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_sw", 2, PinsN("39", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_sw", 3, PinsN("41", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ *ButtonResources(pins="63 64", invert=True, attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
+ *SwitchResources(pins="37 38 39 41", invert=True, attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
UARTResource(0,
rx="88", tx="85", rts="91", cts="94",
diff --git a/nmigen_boards/dev/__init__.py b/nmigen_boards/dev/__init__.py
index 242b0f9..db4703f 100644
--- a/nmigen_boards/dev/__init__.py
+++ b/nmigen_boards/dev/__init__.py
@@ -1,4 +1,5 @@
+from .user import LEDResources, RGBLEDResource, ButtonResources, SwitchResources
from .uart import UARTResource
-from .flash import SPIFlashResources
from .spi import SPIResource
+from .flash import SPIFlashResources
from .sram import SRAMResource
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")
diff --git a/nmigen_boards/fomu_hacker.py b/nmigen_boards/fomu_hacker.py
index 4a4e853..2ff0038 100644
--- a/nmigen_boards/fomu_hacker.py
+++ b/nmigen_boards/fomu_hacker.py
@@ -17,12 +17,10 @@ class FomuHackerPlatform(LatticeICE40Platform):
Resource("clk48", 0, Pins("F5", dir="i"),
Clock(48e6), Attrs(GLOBAL=True, IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 0, PinsN("A5", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("rgb_led", 0,
- Subsignal("r", PinsN("C5")),
- Subsignal("g", PinsN("B5")),
- Subsignal("b", PinsN("A5")),
- Attrs(IO_STANDARD="SB_LVCMOS"),
+ *LEDResources(pins="A5", invert=True, attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
+ RGBLEDResource(0,
+ r="C5", g="B5", b="A5", invert=True,
+ attrs=Attrs(IO_STANDARD="SB_LVCMOS")
),
Resource("usb", 0,
diff --git a/nmigen_boards/ice40_hx1k_blink_evn.py b/nmigen_boards/ice40_hx1k_blink_evn.py
index 215e310..2a76603 100644
--- a/nmigen_boards/ice40_hx1k_blink_evn.py
+++ b/nmigen_boards/ice40_hx1k_blink_evn.py
@@ -17,15 +17,12 @@ class ICE40HX1KBlinkEVNPlatform(LatticeICE40Platform):
Resource("clk3p3", 0, Pins("13", dir="i"), Clock(3.3e6),
Attrs(GLOBAL=True, IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 0, Pins("59", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 1, Pins("56", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 2, Pins("53", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 3, Pins("51", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
-
- Resource("user_btn", 0, Pins("60"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_btn", 1, Pins("57"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_btn", 2, Pins("54"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_btn", 3, Pins("52"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ *LEDResources(pins="59 56 53 51", attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
+
+ Resource("touch", 0, Pins("60"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("touch", 1, Pins("57"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("touch", 2, Pins("54"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("touch", 3, Pins("52"), Attrs(IO_STANDARD="SB_LVCMOS")),
*SPIFlashResources(0,
cs="49", clk="48", mosi="45", miso="46",
diff --git a/nmigen_boards/ice40_hx8k_b_evn.py b/nmigen_boards/ice40_hx8k_b_evn.py
index ffa00ee..e27218a 100644
--- a/nmigen_boards/ice40_hx8k_b_evn.py
+++ b/nmigen_boards/ice40_hx8k_b_evn.py
@@ -17,14 +17,10 @@ class ICE40HX8KBEVNPlatform(LatticeICE40Platform):
Resource("clk12", 0, Pins("J3", dir="i"),
Clock(12e6), Attrs(GLOBAL=True, IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 0, Pins("C3", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")), # D2
- Resource("user_led", 1, Pins("B3", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")), # D3
- Resource("user_led", 2, Pins("C4", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")), # D4
- Resource("user_led", 3, Pins("C5", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")), # D5
- Resource("user_led", 4, Pins("A1", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")), # D6
- Resource("user_led", 5, Pins("A2", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")), # D7
- Resource("user_led", 6, Pins("B4", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")), # D8
- Resource("user_led", 7, Pins("B5", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")), # D9
+ *LEDResources(
+ pins="C3 B3 C4 C5 A1 A2 B4 B5",
+ attrs=Attrs(IO_STANDARD="SB_LVCMOS")
+ ), # D2..D9
UARTResource(0,
rx="B10", tx="B12", rts="B13", cts="A15", dtr="A16", dsr="B14", dcd="B15",
diff --git a/nmigen_boards/icebreaker.py b/nmigen_boards/icebreaker.py
index ac4f239..9971ee0 100644
--- a/nmigen_boards/icebreaker.py
+++ b/nmigen_boards/icebreaker.py
@@ -17,13 +17,12 @@ class ICEBreakerPlatform(LatticeICE40Platform):
Resource("clk12", 0, Pins("35", dir="i"),
Clock(12e6), Attrs(GLOBAL=True, IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 0, PinsN("11", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 1, PinsN("37", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- # Color-specific aliases
- Resource("user_ledr", 0, PinsN("11", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_ledg", 0, PinsN("37", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ *LEDResources(pins="11 37", invert=True, attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
+ # Semantic aliases
+ Resource("led_r", 0, PinsN("11", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ Resource("led_g", 0, PinsN("37", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_btn", 0, PinsN("10", dir="i"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ *ButtonResources(pins="10", invert=True, attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
UARTResource(0,
rx="6", tx="9",
diff --git a/nmigen_boards/icestick.py b/nmigen_boards/icestick.py
index bbcad5e..99302e7 100644
--- a/nmigen_boards/icestick.py
+++ b/nmigen_boards/icestick.py
@@ -18,11 +18,7 @@ class ICEStickPlatform(LatticeICE40Platform):
Resource("clk12", 0, Pins("21", dir="i"),
Clock(12e6), Attrs(GLOBAL=True, IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 0, Pins("99", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 1, Pins("98", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 2, Pins("97", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 3, Pins("96", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 4, Pins("95", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ *LEDResources(pins="99 98 97 96 95", attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
UARTResource(0,
rx="9", tx="8", rts="7", cts="4", dtr="3", dsr="2", dcd="1",
diff --git a/nmigen_boards/kc705.py b/nmigen_boards/kc705.py
index 613c0ba..f179d10 100644
--- a/nmigen_boards/kc705.py
+++ b/nmigen_boards/kc705.py
@@ -18,14 +18,8 @@ class KC705Platform(Xilinx7SeriesPlatform):
Resource("clk156", 0, DiffPairs("K28", "K29", dir="i"),
Clock(156e6), Attrs(IOSTANDARD="LVDS_25")),
- Resource("user_led", 0, Pins("AB8", dir="o"), Attrs(IOSTANDARD="LVCMOS15")),
- Resource("user_led", 1, Pins("AA8", dir="o"), Attrs(IOSTANDARD="LVCMOS15")),
- Resource("user_led", 2, Pins("AC9", dir="o"), Attrs(IOSTANDARD="LVCMOS15")),
- Resource("user_led", 3, Pins("AB9", dir="o"), Attrs(IOSTANDARD="LVCMOS15")),
- Resource("user_led", 4, Pins("AE26", dir="o"), Attrs(IOSTANDARD="LVCMOS15")),
- Resource("user_led", 5, Pins("G19", dir="o"), Attrs(IOSTANDARD="LVCMOS15")),
- Resource("user_led", 6, Pins("E18", dir="o"), Attrs(IOSTANDARD="LVCMOS15")),
- Resource("user_led", 7, Pins("F16", dir="o"), Attrs(IOSTANDARD="LVCMOS15")),
+ *LEDResources(pins="AB8 AA8 AC9 AB9 AE26 G19 E18 F16",
+ attrs=Attrs(IOSTANDARD="LVCMOS15")),
UARTResource(0,
rx="M19", tx="K24",
diff --git a/nmigen_boards/mercury.py b/nmigen_boards/mercury.py
index 8f072b0..5ad6254 100644
--- a/nmigen_boards/mercury.py
+++ b/nmigen_boards/mercury.py
@@ -87,15 +87,15 @@ class MercuryPlatform(XilinxSpartan3APlatform):
# Some default useful extensions. Attach to platform using:
# p.add_resources(p.leds)
- # pmod_btn = plat.request("user_led")
+ # pmod_btn = plat.request("led")
leds = [
- Resource("user_led", 0, Pins("1", dir="o", conn=("led", 0)),
+ Resource("led", 0, Pins("1", dir="o", conn=("led", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_led", 1, Pins("2", dir="o", conn=("led", 0)),
+ Resource("led", 1, Pins("2", dir="o", conn=("led", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_led", 2, Pins("3", dir="o", conn=("led", 0)),
+ Resource("led", 2, Pins("3", dir="o", conn=("led", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_led", 3, Pins("4", dir="o", conn=("led", 0)),
+ Resource("led", 3, Pins("4", dir="o", conn=("led", 0)),
Attrs(IOSTANDARD="LVTTL")),
]
@@ -128,33 +128,33 @@ class MercuryPlatform(XilinxSpartan3APlatform):
# The remaining peripherals only make sense w/ the Baseboard installed.
# See: http://www.micro-nova.com/mercury-baseboard/
- _user_sw = [
- Resource("user_sw", 0, Pins("1", dir="i", conn=("gpio", 0)),
+ _switches = [
+ Resource("switch", 0, Pins("1", dir="i", conn=("gpio", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_sw", 1, Pins("2", dir="i", conn=("gpio", 0)),
+ Resource("switch", 1, Pins("2", dir="i", conn=("gpio", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_sw", 2, Pins("3", dir="i", conn=("gpio", 0)),
+ Resource("switch", 2, Pins("3", dir="i", conn=("gpio", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_sw", 3, Pins("4", dir="i", conn=("gpio", 0)),
+ Resource("switch", 3, Pins("4", dir="i", conn=("gpio", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_sw", 4, Pins("5", dir="i", conn=("gpio", 0)),
+ Resource("switch", 4, Pins("5", dir="i", conn=("gpio", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_sw", 5, Pins("6", dir="i", conn=("gpio", 0)),
+ Resource("switch", 5, Pins("6", dir="i", conn=("gpio", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_sw", 6, Pins("7", dir="i", conn=("gpio", 0)),
+ Resource("switch", 6, Pins("7", dir="i", conn=("gpio", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_sw", 7, Pins("8", dir="i", conn=("gpio", 0)),
+ Resource("switch", 7, Pins("8", dir="i", conn=("gpio", 0)),
Attrs(IOSTANDARD="LVTTL"))
]
- _user_btn = [
- Resource("user_btn", 1, Pins("1", dir="i", conn=("input", 0)),
+ _buttons = [
+ Resource("button", 1, Pins("1", dir="i", conn=("input", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_btn", 2, Pins("2", dir="i", conn=("input", 0)),
+ Resource("button", 2, Pins("2", dir="i", conn=("input", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_btn", 3, Pins("3", dir="i", conn=("input", 0)),
+ Resource("button", 3, Pins("3", dir="i", conn=("input", 0)),
Attrs(IOSTANDARD="LVTTL")),
- Resource("user_btn", 4, Pins("4", dir="i", conn=("input", 0)),
+ Resource("button", 4, Pins("4", dir="i", conn=("input", 0)),
Attrs(IOSTANDARD="LVTTL"))
]
@@ -207,9 +207,8 @@ class MercuryPlatform(XilinxSpartan3APlatform):
)
]
- baseboard_sram = _user_btn + _vga + _extclk + _ps2
- baseboard_no_sram = _user_btn + _vga + _extclk + _ps2 + \
- _user_sw + _sevenseg + _audio
+ baseboard_sram = _buttons + _vga + _extclk + _ps2
+ baseboard_no_sram = baseboard_sram + _switches + _sevenseg + _audio
def toolchain_program(self, products, name):
# https://github.com/cr1901/mercpcl
diff --git a/nmigen_boards/numato_mimas.py b/nmigen_boards/numato_mimas.py
index a85abc3..d484fa2 100644
--- a/nmigen_boards/numato_mimas.py
+++ b/nmigen_boards/numato_mimas.py
@@ -18,31 +18,10 @@ class NumatoMimasPlatform(XilinxSpartan6Platform):
Resource("clk100", 0, Pins("P126", dir="i"),
Clock(100e6), Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 0, Pins("P119", dir="o"),
- Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 1, Pins("P118", dir="o"),
- Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 2, Pins("P117", dir="o"),
- Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 3, Pins("P116", dir="o"),
- Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 4, Pins("P115", dir="o"),
- Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 5, Pins("P114", dir="o"),
- Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 6, Pins("P112", dir="o"),
- Attrs(IOSTANDARD="LVCMOS33")),
- Resource("user_led", 7, Pins("P111", dir="o"),
- Attrs(IOSTANDARD="LVCMOS33")),
-
- Resource("user_btn", 0, Pins("P124", dir="i"),
- Attrs(IOSTANDARD="LVCMOS33", PULLUP="TRUE")),
- Resource("user_btn", 1, Pins("P123", dir="i"),
- Attrs(IOSTANDARD="LVCMOS33", PULLUP="TRUE")),
- Resource("user_btn", 2, Pins("P121", dir="i"),
- Attrs(IOSTANDARD="LVCMOS33", PULLUP="TRUE")),
- Resource("user_btn", 3, Pins("P120", dir="i"),
- Attrs(IOSTANDARD="LVCMOS33", PULLUP="TRUE")),
+ *LEDResources(pins="P119 P118 P117 P116 P115 P114 P112 P111",
+ attrs=Attrs(IOSTANDARD="LVCMOS33")),
+ *ButtonResources(pins="P124 P123 P121 P120",
+ attrs=Attrs(IOSTANDARD="LVCMOS33", PULLUP="TRUE")),
*SPIFlashResources(0,
cs="P38", clk="P70", mosi="P64", miso="65",
diff --git a/nmigen_boards/tinyfpga_bx.py b/nmigen_boards/tinyfpga_bx.py
index 4e136a7..c563565 100644
--- a/nmigen_boards/tinyfpga_bx.py
+++ b/nmigen_boards/tinyfpga_bx.py
@@ -17,7 +17,7 @@ class TinyFPGABXPlatform(LatticeICE40Platform):
Resource("clk16", 0, Pins("B2", dir="i"),
Clock(16e6), Attrs(IO_STANDARD="SB_LVCMOS")),
- Resource("user_led", 0, Pins("B3", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS")),
+ *LEDResources(pins="B3", attrs=Attrs(IO_STANDARD="SB_LVCMOS")),
Resource("usb", 0,
Subsignal("d_p", Pins("B4", dir="io")),
diff --git a/nmigen_boards/versa_ecp5.py b/nmigen_boards/versa_ecp5.py
index fdb79c0..6b26d4f 100644
--- a/nmigen_boards/versa_ecp5.py
+++ b/nmigen_boards/versa_ecp5.py
@@ -22,14 +22,8 @@ class VersaECP5Platform(LatticeECP5Platform):
Resource("pclk", 0, DiffPairs("A4", "A5", dir="i"),
Attrs(IO_TYPE="LVDS")),
- Resource("user_led", 0, PinsN("E16", dir="o"), Attrs(IO_TYPE="LVCMOS25")),
- Resource("user_led", 1, PinsN("D17", dir="o"), Attrs(IO_TYPE="LVCMOS25")),
- Resource("user_led", 2, PinsN("D18", dir="o"), Attrs(IO_TYPE="LVCMOS25")),
- Resource("user_led", 3, PinsN("E18", dir="o"), Attrs(IO_TYPE="LVCMOS25")),
- Resource("user_led", 4, PinsN("F17", dir="o"), Attrs(IO_TYPE="LVCMOS25")),
- Resource("user_led", 5, PinsN("F18", dir="o"), Attrs(IO_TYPE="LVCMOS25")),
- Resource("user_led", 6, PinsN("E17", dir="o"), Attrs(IO_TYPE="LVCMOS25")),
- Resource("user_led", 7, PinsN("F16", dir="o"), Attrs(IO_TYPE="LVCMOS25")),
+ *LEDResources(pins="E16 D17 D18 E18 F17 F18 E17 F16",
+ attrs=Attrs(IO_TYPE="LVCMOS25")),
Resource("alnum_led", 0,
Subsignal("a", PinsN("M20", dir="o")),
@@ -50,14 +44,10 @@ class VersaECP5Platform(LatticeECP5Platform):
Attrs(IO_TYPE="LVCMOS25")
),
- Resource("user_sw", 0, PinsN("H2", dir="i"), Attrs(IO_TYPE="LVCMOS15")),
- Resource("user_sw", 1, PinsN("K3", dir="i"), Attrs(IO_TYPE="LVCMOS15")),
- Resource("user_sw", 2, PinsN("G3", dir="i"), Attrs(IO_TYPE="LVCMOS15")),
- Resource("user_sw", 3, PinsN("F2", dir="i"), Attrs(IO_TYPE="LVCMOS15")),
- Resource("user_sw", 4, PinsN("J18", dir="i"), Attrs(IO_TYPE="LVCMOS25")),
- Resource("user_sw", 5, PinsN("K18", dir="i"), Attrs(IO_TYPE="LVCMOS25")),
- Resource("user_sw", 6, PinsN("K19", dir="i"), Attrs(IO_TYPE="LVCMOS25")),
- Resource("user_sw", 7, PinsN("K20", dir="i"), Attrs(IO_TYPE="LVCMOS25")),
+ *SwitchResources(pins={0: "H2", 1: "K3", 2: "G3", 3: "F2" },
+ attrs=Attrs(IO_TYPE="LVCMOS15")),
+ *SwitchResources(pins={4: "J18", 5: "K18", 6: "K19", 7: "K20"},
+ attrs=Attrs(IO_TYPE="LVCMOS15")),
UARTResource(0,
rx="C11", tx="A11",