|
| 1 | +import os |
| 2 | +import subprocess |
| 3 | + |
| 4 | +from amaranth.build import * |
| 5 | +from amaranth.vendor import IntelPlatform |
| 6 | +from .resources import * |
| 7 | + |
| 8 | + |
| 9 | +__all__ = ["DE0NanoPlatform"] |
| 10 | + |
| 11 | + |
| 12 | +class DE0NanoPlatform(IntelPlatform): |
| 13 | + device = "EP4CE22" # Cyclone IV 22K LEs |
| 14 | + package = "F17" # FBGA-17 |
| 15 | + speed = "C6" |
| 16 | + default_clk = "clk50" |
| 17 | + resources = [ |
| 18 | + Resource("clk50", 0, Pins("R8", dir="i"), |
| 19 | + Clock(50e6), Attrs(io_standard="3.3-V LVCMOS")), |
| 20 | + |
| 21 | + *LEDResources( |
| 22 | + pins="A15 A13 B13 A11 D1 F3 B1 L3", |
| 23 | + attrs=Attrs(io_standard="3.3-V LVCMOS")), |
| 24 | + *ButtonResources( |
| 25 | + pins="J15 E1", invert=True, |
| 26 | + attrs=Attrs(io_standard="3.3-V LVCMOS")), |
| 27 | + *SwitchResources( |
| 28 | + pins="M1 T8 B9 M15", |
| 29 | + attrs=Attrs(io_standard="3.3-V LVCMOS")), |
| 30 | + |
| 31 | + SDRAMResource(0, |
| 32 | + clk="R4", cke="L7", cs_n="P6", we_n="C2", ras_n="L2", cas_n="L1", |
| 33 | + ba="M7 M6", a="P2 N5 N6 M8 P8 T7 N8 T6 R1 P1 N2 N1 L4", |
| 34 | + dq="G2 G1 L8 K5 K2 J2 J1 R7 T4 T2 T3 R3 R5 P3 N3 K1", dqm="R6 T5", |
| 35 | + attrs=Attrs(io_standard="3.3-V LVCMOS")), |
| 36 | + |
| 37 | + I2CResource(0, scl="F2", sda="F1", |
| 38 | + attrs=Attrs(io_standard="3.3-V LVCMOS")), |
| 39 | + |
| 40 | + Resource("adxl345", 0, |
| 41 | + Subsignal("scl", Pins("F2"), Attrs(IOSTANDARD="I2C")), |
| 42 | + Subsignal("sda", Pins("F1"), Attrs(IOSTANDARD="I2C")), |
| 43 | + Subsignal("G_sens_int", Pins("M2", dir='i')), |
| 44 | + Subsignal("G_sens_cn_n", Pins("G5")), |
| 45 | + Attrs(io_standard="3.3-V LVCMOS"), |
| 46 | + ), |
| 47 | + SPIResource("spi_adc", 0, role="controller", |
| 48 | + cs_n="A10", clk="B14", copi="A9", cipo="B10", |
| 49 | + attrs=Attrs(io_standard="3.3-V LVCMOS"), |
| 50 | + ), |
| 51 | + ] |
| 52 | + connectors = [ |
| 53 | + Connector("gpio", 0, |
| 54 | + "A8 D3 B8 C3 A2 A3 B3 B4 A4 B5 " |
| 55 | + "- - A5 D5 B6 A6 B7 D6 A7 C6 " |
| 56 | + "C8 E6 E7 D8 E8 F8 F9 E9 - - " |
| 57 | + "C9 D9 E11 E10 C11 B11 A12 D11 D12 B12"), |
| 58 | + |
| 59 | + Connector("gpio", 1, |
| 60 | + "T9 F13 R9 T15 T14 T13 R13 T12 R12 T11" |
| 61 | + "- - T10 R11 P11 R10 N12 P9 N9 N11" |
| 62 | + "L16 K16 R16 L15 P15 P16 R14 N16 - - " |
| 63 | + "N15 P14 L14 N14 M10 L13 J16 K15 J13 J14"), |
| 64 | + |
| 65 | + Connector("gpio", 2, |
| 66 | + "- E15 E16 M16 A14 B16 C14 C16 C15" |
| 67 | + "D16 D15 D14 F15 F16 F14 G16 G15"), |
| 68 | + ] |
| 69 | + |
| 70 | + def toolchain_program(self, products, name): |
| 71 | + quartus_pgm = os.environ.get("QUARTUS_PGM", "quartus_pgm") |
| 72 | + with products.extract("{}.sof".format(name)) as bitstream_filename: |
| 73 | + subprocess.check_call([quartus_pgm, "--haltcc", "--mode", "JTAG", |
| 74 | + "--operation", "P;" + bitstream_filename]) |
| 75 | + |
| 76 | + |
| 77 | +if __name__ == "__main__": |
| 78 | + from .test.blinky import Blinky |
| 79 | + DE0NanoPlatform().build(Blinky(), do_program=True) |
0 commit comments