6dbb9456ffaafd85a19f0ae913b13beb3c554504
1 # This file is Copyright (c) 2015-2019 Florent Kermarrec <florent@enjoy-digital.fr>
4 from litex
.build
.generic_platform
import *
5 from litex
.build
.xilinx
import XilinxPlatform
, VivadoProgrammer
6 from litex
.build
.openocd
import OpenOCD
8 # IOs ----------------------------------------------------------------------------------------------
11 ("user_led", 0, Pins("T14"), IOStandard("LVCMOS25")),
12 ("user_led", 1, Pins("T15"), IOStandard("LVCMOS25")),
13 ("user_led", 2, Pins("T16"), IOStandard("LVCMOS25")),
14 ("user_led", 3, Pins("U16"), IOStandard("LVCMOS25")),
15 ("user_led", 4, Pins("V15"), IOStandard("LVCMOS25")),
16 ("user_led", 5, Pins("W16"), IOStandard("LVCMOS25")),
17 ("user_led", 6, Pins("W15"), IOStandard("LVCMOS25")),
18 ("user_led", 7, Pins("Y13"), IOStandard("LVCMOS25")),
20 ("user_sw", 0, Pins("E22"), IOStandard("LVCMOS25")),
21 ("user_sw", 1, Pins("F21"), IOStandard("LVCMOS25")),
22 ("user_sw", 2, Pins("G21"), IOStandard("LVCMOS25")),
23 ("user_sw", 3, Pins("G22"), IOStandard("LVCMOS25")),
24 ("user_sw", 4, Pins("H17"), IOStandard("LVCMOS25")),
25 ("user_sw", 5, Pins("J16"), IOStandard("LVCMOS25")),
26 ("user_sw", 6, Pins("K13"), IOStandard("LVCMOS25")),
27 ("user_sw", 7, Pins("M17"), IOStandard("LVCMOS25")),
30 ("user_btn", 0, Pins("B22"), IOStandard("LVCMOS25")),
31 ("user_btn", 1, Pins("D22"), IOStandard("LVCMOS25")),
32 ("user_btn", 2, Pins("C22"), IOStandard("LVCMOS25")),
33 ("user_btn", 3, Pins("D14"), IOStandard("LVCMOS25")),
34 ("user_btn", 4, Pins("F15"), IOStandard("LVCMOS25")),
35 ("user_btn", 5, Pins("G4"), IOStandard("LVCMOS25")),
37 ("vadj", 0, Pins("AA13 AB17"), IOStandard("LVCMOS25")),
40 Subsignal("dc", Pins("W22")),
41 Subsignal("res", Pins("U21")),
42 Subsignal("sclk", Pins("W21")),
43 Subsignal("sdin", Pins("Y22")),
44 Subsignal("vbat", Pins("P20")),
45 Subsignal("vdd", Pins("V22")),
46 IOStandard("LVCMOS33")
49 ("clk100", 0, Pins("R4"), IOStandard("LVCMOS33")),
51 ("cpu_reset", 0, Pins("G4"), IOStandard("LVCMOS15")),
54 Subsignal("tx", Pins("AA19")),
55 Subsignal("rx", Pins("V18")),
56 IOStandard("LVCMOS33"),
61 "M2 M5 M3 M1 L6 P1 N3 N2",
62 "M6 R1 L5 N5 N4 P2 P6"),
63 IOStandard("SSTL15")),
64 Subsignal("ba", Pins("L3 K6 L4"), IOStandard("SSTL15")),
65 Subsignal("ras_n", Pins("J4"), IOStandard("SSTL15")),
66 Subsignal("cas_n", Pins("K3"), IOStandard("SSTL15")),
67 Subsignal("we_n", Pins("L1"), IOStandard("SSTL15")),
68 Subsignal("dm", Pins("G3 F1"), IOStandard("SSTL15")),
70 "G2 H4 H5 J1 K1 H3 H2 J5",
71 "E3 B2 F3 D2 C2 A1 E2 B1"),
73 Misc("IN_TERM=UNTUNED_SPLIT_50")),
74 Subsignal("dqs_p", Pins("K2 E1"), IOStandard("DIFF_SSTL15")),
75 Subsignal("dqs_n", Pins("J2 D1"), IOStandard("DIFF_SSTL15")),
76 Subsignal("clk_p", Pins("P5"), IOStandard("DIFF_SSTL15")),
77 Subsignal("clk_n", Pins("P4"), IOStandard("DIFF_SSTL15")),
78 Subsignal("cke", Pins("J6"), IOStandard("SSTL15")),
79 Subsignal("odt", Pins("K4"), IOStandard("SSTL15")),
80 Subsignal("reset_n", Pins("G1"), IOStandard("SSTL15")),
85 Subsignal("tx", Pins("AA14")),
86 Subsignal("rx", Pins("V13")),
87 IOStandard("LVCMOS25")
90 Subsignal("rst_n", Pins("U7"), IOStandard("LVCMOS33")),
91 Subsignal("int_n", Pins("Y14")),
92 Subsignal("mdio", Pins("Y16")),
93 Subsignal("mdc", Pins("AA16")),
94 Subsignal("rx_ctl", Pins("W10")),
95 Subsignal("rx_data", Pins("AB16 AA15 AB15 AB11")),
96 Subsignal("tx_ctl", Pins("V10")),
97 Subsignal("tx_data", Pins("Y12 W12 W11 Y11")),
98 IOStandard("LVCMOS25")
102 Subsignal("clk_p", Pins("V4"), IOStandard("TMDS_33")),
103 Subsignal("clk_n", Pins("W4"), IOStandard("TMDS_33")),
104 Subsignal("data0_p", Pins("Y3"), IOStandard("TMDS_33")),
105 Subsignal("data0_n", Pins("AA3"), IOStandard("TMDS_33")),
106 Subsignal("data1_p", Pins("W2"), IOStandard("TMDS_33")),
107 Subsignal("data1_n", Pins("Y2"), IOStandard("TMDS_33")),
108 Subsignal("data2_p", Pins("U2"), IOStandard("TMDS_33")),
109 Subsignal("data2_n", Pins("V2"), IOStandard("TMDS_33")),
110 Subsignal("scl", Pins("Y4"), IOStandard("LVCMOS33")),
111 Subsignal("sda", Pins("AB5"), IOStandard("LVCMOS33")),
112 Subsignal("hpd_en", Pins("AB12"), IOStandard("LVCMOS25")),
113 Subsignal("cec", Pins("AA5"), IOStandard("LVCMOS33")), # FIXME
114 Subsignal("txen", Pins("R3"), IOStandard("LVCMOS33")), # FIXME
118 Subsignal("clk_p", Pins("T1"), IOStandard("TMDS_33")),
119 Subsignal("clk_n", Pins("U1"), IOStandard("TMDS_33")),
120 Subsignal("data0_p", Pins("W1"), IOStandard("TMDS_33")),
121 Subsignal("data0_n", Pins("Y1"), IOStandard("TMDS_33")),
122 Subsignal("data1_p", Pins("AA1"), IOStandard("TMDS_33")),
123 Subsignal("data1_n", Pins("AB1"), IOStandard("TMDS_33")),
124 Subsignal("data2_p", Pins("AB3"), IOStandard("TMDS_33")),
125 Subsignal("data2_n", Pins("AB2"), IOStandard("TMDS_33")),
126 Subsignal("scl", Pins("U3"), IOStandard("LVCMOS33")),
127 Subsignal("sda", Pins("V3"), IOStandard("LVCMOS33")),
128 Subsignal("cec", Pins("AA4"), IOStandard("LVCMOS33")), # FIXME
129 Subsignal("hdp", Pins("AB13"), IOStandard("LVCMOS25")), # FIXME
133 # Connectors ---------------------------------------------------------------------------------------
141 "GBTCLK0_M2C_P" : "F10",
142 "GBTCLK0_M2C_N" : "E10",
157 "CLK0_M2C_P" : "J19",
158 "CLK0_M2C_N" : "A19",
191 "CLK1_M2C_P" : "C18",
192 "CLK1_M2C_N" : "C19",
219 # Platform -----------------------------------------------------------------------------------------
221 class Platform(XilinxPlatform
):
222 default_clk_name
= "clk100"
223 default_clk_period
= 1e9
/100e6
226 XilinxPlatform
.__init
__(self
, "xc7a200t-sbg484-1", _io
, _connectors
, toolchain
="vivado")
227 self
.toolchain
.bitstream_commands
= \
228 ["set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]"]
229 self
.toolchain
.additional_commands
= \
230 ["write_cfgmem -force -format bin -interface spix4 -size 16 "
231 "-loadbit \"up 0x0 {build_name}.bit\" -file {build_name}.bin"]
232 self
.add_platform_command("set_property INTERNAL_VREF 0.750 [get_iobanks 35]")
234 def create_programmer(self
):
235 return OpenOCD("openocd_xc7_ft2232.cfg", "bscan_spi_xc7a200t.bit")
237 def do_finalize(self
, fragment
):
238 XilinxPlatform
.do_finalize(self
, fragment
)
240 self
.add_period_constraint(self
.lookup_request("eth_clocks").rx
, 1e9
/125e6
)
241 except ConstraintError
:
244 def do_finalize(self
, fragment
):
245 XilinxPlatform
.do_finalize(self
, fragment
)
246 self
.add_period_constraint(self
.lookup_request("clk100", loose
=True), 1e9
/100e6
)
247 self
.add_period_constraint(self
.lookup_request("eth_clocks:rx", loose
=True), 1e9
/125e6
)