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 ("clk100", 0, Pins("R4"), IOStandard("LVCMOS33")),
13 ("cpu_reset", 0, Pins("G4"), IOStandard("LVCMOS15")),
15 ("user_led", 0, Pins("T14"), IOStandard("LVCMOS25")),
16 ("user_led", 1, Pins("T15"), IOStandard("LVCMOS25")),
17 ("user_led", 2, Pins("T16"), IOStandard("LVCMOS25")),
18 ("user_led", 3, Pins("U16"), IOStandard("LVCMOS25")),
19 ("user_led", 4, Pins("V15"), IOStandard("LVCMOS25")),
20 ("user_led", 5, Pins("W16"), IOStandard("LVCMOS25")),
21 ("user_led", 6, Pins("W15"), IOStandard("LVCMOS25")),
22 ("user_led", 7, Pins("Y13"), IOStandard("LVCMOS25")),
24 ("user_sw", 0, Pins("E22"), IOStandard("LVCMOS25")),
25 ("user_sw", 1, Pins("F21"), IOStandard("LVCMOS25")),
26 ("user_sw", 2, Pins("G21"), IOStandard("LVCMOS25")),
27 ("user_sw", 3, Pins("G22"), IOStandard("LVCMOS25")),
28 ("user_sw", 4, Pins("H17"), IOStandard("LVCMOS25")),
29 ("user_sw", 5, Pins("J16"), IOStandard("LVCMOS25")),
30 ("user_sw", 6, Pins("K13"), IOStandard("LVCMOS25")),
31 ("user_sw", 7, Pins("M17"), IOStandard("LVCMOS25")),
34 ("user_btn", 0, Pins("B22"), IOStandard("LVCMOS25")),
35 ("user_btn", 1, Pins("D22"), IOStandard("LVCMOS25")),
36 ("user_btn", 2, Pins("C22"), IOStandard("LVCMOS25")),
37 ("user_btn", 3, Pins("D14"), IOStandard("LVCMOS25")),
38 ("user_btn", 4, Pins("F15"), IOStandard("LVCMOS25")),
39 ("user_btn", 5, Pins("G4"), IOStandard("LVCMOS25")),
41 ("vadj", 0, Pins("AA13 AB17"), IOStandard("LVCMOS25")),
44 Subsignal("dc", Pins("W22")),
45 Subsignal("res", Pins("U21")),
46 Subsignal("sclk", Pins("W21")),
47 Subsignal("sdin", Pins("Y22")),
48 Subsignal("vbat", Pins("P20")),
49 Subsignal("vdd", Pins("V22")),
50 IOStandard("LVCMOS33")
54 Subsignal("tx", Pins("AA19")),
55 Subsignal("rx", Pins("V18")),
56 IOStandard("LVCMOS33"),
59 ("usb_fifo", 0, # Can be used when FT2232H's Channel A configured to ASYNC FIFO 245 mode
60 Subsignal("data", Pins("U20 P14 P15 U17 R17 P16 R18 N14")),
61 Subsignal("rxf_n", Pins("N17")),
62 Subsignal("txe_n", Pins("Y19")),
63 Subsignal("rd_n", Pins("P19")),
64 Subsignal("wr_n", Pins("R19")),
65 Subsignal("siwua", Pins("P17")),
66 Subsignal("oe_n", Pins("V17")),
69 IOStandard("LVCMOS33"),
73 Subsignal("rst", Pins("V20")),
74 Subsignal("clk", Pins("W19")),
75 Subsignal("mosi", Pins("W20"), Misc("PULLUP True")),
76 Subsignal("cs_n", Pins("U18"), Misc("PULLUP True")),
77 Subsignal("miso", Pins("V19"), Misc("PULLUP True")),
79 IOStandard("LVCMOS33"),
83 Subsignal("rst", Pins("V20"), Misc("PULLUP True")),
84 Subsignal("data", Pins("V19 T21 T20 U18"), Misc("PULLUP True")),
85 Subsignal("cmd", Pins("W20"), Misc("PULLUP True")),
86 Subsignal("clk", Pins("W19")),
88 IOStandard("LVCMOS33"),
93 "M2 M5 M3 M1 L6 P1 N3 N2",
94 "M6 R1 L5 N5 N4 P2 P6"),
95 IOStandard("SSTL15")),
96 Subsignal("ba", Pins("L3 K6 L4"), IOStandard("SSTL15")),
97 Subsignal("ras_n", Pins("J4"), IOStandard("SSTL15")),
98 Subsignal("cas_n", Pins("K3"), IOStandard("SSTL15")),
99 Subsignal("we_n", Pins("L1"), IOStandard("SSTL15")),
100 Subsignal("dm", Pins("G3 F1"), IOStandard("SSTL15")),
101 Subsignal("dq", Pins(
102 "G2 H4 H5 J1 K1 H3 H2 J5",
103 "E3 B2 F3 D2 C2 A1 E2 B1"),
104 IOStandard("SSTL15"),
105 Misc("IN_TERM=UNTUNED_SPLIT_50")),
106 Subsignal("dqs_p", Pins("K2 E1"), IOStandard("DIFF_SSTL15")),
107 Subsignal("dqs_n", Pins("J2 D1"), IOStandard("DIFF_SSTL15")),
108 Subsignal("clk_p", Pins("P5"), IOStandard("DIFF_SSTL15")),
109 Subsignal("clk_n", Pins("P4"), IOStandard("DIFF_SSTL15")),
110 Subsignal("cke", Pins("J6"), IOStandard("SSTL15")),
111 Subsignal("odt", Pins("K4"), IOStandard("SSTL15")),
112 Subsignal("reset_n", Pins("G1"), IOStandard("SSTL15")),
117 Subsignal("tx", Pins("AA14")),
118 Subsignal("rx", Pins("V13")),
119 IOStandard("LVCMOS25")
122 Subsignal("rst_n", Pins("U7"), IOStandard("LVCMOS33")),
123 Subsignal("int_n", Pins("Y14")),
124 Subsignal("mdio", Pins("Y16")),
125 Subsignal("mdc", Pins("AA16")),
126 Subsignal("rx_ctl", Pins("W10")),
127 Subsignal("rx_data", Pins("AB16 AA15 AB15 AB11")),
128 Subsignal("tx_ctl", Pins("V10")),
129 Subsignal("tx_data", Pins("Y12 W12 W11 Y11")),
130 IOStandard("LVCMOS25")
134 Subsignal("clk_p", Pins("V4"), IOStandard("TMDS_33")),
135 Subsignal("clk_n", Pins("W4"), IOStandard("TMDS_33")),
136 Subsignal("data0_p", Pins("Y3"), IOStandard("TMDS_33")),
137 Subsignal("data0_n", Pins("AA3"), IOStandard("TMDS_33")),
138 Subsignal("data1_p", Pins("W2"), IOStandard("TMDS_33")),
139 Subsignal("data1_n", Pins("Y2"), IOStandard("TMDS_33")),
140 Subsignal("data2_p", Pins("U2"), IOStandard("TMDS_33")),
141 Subsignal("data2_n", Pins("V2"), IOStandard("TMDS_33")),
142 Subsignal("scl", Pins("Y4"), IOStandard("LVCMOS33")),
143 Subsignal("sda", Pins("AB5"), IOStandard("LVCMOS33")),
144 Subsignal("hpd_en", Pins("AB12"), IOStandard("LVCMOS25")),
145 Subsignal("cec", Pins("AA5"), IOStandard("LVCMOS33")), # FIXME
146 Subsignal("txen", Pins("R3"), IOStandard("LVCMOS33")), # FIXME
150 Subsignal("clk_p", Pins("T1"), IOStandard("TMDS_33")),
151 Subsignal("clk_n", Pins("U1"), IOStandard("TMDS_33")),
152 Subsignal("data0_p", Pins("W1"), IOStandard("TMDS_33")),
153 Subsignal("data0_n", Pins("Y1"), IOStandard("TMDS_33")),
154 Subsignal("data1_p", Pins("AA1"), IOStandard("TMDS_33")),
155 Subsignal("data1_n", Pins("AB1"), IOStandard("TMDS_33")),
156 Subsignal("data2_p", Pins("AB3"), IOStandard("TMDS_33")),
157 Subsignal("data2_n", Pins("AB2"), IOStandard("TMDS_33")),
158 Subsignal("scl", Pins("U3"), IOStandard("LVCMOS33")),
159 Subsignal("sda", Pins("V3"), IOStandard("LVCMOS33")),
160 Subsignal("cec", Pins("AA4"), IOStandard("LVCMOS33")), # FIXME
161 Subsignal("hdp", Pins("AB13"), IOStandard("LVCMOS25")), # FIXME
165 # Connectors ---------------------------------------------------------------------------------------
173 "GBTCLK0_M2C_P" : "F10",
174 "GBTCLK0_M2C_N" : "E10",
189 "CLK0_M2C_P" : "J19",
190 "CLK0_M2C_N" : "A19",
223 "CLK1_M2C_P" : "C18",
224 "CLK1_M2C_N" : "C19",
251 # Platform -----------------------------------------------------------------------------------------
253 class Platform(XilinxPlatform
):
254 default_clk_name
= "clk100"
255 default_clk_period
= 1e9
/100e6
258 XilinxPlatform
.__init
__(self
, "xc7a200t-sbg484-1", _io
, _connectors
, toolchain
="vivado")
259 self
.toolchain
.bitstream_commands
= \
260 ["set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]"]
261 self
.toolchain
.additional_commands
= \
262 ["write_cfgmem -force -format bin -interface spix4 -size 16 "
263 "-loadbit \"up 0x0 {build_name}.bit\" -file {build_name}.bin"]
264 self
.add_platform_command("set_property INTERNAL_VREF 0.750 [get_iobanks 35]")
266 def create_programmer(self
):
267 return OpenOCD("openocd_nexys_video.cfg", "bscan_spi_xc7a200t.bit")
269 def do_finalize(self
, fragment
):
270 XilinxPlatform
.do_finalize(self
, fragment
)
272 self
.add_period_constraint(self
.lookup_request("eth_clocks").rx
, 1e9
/125e6
)
273 except ConstraintError
:
276 def do_finalize(self
, fragment
):
277 XilinxPlatform
.do_finalize(self
, fragment
)
278 self
.add_period_constraint(self
.lookup_request("clk100", loose
=True), 1e9
/100e6
)
279 self
.add_period_constraint(self
.lookup_request("eth_clocks:rx", loose
=True), 1e9
/125e6
)