817b6d40d00b5d8255236c086729825ca42e3a49
[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", assert_width=1)))
15
16 io_1x = list(io_all)
17 io_1x.append(Subsignal("mosi", Pins(mosi, dir="o", assert_width=1)))
18 io_1x.append(Subsignal("miso", Pins(miso, dir="i", assert_width=1)))
19 if wp is not None and hold is not None:
20 io_1x.append(Subsignal("wp", PinsN(wp, dir="o", assert_width=1)))
21 io_1x.append(Subsignal("hold", PinsN(hold, dir="o", assert_width=1)))
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 assert_width=2)))
28 resources.append(Resource.family(*args, default_name="spi_flash", ios=io_2x,
29 name_suffix="2x"))
30
31 if wp is not None and hold is not None:
32 io_4x = list(io_all)
33 io_4x.append(Subsignal("dq", Pins(" ".join([mosi, miso, wp, hold]), dir="io",
34 assert_width=4)))
35 resources.append(Resource.family(*args, default_name="spi_flash", ios=io_4x,
36 name_suffix="4x"))
37
38 return resources