|
| 1 | +# |
| 2 | +# This file is part of LiteX-Boards. |
| 3 | +# |
| 4 | +# Copyright (c) 2026 Florent Kermarrec <florent@enjoy-digital.fr> |
| 5 | +# SPDX-License-Identifier: BSD-2-Clause |
| 6 | + |
| 7 | +from litex.build.generic_platform import * |
| 8 | +from litex.build.efinix.platform import EfinixPlatform |
| 9 | + |
| 10 | +# IOs ---------------------------------------------------------------------------------------------- |
| 11 | + |
| 12 | +_io = [ |
| 13 | + # Clk. |
| 14 | + ("clk32", 0, Pins("B4"), IOStandard("3.3_V_LVTTL_/_LVCMOS")), |
| 15 | + |
| 16 | + # Leds. |
| 17 | + ("user_led_n", 0, Pins("E1"), IOStandard("3.3_V_LVTTL_/_LVCMOS"), Misc("DRIVE_STRENGTH=1")), # Red. |
| 18 | + ("user_led_n", 1, Pins("F1"), IOStandard("3.3_V_LVTTL_/_LVCMOS"), Misc("DRIVE_STRENGTH=1")), # Green. |
| 19 | + ("user_led_n", 2, Pins("G1"), IOStandard("3.3_V_LVTTL_/_LVCMOS"), Misc("DRIVE_STRENGTH=1")), # Blue. |
| 20 | + |
| 21 | + # Serial on FPGA header pins 4/5. |
| 22 | + ("serial", 0, |
| 23 | + Subsignal("rx", Pins("A5")), |
| 24 | + Subsignal("tx", Pins("D7")), |
| 25 | + IOStandard("3.3_V_LVTTL_/_LVCMOS"), |
| 26 | + ), |
| 27 | + |
| 28 | + # RP2350 passive-SPI configuration interface. |
| 29 | + ("fpga_cfg", 0, |
| 30 | + Subsignal("cs_n", Pins("G3")), |
| 31 | + Subsignal("clk", Pins("F3")), |
| 32 | + Subsignal("mosi", Pins("F2")), |
| 33 | + Subsignal("reset_n", Pins("G4")), |
| 34 | + Subsignal("done", Pins("F4")), |
| 35 | + Subsignal("status_n", Pins("A4")), |
| 36 | + IOStandard("3.3_V_LVTTL_/_LVCMOS"), |
| 37 | + ), |
| 38 | + |
| 39 | + # FPGA I/Os routed to the Teensy-style edge connector. |
| 40 | + ("user_io", 0, Pins( |
| 41 | + "A5 D7 C7 D6 G7 G5 G2 F5 F6", |
| 42 | + "E5 C6 B3 B7 A7 A3 C2 D2 E2"), |
| 43 | + IOStandard("3.3_V_LVTTL_/_LVCMOS"), |
| 44 | + ), |
| 45 | +] |
| 46 | + |
| 47 | +# Bank voltage ------------------------------------------------------------------------------------- |
| 48 | + |
| 49 | +_bank_info = [ |
| 50 | + ("1A", "3.3 V LVTTL / LVCMOS"), |
| 51 | + ("1B", "3.3 V LVTTL / LVCMOS"), |
| 52 | + ("1C", "1.1 V"), |
| 53 | + ("2A", "3.3 V LVTTL / LVCMOS"), |
| 54 | + ("2B", "3.3 V LVTTL / LVCMOS"), |
| 55 | +] |
| 56 | + |
| 57 | +# Connectors --------------------------------------------------------------------------------------- |
| 58 | + |
| 59 | +_connectors = [ |
| 60 | + # Teensy-style edge connector. Use "teensy:1" for connector pin 1. |
| 61 | + ("teensy", |
| 62 | + "ZERO " |
| 63 | + "#N/A #N/A #N/A #N/A #N/A A5 D7 C7 #N/A #N/A D6 G7 G5 G2 #N/A #N/A #N/A #N/A #N/A " |
| 64 | + "F5 F6 E5 C6 B3 B7 A7 A3 C2 D2 E2 #N/A #N/A #N/A" |
| 65 | + ), |
| 66 | +] |
| 67 | + |
| 68 | +# Platform ----------------------------------------------------------------------------------------- |
| 69 | + |
| 70 | +class Platform(EfinixPlatform): |
| 71 | + default_clk_name = "clk32" |
| 72 | + default_clk_freq = 32e6 |
| 73 | + default_clk_period = 1e9/32e6 |
| 74 | + |
| 75 | + def __init__(self, toolchain="efinity"): |
| 76 | + EfinixPlatform.__init__(self, |
| 77 | + "T8F49C2", _io, _connectors, |
| 78 | + iobank_info = _bank_info, |
| 79 | + toolchain = toolchain, |
| 80 | + spi_mode = "passive", |
| 81 | + spi_width = "1") |
| 82 | + |
| 83 | + def do_finalize(self, fragment): |
| 84 | + EfinixPlatform.do_finalize(self, fragment) |
| 85 | + self.add_period_constraint(self.lookup_request("clk32", loose=True), 1e9/32e6) |
0 commit comments