9dfd950a80322e5aa99b3aaa211d740a049be8c6
4 from nmigen
.build
import *
5 from nmigen
.vendor
.lattice_ice40
import *
9 __all__
= ["ICEBreakerPlatform"]
12 class ICEBreakerPlatform(LatticeICE40Platform
):
17 Resource("clk12", 0, Pins("35", dir="i"),
18 Clock(12e6
), Attrs(GLOBAL
=True, IO_STANDARD
="SB_LVCMOS33")),
20 Resource("user_led", 0, PinsN("11", dir="o"), Attrs(IO_STANDARD
="SB_LVCMOS33")),
21 Resource("user_led", 1, PinsN("37", dir="o"), Attrs(IO_STANDARD
="SB_LVCMOS33")),
22 # Color-specific aliases
23 Resource("user_ledr", 0, PinsN("11", dir="o"), Attrs(IO_STANDARD
="SB_LVCMOS33")),
24 Resource("user_ledg", 0, PinsN("37", dir="o"), Attrs(IO_STANDARD
="SB_LVCMOS33")),
26 Resource("user_btn", 0, PinsN("10", dir="i"), Attrs(IO_STANDARD
="SB_LVCMOS33")),
30 attrs
=Attrs(IO_STANDARD
="SB_LVTTL", PULLUP
=1)
34 cs
="16", clk
="15", mosi
="14", miso
="17", wp
="12", hold
="13",
35 attrs
=Attrs(IO_STANDARD
="SB_LVCMOS33")
39 Connector("pmod", 0, " 4 2 47 45 - - 3 48 46 44 - -"), # PMOD1A
40 Connector("pmod", 1, "43 38 34 31 - - 42 36 32 28 - -"), # PMOD1B
41 Connector("pmod", 2, "27 25 21 19 - - 26 23 20 18 - -"), # PMOD2
43 # The attached LED/button section can be either used standalone or as a PMOD.
44 # Attach to platform using:
45 # p.add_resources(p.break_off_pmod)
46 # pmod_btn = plat.request("user_btn")
48 Resource("user_btn", 1, Pins("9", dir="i", conn
=("pmod", 2)),
49 Attrs(IO_STANDARD
="SB_LVCMOS33")),
50 Resource("user_btn", 2, Pins("4", dir="i", conn
=("pmod", 2)),
51 Attrs(IO_STANDARD
="SB_LVCMOS33")),
52 Resource("user_btn", 3, Pins("10", dir="i", conn
=("pmod", 2)),
53 Attrs(IO_STANDARD
="SB_LVCMOS33")),
55 Resource("user_led", 2, Pins("7", dir="o", conn
=("pmod", 2)),
56 Attrs(IO_STANDARD
="SB_LVCMOS33")),
57 Resource("user_led", 3, Pins("1", dir="o", conn
=("pmod", 2)),
58 Attrs(IO_STANDARD
="SB_LVCMOS33")),
59 Resource("user_led", 4, Pins("2", dir="o", conn
=("pmod", 2)),
60 Attrs(IO_STANDARD
="SB_LVCMOS33")),
61 Resource("user_led", 5, Pins("8", dir="o", conn
=("pmod", 2)),
62 Attrs(IO_STANDARD
="SB_LVCMOS33")),
63 Resource("user_led", 6, Pins("3", dir="o", conn
=("pmod", 2)),
64 Attrs(IO_STANDARD
="SB_LVCMOS33")),
66 # Color-specific aliases
67 Resource("user_ledr", 1, Pins("7", dir="o", conn
=("pmod", 2)),
68 Attrs(IO_STANDARD
="SB_LVCMOS33")),
69 Resource("user_ledg", 1, Pins("1", dir="o", conn
=("pmod", 2)),
70 Attrs(IO_STANDARD
="SB_LVCMOS33")),
71 Resource("user_ledg", 2, Pins("2", dir="o", conn
=("pmod", 2)),
72 Attrs(IO_STANDARD
="SB_LVCMOS33")),
73 Resource("user_ledg", 3, Pins("8", dir="o", conn
=("pmod", 2)),
74 Attrs(IO_STANDARD
="SB_LVCMOS33")),
75 Resource("user_ledg", 4, Pins("3", dir="o", conn
=("pmod", 2)),
76 Attrs(IO_STANDARD
="SB_LVCMOS33"))
79 def toolchain_program(self
, products
, name
):
80 iceprog
= os
.environ
.get("ICEPROG", "iceprog")
81 with products
.extract("{}.bin".format(name
)) as bitstream_filename
:
82 subprocess
.check_call([iceprog
, bitstream_filename
])
85 if __name__
== "__main__":
86 from ._blinky
import Blinky
87 p
= ICEBreakerPlatform()
88 p
.add_resources(p
.break_off_pmod
)
89 p
.build(Blinky(), do_program
=True)