dev: Refactor resource abstractions to use Resource.family.
[nmigen-boards.git] / nmigen_boards / dev / flash.py
1 from nmigen.build import *
2
3
4 __all__ = ["SPIFlashResources"]
5
6
7 def SPIFlashResources(*args, cs, clk, mosi, miso, wp=None, hold=None, attrs=None):
8 resources = []
9
10 io_all = []
11 if attrs is not None:
12 io_all.append(attrs)
13 io_all.append(Subsignal("cs", PinsN(cs, dir="o")))
14 io_all.append(Subsignal("clk", Pins(clk, dir="o")))
15
16 io_1x = list(io_all)
17 io_1x.append(Subsignal("mosi", Pins(mosi, dir="o")))
18 io_1x.append(Subsignal("miso", Pins(miso, dir="i")))
19 if wp is not None and hold is not None:
20 io_1x.append(Subsignal("wp", PinsN(wp, dir="o")))
21 io_1x.append(Subsignal("hold", PinsN(hold, dir="o")))
22 resources.append(Resource.family(*args, default_name="spi_flash", ios=io_1x,
23 name_suffix="1x"))
24
25 io_2x = list(io_all)
26 io_2x.append(Subsignal("dq", Pins(" ".join([mosi, miso]), dir="io")))
27 resources.append(Resource.family(*args, default_name="spi_flash", ios=io_2x,
28 name_suffix="2x"))
29
30 if wp is not None and hold is not None:
31 io_4x = list(io_all)
32 io_4x.append(Subsignal("dq", Pins(" ".join([mosi, miso, wp, hold]), dir="io")))
33 resources.append(Resource.family(*args, default_name="spi_flash", ios=io_4x,
34 name_suffix="4x"))
35
36 return resources