1 from nmigen
.build
import *
5 "LEDResources", "RGBLEDResource", "ButtonResources", "SwitchResources",
10 def _SplitResources(*args
, pins
, invert
=False, attrs
=None, default_name
, dir):
11 assert isinstance(pins
, (str, list, dict))
13 if isinstance(pins
, str):
15 if isinstance(pins
, list):
16 pins
= dict(enumerate(pins
))
19 for number
, pin
in pins
.items():
20 ios
= [Pins(pin
, dir=dir, invert
=invert
)]
23 resources
.append(Resource
.family(*args
, number
, default_name
=default_name
, ios
=ios
))
27 def LEDResources(*args
, **kwargs
):
28 return _SplitResources(*args
, **kwargs
, default_name
="led", dir="o")
31 def RGBLEDResource(*args
, r
, g
, b
, invert
=False, attrs
=None):
33 ios
.append(Subsignal("r", Pins(r
, dir="o", invert
=invert
, assert_width
=1)))
34 ios
.append(Subsignal("g", Pins(g
, dir="o", invert
=invert
, assert_width
=1)))
35 ios
.append(Subsignal("b", Pins(b
, dir="o", invert
=invert
, assert_width
=1)))
38 return Resource
.family(*args
, default_name
="rgb_led", ios
=ios
)
41 def ButtonResources(*args
, **kwargs
):
42 return _SplitResources(*args
, **kwargs
, default_name
="button", dir="i")
45 def SwitchResources(*args
, **kwargs
):
46 return _SplitResources(*args
, **kwargs
, default_name
="switch", dir="i")
49 def Display7SegResource(*args
, a
, b
, c
, d
, e
, f
, g
, dp
=None, invert
=False, attrs
=None):
51 ios
.append(Subsignal("a", Pins(a
, dir="o", invert
=invert
, assert_width
=1)))
52 ios
.append(Subsignal("b", Pins(b
, dir="o", invert
=invert
, assert_width
=1)))
53 ios
.append(Subsignal("c", Pins(c
, dir="o", invert
=invert
, assert_width
=1)))
54 ios
.append(Subsignal("d", Pins(d
, dir="o", invert
=invert
, assert_width
=1)))
55 ios
.append(Subsignal("e", Pins(e
, dir="o", invert
=invert
, assert_width
=1)))
56 ios
.append(Subsignal("f", Pins(f
, dir="o", invert
=invert
, assert_width
=1)))
57 ios
.append(Subsignal("g", Pins(g
, dir="o", invert
=invert
, assert_width
=1)))
59 ios
.append(Subsignal("dp", Pins(dp
, dir="o", assert_width
=1)))
62 return Resource
.family(*args
, default_name
="display_7seg", ios
=ios
)