|  | 
|  | 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(1, | 
|  | 64 | +           # "sodimm", | 
|  | 65 | +            rst_n="F17", | 
|  | 66 | +            #clk_p="D17 E19", | 
|  | 67 | +            clk_p="D17", | 
|  | 68 | +            #clk_n="D18 D19", | 
|  | 69 | +            clk_n="D18", | 
|  | 70 | +            #clk_en="L17 G17", | 
|  | 71 | +            clk_en="L17", | 
|  | 72 | +            #cs_n="F22 C21", | 
|  | 73 | +            cs_n="F22", | 
|  | 74 | +            we_n="H21", | 
|  | 75 | +            ras_n="G20", | 
|  | 76 | +            cas_n="K20", | 
|  | 77 | +            a="F21 D21 E21 F18 H17 B17 J19 C17 J18 C16 K19 G18 K18 G22 D16 L18", | 
|  | 78 | +            ba="H19 H20 J17", | 
|  | 79 | +            dqs_p="L12 J16 C12 D14 F25 B28 C29 G27", | 
|  | 80 | +            dqs_n="L13 H16 B12 C14 E25 A28 B29 F27", | 
|  | 81 | +            dq="""L15 K14 J14 L11 K15 L16 J13 K16 | 
|  | 82 | +                  J12 J11 H15 G14 H11 H12 G13 G15 | 
|  | 83 | +                  D12 A11 D13 E13 F11 E11 A12 F12 | 
|  | 84 | +                  B13 A13 B15 C15 B14 A15 E15 F15 | 
|  | 85 | +                  A23 D24 E24 E26 E23 B23 D23 G23 | 
|  | 86 | +                  B24 C24 C26 A27 A25 A26 B27 D26 | 
|  | 87 | +                  D27 A30 C30 D29 C27 B30 E29 E28 | 
|  | 88 | +                  F28 F30 H30 G28 H24 G29 H27 H26""", | 
|  | 89 | +            dm="K13 H14 D11 E14 F26 C25 D28 G30", | 
|  | 90 | +            #odt="D22 H22", | 
|  | 91 | +            odt="D22", | 
|  | 92 | +            diff_attrs=Attrs(IOSTANDARD="LVDS"), | 
|  | 93 | +            attrs=Attrs(IOSTANDARD="LVCMOS15")), | 
|  | 94 | +        # TODO QSPI Flash | 
|  | 95 | +        # CCLK B10 | 
|  | 96 | +        # CE_B U19 | 
|  | 97 | +        # D0 P24 | 
|  | 98 | +        # D1 R25 | 
|  | 99 | +        # D2 R20 | 
|  | 100 | +        # D3 R21 | 
|  | 101 | +        # *SPIFlashResources(0, | 
|  | 102 | +        #     cs_n="", clk="", copi="", cipo="", wp_n="", hold_n="", | 
|  | 103 | +        #     attrs=Attrs(IOSTANDARD="LVCMOS33") | 
|  | 104 | +        # ), | 
|  | 105 | +        UARTResource(0, | 
|  | 106 | +            rx="AJ26", tx="AK26", | 
|  | 107 | +            attrs=Attrs(IOSTANDARD="LVCMOS33") | 
|  | 108 | +        ), | 
|  | 109 | +        # TODO: 4x SFP | 
|  | 110 | +        # SFP1_TX_P K2 | 
|  | 111 | +        # SFP1_TX_N K1 | 
|  | 112 | +        # SFP1_RX_P K6 | 
|  | 113 | +        # SFP1_RX_P K5 | 
|  | 114 | +        # SFP1_TX_DIS T28 | 
|  | 115 | +        # SFP1_LOSS R28 | 
|  | 116 | +        # SFP2_TX_P J4 | 
|  | 117 | +        # SFP2_TX_N J3 | 
|  | 118 | +        # SFP2_RX_P H6 | 
|  | 119 | +        # SFP2_RX_P H5 | 
|  | 120 | +        # SFP2_TX_DIS T28 | 
|  | 121 | +        # SFP2_LOSS T26 | 
|  | 122 | +        # SFP3_TX_P H2 | 
|  | 123 | +        # SFP3_TX_N H1 | 
|  | 124 | +        # SFP3_RX_P G4 | 
|  | 125 | +        # SFP3_RX_P G3 | 
|  | 126 | +        # SFP3_TX_DIS U28 | 
|  | 127 | +        # SFP3_LOSS U27 | 
|  | 128 | +        # SFP4_TX_P F2 | 
|  | 129 | +        # SFP4_TX_N F1 | 
|  | 130 | +        # SFP4_RX_P F6 | 
|  | 131 | +        # SFP4_RX_P F5 | 
|  | 132 | +        # SFP4_TX_DIS U25 | 
|  | 133 | +        # SFP4_LOSS A18 | 
|  | 134 | +        # TODO: QSFP | 
|  | 135 | +        # QSFP1_TX_P D2 | 
|  | 136 | +        # QSFP1_TX_N D1 | 
|  | 137 | +        # QSFP2_TX_P B2 | 
|  | 138 | +        # QSFP2_TX_N B1 | 
|  | 139 | +        # QSFP3_TX_P C4 | 
|  | 140 | +        # QSFP3_TX_N C3 | 
|  | 141 | +        # QSFP4_TX_P A4 | 
|  | 142 | +        # QSFP4_TX_N A3 | 
|  | 143 | +        # QSFP1_RX_P E4 | 
|  | 144 | +        # QSFP1_RX_N E3 | 
|  | 145 | +        # QSFP2_RX_P B6 | 
|  | 146 | +        # QSFP2_RX_N B5 | 
|  | 147 | +        # QSFP3_RX_P D6 | 
|  | 148 | +        # QSFP3_RX_N D5 | 
|  | 149 | +        # QSFP4_RX_P A8 | 
|  | 150 | +        # QSFP4_RX_N A7 | 
|  | 151 | +        # QSFP_MODSELL R30 | 
|  | 152 | +        # QSFP_RESETL U30 | 
|  | 153 | +        # QSFP_MMODPRSL U22 | 
|  | 154 | +        # QSFP_INTL R24 | 
|  | 155 | +        # QSFP_LPMODE V26 | 
|  | 156 | +        # QSFP_SCL A20 | 
|  | 157 | +        # QSFP_SDA A21 | 
|  | 158 | +        # TODO: PCIe x8 | 
|  | 159 | +        # PCIE_RX0_P M6 | 
|  | 160 | +        # PCIE_RX0_N M5 | 
|  | 161 | +        # PCIE_RX1_P P6 | 
|  | 162 | +        # PCIE_RX1_N P5 | 
|  | 163 | +        # PCIE_RX2_P R4 | 
|  | 164 | +        # PCIE_RX2_N R3 | 
|  | 165 | +        # PCIE_RX3_P T6 | 
|  | 166 | +        # PCIE_RX3_N T5 | 
|  | 167 | +        # PCIE_RX4_P V6 | 
|  | 168 | +        # PCIE_RX4_N V5 | 
|  | 169 | +        # PCIE_RX5_P W4 | 
|  | 170 | +        # PCIE_RX5_N W3 | 
|  | 171 | +        # PCIE_RX6_P Y6 | 
|  | 172 | +        # PCIE_RX6_N Y5 | 
|  | 173 | +        # PCIE_RX7_P AA4 | 
|  | 174 | +        # PCIE_RX7_N AA3 | 
|  | 175 | +        # PCIE_TX0_P L4 | 
|  | 176 | +        # PCIE_TX0_N L3 | 
|  | 177 | +        # PCIE_TX1_P M2 | 
|  | 178 | +        # PCIE_TX1_N M1 | 
|  | 179 | +        # PCIE_TX2_P N4 | 
|  | 180 | +        # PCIE_TX2_N N3 | 
|  | 181 | +        # PCIE_TX3_P P2 | 
|  | 182 | +        # PCIE_TX3_N P1 | 
|  | 183 | +        # PCIE_TX4_P T2 | 
|  | 184 | +        # PCIE_TX4_N T1 | 
|  | 185 | +        # PCIE_TX5_P U4 | 
|  | 186 | +        # PCIE_TX5_N U3 | 
|  | 187 | +        # PCIE_TX6_P V2 | 
|  | 188 | +        # PCIE_TX6_N V1 | 
|  | 189 | +        # PCIE_TX7_P Y2 | 
|  | 190 | +        # PCIE_TX7_N Y1 | 
|  | 191 | +        # PCIE_PERST B18 | 
|  | 192 | +        Resource("temperature", 0, | 
|  | 193 | +            Subsignal("scl",        Pins("P23", dir="i")), | 
|  | 194 | +            Subsignal("sda",        Pins("N25", dir="i")), | 
|  | 195 | +            Attrs(IOSTANDARD="LVCMOS33") | 
|  | 196 | +        ), | 
|  | 197 | +        *SDCardResources(0, clk="AH21", cmd="AJ21", dat0="AJ22", dat1="AJ23", | 
|  | 198 | +                         dat2="AG20", dat3="AH20", cd="AE20", | 
|  | 199 | +                         attrs=Attrs(IOSTANDARD="LVCMOS33")), | 
|  | 200 | +        # TODO: FMC | 
|  | 201 | +        # TODO: J16 Expansion Header | 
|  | 202 | +        *ButtonResources(pins="AG27 AG28", attrs=Attrs(IOSTANDARD="LVCMOS33")), | 
|  | 203 | +    ] | 
|  | 204 | +    connectors  = [] | 
|  | 205 | + | 
|  | 206 | +    def toolchain_program(self, product, name): | 
|  | 207 | +        # openfpgaloader | 
|  | 208 | +        openfpgaloader = os.environ.get("OPENFPGALOADER", "openFPGALoader") | 
|  | 209 | +        with product.extract("{}.bin".format(name)) as fn: | 
|  | 210 | +            # included with board | 
|  | 211 | +            subprocess.check_call([openfpgaloader, "-c", "ft232", fn]) | 
|  | 212 | + | 
|  | 213 | + | 
|  | 214 | +if __name__ == "__main__": | 
|  | 215 | +    from .test.blinky import * | 
|  | 216 | +    AX7325BPlatform().build(Blinky(), do_program=True) | 
0 commit comments