1504b15f389e90456b597a8402b048310eaf65d9
[nmigen-boards.git] / nmigen_boards / ice40_hx1k_blink_evn.py
1 import os
2 import subprocess
3
4 from nmigen.build import *
5 from nmigen.vendor.lattice_ice40 import *
6 from .dev import *
7
8
9 __all__ = ["ICE40HX1KBlinkEVNPlatform"]
10
11
12 class ICE40HX1KBlinkEVNPlatform(LatticeICE40Platform):
13 device = "iCE40HX1K"
14 package = "VQ100"
15 default_clk = "clk3p3"
16 resources = [
17 Resource("clk3p3", 0, Pins("13", dir="i"), Clock(3.3e6),
18 Attrs(GLOBAL=True, IO_STANDARD="SB_LVCMOS33")),
19
20 Resource("user_led", 0, Pins("59", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS33")),
21 Resource("user_led", 1, Pins("56", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS33")),
22 Resource("user_led", 2, Pins("53", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS33")),
23 Resource("user_led", 3, Pins("51", dir="o"), Attrs(IO_STANDARD="SB_LVCMOS33")),
24
25 Resource("user_btn", 0, Pins("60"), Attrs(IO_STANDARD="SB_LVCMOS33")),
26 Resource("user_btn", 1, Pins("57"), Attrs(IO_STANDARD="SB_LVCMOS33")),
27 Resource("user_btn", 2, Pins("54"), Attrs(IO_STANDARD="SB_LVCMOS33")),
28 Resource("user_btn", 3, Pins("52"), Attrs(IO_STANDARD="SB_LVCMOS33")),
29
30 *SPIFlashResources(0,
31 cs="49", clk="48", mosi="45", miso="46",
32 attrs=Attrs(IO_STANDARD="SB_LVCMOS33")
33 ),
34 ]
35 connectors = [
36 Connector("pmod", 1, "10 9 8 7 - - 4 3 2 1 - -"), # J1
37 Connector("pmod", 5, "40 42 62 64 - - 37 41 63 45 - -"), # J5
38 Connector("pmod", 6, "25 24 21 20 - - 26 27 28 33 - -"), # J6
39 Connector("pmod", 11, "49 45 46 48 - -"), # J11
40 Connector("pmod", 12, "59 56 53 51 - -"), # J12
41 ]
42
43 def toolchain_program(self, products, name):
44 iceburn = os.environ.get("ICEBURN", "iCEburn")
45 with products.extract("{}.bin".format(name)) as bitstream_filename:
46 subprocess.check_call([iceburn, "-evw", bitstream_filename])
47
48
49 if __name__ == "__main__":
50 from ._blinky import Blinky
51 ICE40HX1KBlinkEVNPlatform().build(Blinky(), do_program=True)