|
| 1 | +import os |
| 2 | +import subprocess |
| 3 | + |
| 4 | +from amaranth.build import * |
| 5 | +from amaranth.vendor import XilinxPlatform |
| 6 | +from .resources import * |
| 7 | + |
| 8 | + |
| 9 | +__all__ = ["AX7325BPlatform"] |
| 10 | + |
| 11 | + |
| 12 | +class AX7325BPlatform(XilinxPlatform): |
| 13 | + """ |
| 14 | + https://www.en.alinx.com/Product/FPGA-Development-Boards/Kintex-7/AX7325B.html |
| 15 | +
|
| 16 | + Power Supply Function |
| 17 | +
|
| 18 | + POWER |
| 19 | + +1.0V FPGA core voltage |
| 20 | + +3.3V FPGA Bank0, Bank14, Bank15, QSIP FLASH, Clock Crystal, SD Card, SFP Optical Module |
| 21 | + +1.8V Gigabit Ethernet, HDMI, USB |
| 22 | + +1.5V DDR3, SODIMM, FPGA Bank33, Bank34, Bank35, VADJ(+2.5V) FPGA Bank12, Bank13, FMC |
| 23 | + VREF, VTT (+0.75V) DDR3, SODIMM |
| 24 | + MGTAVCC(+1.0V) FPGA Bank115, Bank116, Bank117, Bank118 |
| 25 | + MGTAVTT(+1.2V) FPGA Bank115, Bank116, Bank117, Bank118 |
| 26 | + MGT_1.8V (+1.2V) FPGA GTX auxiliary voltage |
| 27 | + """ |
| 28 | + device = "xc7k325t" |
| 29 | + package = "ffg900" |
| 30 | + speed = "2" |
| 31 | + default_clk = "clk" |
| 32 | + resources = [ |
| 33 | + Resource("clk", 0, DiffPairs("AE10", "AF10", dir="i"), Clock(200e6), Attrs(IOSTANDARD="LVDS")), |
| 34 | + Resource("clk0", 0, DiffPairs("F20", "E20", dir="i"), Clock(200e6), Attrs(IOSTANDARD="LVDS")), |
| 35 | + Resource("clk_sfp", 0, DiffPairs("G8", "G7", dir="i"), Clock(156e6), Attrs(IOSTANDARD="LVDS")), |
| 36 | + Resource("clk_qsfp", 0, DiffPairs("C8", "C7", dir="i"), Clock(125e6), Attrs(IOSTANDARD="LVDS")), |
| 37 | + *LEDResources(pins="A22 C19 B19 E18", attrs=Attrs(IOSTANDARD="LVCMOS33")), |
| 38 | + DDR3Resource(0, |
| 39 | + rst_n="Y11", |
| 40 | + clk_p="AG10", |
| 41 | + clk_n="AH10", |
| 42 | + clk_en="AD12", |
| 43 | + cs_n="AF11", |
| 44 | + we_n="AD9", |
| 45 | + ras_n="AE9", |
| 46 | + cas_n="AE11", |
| 47 | + a="AB12 AA8 AB9 AC9 AB13 Y10 AA11 AA10 AA13 AD8 AB10 AC10 AJ9", |
| 48 | + ba="AE8 AC12 AC11", |
| 49 | + dqs_p="Y19 AJ18 AH16 AC16 AH7 AG4 AG2 AD2", |
| 50 | + dqs_n="Y18 AK18 AJ16 AC15 AJ7 AG3 AH1 AD1", |
| 51 | + dq="""AD18 AB18 AD17 AB19 AD16 AC19 AE18 AB17 |
| 52 | + AG19 AK19 AD19 AJ19 AF18 AH19 AE19 AG18 |
| 53 | + AK15 AJ17 AH15 AF15 AG14 AH17 AG15 AK16 |
| 54 | + AE15 Y16 AC14 AA15 AA17 AD14 AA16 AB15 |
| 55 | + AK6 AJ8 AJ6 AF8 AK4 AK8 AK5 AG7 |
| 56 | + AE4 AF1 AE5 AE1 AF6 AE3 AF5 AF2 |
| 57 | + AH4 AJ2 AH5 AJ4 AH2 AK1 AH6 AJ1 |
| 58 | + AC2 AC5 AD3 AC7 AE6 AD6 AC1 AC4""", |
| 59 | + dm="AA18 AF17 AE16 Y15 AF7 AF3 AJ3 AD4", |
| 60 | + odt="AD11", |
| 61 | + diff_attrs=Attrs(IOSTANDARD="LVDS"), |
| 62 | + attrs=Attrs(IOSTANDARD="LVCMOS15")), |
| 63 | + DDR3Resource("sodimm", |
| 64 | + rst_n="F17", |
| 65 | + clk_p="D17 E19", |
| 66 | + clk_n="D18 D19", |
| 67 | + clk_en="L17 G17", |
| 68 | + cs_n="F22 C21", |
| 69 | + we_n="H21", |
| 70 | + ras_n="G20", |
| 71 | + cas_n="K20", |
| 72 | + a="F21 D21 E21 F18 H17 B17 J19 C17 J18 C16 K19 G18 K18 G22 D16 L18", |
| 73 | + ba="H19 H20 J17", |
| 74 | + dqs_p="L12 J16 C12 D14 F25 B28 C29 G27", |
| 75 | + dqs_n="L13 H16 B12 C14 E25 A28 B29 F27", |
| 76 | + dq="""L15 K14 J14 L11 K15 L16 J13 K16 |
| 77 | + J12 J11 H15 G14 H11 H12 G13 G15 |
| 78 | + D12 A11 D13 E13 F11 E11 A12 F12 |
| 79 | + B13 A13 B15 C15 B14 A15 E15 F15 |
| 80 | + A23 D24 E24 E26 E23 B23 D23 G23 |
| 81 | + B24 C24 C26 A27 A25 A26 B27 D26 |
| 82 | + D27 A30 C30 D29 C27 B30 E29 E28 |
| 83 | + F28 F30 H30 G28 H24 G29 H27 H26""", |
| 84 | + dm="K13 H14 D11 E14 F26 C25 D28 G30", |
| 85 | + odt="D22 H22", |
| 86 | + diff_attrs=Attrs(IOSTANDARD="LVDS"), |
| 87 | + attrs=Attrs(IOSTANDARD="LVCMOS15")), |
| 88 | + # TODO QSPI Flash |
| 89 | + # CCLK B10 |
| 90 | + # CE_B U19 |
| 91 | + # D0 P24 |
| 92 | + # D1 R25 |
| 93 | + # D2 R20 |
| 94 | + # D3 R21 |
| 95 | + # *SPIFlashResources(0, |
| 96 | + # cs_n="", clk="", copi="", cipo="", wp_n="", hold_n="", |
| 97 | + # attrs=Attrs(IOSTANDARD="LVCMOS33") |
| 98 | + # ), |
| 99 | + UARTResource(0, |
| 100 | + rx="AJ26", tx="AK26", |
| 101 | + attrs=Attrs(IOSTANDARD="LVCMOS33") |
| 102 | + ), |
| 103 | + # TODO: 4x SFP |
| 104 | + # SFP1_TX_P K2 |
| 105 | + # SFP1_TX_N K1 |
| 106 | + # SFP1_RX_P K6 |
| 107 | + # SFP1_RX_P K5 |
| 108 | + # SFP1_TX_DIS T28 |
| 109 | + # SFP1_LOSS R28 |
| 110 | + # SFP2_TX_P J4 |
| 111 | + # SFP2_TX_N J3 |
| 112 | + # SFP2_RX_P H6 |
| 113 | + # SFP2_RX_P H5 |
| 114 | + # SFP2_TX_DIS T28 |
| 115 | + # SFP2_LOSS T26 |
| 116 | + # SFP3_TX_P H2 |
| 117 | + # SFP3_TX_N H1 |
| 118 | + # SFP3_RX_P G4 |
| 119 | + # SFP3_RX_P G3 |
| 120 | + # SFP3_TX_DIS U28 |
| 121 | + # SFP3_LOSS U27 |
| 122 | + # SFP4_TX_P F2 |
| 123 | + # SFP4_TX_N F1 |
| 124 | + # SFP4_RX_P F6 |
| 125 | + # SFP4_RX_P F5 |
| 126 | + # SFP4_TX_DIS U25 |
| 127 | + # SFP4_LOSS A18 |
| 128 | + # TODO: QSFP |
| 129 | + # QSFP1_TX_P D2 |
| 130 | + # QSFP1_TX_N D1 |
| 131 | + # QSFP2_TX_P B2 |
| 132 | + # QSFP2_TX_N B1 |
| 133 | + # QSFP3_TX_P C4 |
| 134 | + # QSFP3_TX_N C3 |
| 135 | + # QSFP4_TX_P A4 |
| 136 | + # QSFP4_TX_N A3 |
| 137 | + # QSFP1_RX_P E4 |
| 138 | + # QSFP1_RX_N E3 |
| 139 | + # QSFP2_RX_P B6 |
| 140 | + # QSFP2_RX_N B5 |
| 141 | + # QSFP3_RX_P D6 |
| 142 | + # QSFP3_RX_N D5 |
| 143 | + # QSFP4_RX_P A8 |
| 144 | + # QSFP4_RX_N A7 |
| 145 | + # QSFP_MODSELL R30 |
| 146 | + # QSFP_RESETL U30 |
| 147 | + # QSFP_MMODPRSL U22 |
| 148 | + # QSFP_INTL R24 |
| 149 | + # QSFP_LPMODE V26 |
| 150 | + # QSFP_SCL A20 |
| 151 | + # QSFP_SDA A21 |
| 152 | + # TODO: PCIe x8 |
| 153 | + # PCIE_RX0_P M6 |
| 154 | + # PCIE_RX0_N M5 |
| 155 | + # PCIE_RX1_P P6 |
| 156 | + # PCIE_RX1_N P5 |
| 157 | + # PCIE_RX2_P R4 |
| 158 | + # PCIE_RX2_N R3 |
| 159 | + # PCIE_RX3_P T6 |
| 160 | + # PCIE_RX3_N T5 |
| 161 | + # PCIE_RX4_P V6 |
| 162 | + # PCIE_RX4_N V5 |
| 163 | + # PCIE_RX5_P W4 |
| 164 | + # PCIE_RX5_N W3 |
| 165 | + # PCIE_RX6_P Y6 |
| 166 | + # PCIE_RX6_N Y5 |
| 167 | + # PCIE_RX7_P AA4 |
| 168 | + # PCIE_RX7_N AA3 |
| 169 | + # PCIE_TX0_P L4 |
| 170 | + # PCIE_TX0_N L3 |
| 171 | + # PCIE_TX1_P M2 |
| 172 | + # PCIE_TX1_N M1 |
| 173 | + # PCIE_TX2_P N4 |
| 174 | + # PCIE_TX2_N N3 |
| 175 | + # PCIE_TX3_P P2 |
| 176 | + # PCIE_TX3_N P1 |
| 177 | + # PCIE_TX4_P T2 |
| 178 | + # PCIE_TX4_N T1 |
| 179 | + # PCIE_TX5_P U4 |
| 180 | + # PCIE_TX5_N U3 |
| 181 | + # PCIE_TX6_P V2 |
| 182 | + # PCIE_TX6_N V1 |
| 183 | + # PCIE_TX7_P Y2 |
| 184 | + # PCIE_TX7_N Y1 |
| 185 | + # PCIE_PERST B18 |
| 186 | + Resource("temperature", 0, |
| 187 | + Subsignal("scl", Pins("P23", dir="i")), |
| 188 | + Subsignal("sda", Pins("N25", dir="i")), |
| 189 | + Attrs(IOSTANDARD="LVCMOS33") |
| 190 | + ), |
| 191 | + *SDCardResources(0, clk="AH21", cmd="AJ21", dat0="AJ22", dat1="AJ23", |
| 192 | + dat2="AG20", dat3="AH20", cd="AE20", |
| 193 | + attrs=Attrs(IOSTANDARD="LVCMOS33")), |
| 194 | + # TODO: FMC |
| 195 | + # TODO: J16 Expansion Header |
| 196 | + *ButtonResources(pins="AG27 AG28", attrs=Attrs(IOSTANDARD="LVCMOS33")), |
| 197 | + ] |
| 198 | + connectors = [] |
| 199 | + |
| 200 | + def toolchain_program(self, product, name): |
| 201 | + # openfpgaloader |
| 202 | + openfpgaloader = os.environ.get("OPENFPGALOADER", "openFPGALoader") |
| 203 | + with product.extract("{}.bin".format(name)) as fn: |
| 204 | + # TODO: @timkpaine has digilent_hs3 cable |
| 205 | + subprocess.check_call([openfpgaloader, "-c", "digilent_hs3", fn]) |
| 206 | + |
| 207 | + |
| 208 | +if __name__ == "__main__": |
| 209 | + from .test.blinky import * |
| 210 | + AX7325BPlatform().build(Blinky(), do_program=True) |
0 commit comments