1 from nmigen
.build
import *
4 __all__
= ["LEDResources", "RGBLEDResource", "ButtonResources", "SwitchResources"]
7 def _SplitResources(*args
, pins
, invert
=False, attrs
=None, default_name
, dir):
8 assert isinstance(pins
, (str, list, dict))
10 if isinstance(pins
, str):
12 if isinstance(pins
, list):
13 pins
= dict(enumerate(pins
))
16 for number
, pin
in pins
.items():
17 ios
= [Pins(pin
, dir=dir, invert
=invert
)]
20 resources
.append(Resource
.family(*args
, number
, default_name
=default_name
, ios
=ios
))
24 def LEDResources(*args
, **kwargs
):
25 return _SplitResources(*args
, **kwargs
, default_name
="led", dir="o")
28 def RGBLEDResource(*args
, r
, g
, b
, invert
=False, attrs
=None):
30 ios
.append(Subsignal("r", Pins(r
, dir="o", invert
=invert
, assert_width
=1)))
31 ios
.append(Subsignal("g", Pins(g
, dir="o", invert
=invert
, assert_width
=1)))
32 ios
.append(Subsignal("b", Pins(b
, dir="o", invert
=invert
, assert_width
=1)))
35 return Resource
.family(*args
, default_name
="rgb_led", ios
=ios
)
38 def ButtonResources(*args
, **kwargs
):
39 return _SplitResources(*args
, **kwargs
, default_name
="button", dir="i")
42 def SwitchResources(*args
, **kwargs
):
43 return _SplitResources(*args
, **kwargs
, default_name
="switch", dir="i")