Add Terasic DE10-Nano (#32)
[nmigen-boards.git] / nmigen_boards / de10_nano.py
1 import os
2 import subprocess
3
4 from nmigen.build import *
5 from nmigen.vendor.intel import *
6 from .resources import *
7
8
9 __all__ = ["DE10NanoPlatform"]
10
11
12 class DE10NanoPlatform(IntelPlatform):
13 device = "5CSEBA6" # Cyclone V 110K LEs
14 package = "U23" # UBGA-484
15 speed = "I7"
16 default_clk = "clk50"
17 resources = [
18 Resource("clk50", 0, Pins("V11", dir="i"),
19 Clock(50e6), Attrs(io_standard="3.3-V LVTTL")),
20 Resource("clk50", 1, Pins("Y13", dir="i"),
21 Clock(50e6), Attrs(io_standard="3.3-V LVTTL")),
22 Resource("clk50", 2, Pins("E11", dir="i"),
23 Clock(50e6), Attrs(io_standard="3.3-V LVTTL")),
24
25 *LEDResources(
26 pins="W15 AA24 V16 V15 AF26 AE26 Y16 AA23",
27 attrs=Attrs(io_standard="3.3-V LVTTL")),
28 *ButtonResources(
29 pins="AH17 AH16", invert=True,
30 attrs=Attrs(io_standard="3.3-V LVTTL")),
31 *SwitchResources(
32 pins="Y24 W24 W21 W20",
33 attrs=Attrs(io_standard="3.3-V LVTTL")),
34
35 # Arduino header
36 UARTResource(0,
37 rx="AG13", tx="AF13",
38 attrs=Attrs(io_standard="3.3-V LVTTL")),
39
40 # LTC2308 analogue-to-digital converter
41 SPIResource(0,
42 cs="U9", clk="V10", mosi="AC4", miso="AD4",
43 attrs=Attrs(io_standard="3.3-V LVTTL")),
44
45 # ADV7513 HDMI transmitter
46 # Note this has a lot of input formats for tx_d, but this defaults to RGB24
47 Resource("adv7513", 0,
48 Subsignal("tx_d_r", Pins("AD12 AE12 W8 Y8 AD11 AD10 AE11 Y5", dir="o")),
49 Subsignal("tx_d_g", Pins("AF10 Y4 AE9 AB4 AE7 AF6 AF8 AF5", dir="o")),
50 Subsignal("tx_d_b", Pins("AE4 AH2 AH4 AH5 AH6 AG6 AF9 AE8", dir="o")),
51 Subsignal("tx_clk", Pins("AG5", dir="o")),
52 Subsignal("tx_de", Pins("AD19", dir="o")),
53 Subsignal("tx_hs", Pins("T8", dir="o")),
54 Subsignal("tx_vs", Pins("V13", dir="o")),
55 Subsignal("tx_int", Pins("AF11", dir="i")),
56 Subsignal("i2s0", Pins("T13", dir="o")),
57 Subsignal("mclk", Pins("U11", dir="o")),
58 Subsignal("lrclk", Pins("T11", dir="o")),
59 Subsignal("sclk", Pins("T12", dir="o")),
60 Subsignal("scl", Pins("U10", dir="o")),
61 Subsignal("sda", Pins("AA4", dir="io")),
62 Attrs(io_standard="3.3-V LVTTL")),
63 ]
64 connectors = [
65 Connector("gpio", 0,
66 "V12 E8 W12 D11 D8 AH13 AF7 AH14 AF4 AH3 "
67 "- - AD5 AG14 AE23 AE6 AD23 AE24 D12 AD20 "
68 "C12 AD17 AC23 AC22 Y19 AB23 AA19 W11 - - "
69 "AA18 W14 Y18 Y17 AB25 AB26 Y11 AA26 AA13 AA11 "),
70 Connector("gpio", 1,
71 "Y15 AC24 AA15 AD26 AG28 AF28 AE25 AF27 AG26 AH27 "
72 "- - AG25 AH26 AH24 AF25 AG23 AF23 AG24 AH22 "
73 "AH21 AG21 AH23 AA20 AF22 AE22 AG20 AF21 - - "
74 "AG19 AH19 AG18 AH18 AF18 AF20 AG15 AE20 AE19 AE17 "),
75 Connector("arduino", 0,
76 "AG13 AF13 AG10 AG9 U14 U13 AG8 AH8 "
77 "AF17 AE15 AF15 AG16 AH11 AH12 AH9 AG11 "
78 "AH7"),
79 ]
80
81 def toolchain_program(self, products, name):
82 quartus_pgm = os.environ.get("QUARTUS_PGM", "quartus_pgm")
83 with products.extract("{}.sof".format(name)) as bitstream_filename:
84 subprocess.check_call([quartus_pgm, "--haltcc", "--mode", "JTAG",
85 "--operation", "P;" + bitstream_filename])
86
87
88 if __name__ == "__main__":
89 from .test.blinky import Blinky
90 DE10NanoPlatform().build(Blinky(), do_program=True)