Skip to content

Commit da87cc0

Browse files
Merge pull request #665 from ciccio-87/myir_myc_j7a100t_initial_support
Added initial support (sdram, sdcard, rgmii ethernet) for MYiR MYC-J7A100T board.
2 parents a42dcb6 + 75e5766 commit da87cc0

File tree

2 files changed

+455
-0
lines changed

2 files changed

+455
-0
lines changed
Lines changed: 279 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,279 @@
1+
#
2+
# This file is part of LiteX-Boards.
3+
#
4+
# Copyright (c) 2025 Samuele Baisi <[email protected]>
5+
# SPDX-License-Identifier: BSD-2-Clause
6+
7+
from litex.build.generic_platform import *
8+
from litex.build.xilinx import Xilinx7SeriesPlatform, VivadoProgrammer
9+
10+
# IOs ----------------------------------------------------------------------------------------------
11+
12+
_io = [
13+
# Clk / Rst
14+
("clk200", 0,
15+
Subsignal("p", Pins("R4"), IOStandard("DIFF_SSTL15")),
16+
Subsignal("n", Pins("T4"), IOStandard("DIFF_SSTL15"))
17+
),
18+
("rst_n", 0, Pins("P15"), IOStandard("LVCMOS33")), # the closest button to the sdcard reader
19+
20+
21+
# Leds
22+
("user_led", 0, Pins("H15"), IOStandard("LVCMOS33")),
23+
("user_led", 1, Pins("J15"), IOStandard("LVCMOS33")),
24+
25+
# # Switches # better to be left alone for now
26+
# ("user_sw", 0, Pins("A8"), IOStandard("LVCMOS33")),
27+
# ("user_sw", 1, Pins("C11"), IOStandard("LVCMOS33")),
28+
# ("user_sw", 2, Pins("C10"), IOStandard("LVCMOS33")),
29+
# ("user_sw", 3, Pins("A10"), IOStandard("LVCMOS33")),
30+
31+
# Serial
32+
("serial", 0,
33+
Subsignal("tx", Pins("T18")),
34+
Subsignal("rx", Pins("R18")),
35+
IOStandard("LVCMOS33")
36+
),
37+
38+
# EEPROM
39+
("eeprom", 0,
40+
Subsignal("scl", Pins("K17"), Misc("PULLUP true")),
41+
Subsignal("sda", Pins("J17"), Misc("PULLUP true")),
42+
IOStandard("LVCMOS33")
43+
),
44+
45+
# SPI SDCard
46+
("spisdcard", 0,
47+
Subsignal("mosi", Pins("Y21")),
48+
Subsignal("miso", Pins("P19")),
49+
Subsignal("clk", Pins("V20")),
50+
Subsignal("cs_n", Pins("U18")),
51+
IOStandard("LVCMOS33"),
52+
),
53+
54+
# SDCard
55+
("sdcard", 0,
56+
Subsignal("data", Pins("P19 R19 U17 U18")),
57+
Subsignal("cmd", Pins("Y21")),
58+
Subsignal("clk", Pins("V20")),
59+
Subsignal("cd", Pins("AA19")),
60+
IOStandard("LVCMOS33"),
61+
),
62+
63+
# Buttons
64+
("user_btn", 0, Pins("P17"), IOStandard("LVCMOS33")),
65+
("user_btn", 1, Pins("N17"), IOStandard("LVCMOS33")),
66+
# ("user_btn", 2, Pins("P15"), IOStandard("LVCMOS33")), # used for reset
67+
68+
# SPIFlash
69+
("spiflash4x", 0,
70+
Subsignal("cs_n", Pins("T19")),
71+
Subsignal("dq", Pins("P22 R22 P21 R21 ")),
72+
IOStandard("LVCMOS33")
73+
),
74+
75+
# DDR3 SDRAM
76+
# single chip, 256 MB
77+
("ddram", 0,
78+
Subsignal("a", Pins(
79+
"V2 Y4 Y3 AB5 AB3 AA4 AA1 AA3 AB1 W2 W5 W1 AB6 Y2 Y1"),
80+
IOStandard("SSTL15")),
81+
Subsignal("ba", Pins("AA5 W4 AB7"), IOStandard("SSTL15")),
82+
Subsignal("ras_n", Pins("Y8"), IOStandard("SSTL15")),
83+
Subsignal("cas_n", Pins("AA8"), IOStandard("SSTL15")),
84+
Subsignal("we_n", Pins("AA6"), IOStandard("SSTL15")),
85+
Subsignal("cs_n", Pins("Y7"), IOStandard("SSTL15")),
86+
Subsignal("dm", Pins("M6 J4"), IOStandard("SSTL15")),
87+
Subsignal("dq", Pins(
88+
"R1 M5 P2 P6 N4 N5 N2 P1 L5 K3 K6 J6 M2 L3 M3 L4",
89+
),
90+
IOStandard("SSTL15"),
91+
),
92+
Subsignal("dqs_p", Pins("P5 M1"),
93+
IOStandard("DIFF_SSTL15"),
94+
),
95+
Subsignal("dqs_n", Pins("P4 L1"),
96+
IOStandard("DIFF_SSTL15"),
97+
),
98+
Subsignal("clk_p", Pins("T5"), IOStandard("DIFF_SSTL15")),
99+
Subsignal("clk_n", Pins("U5"), IOStandard("DIFF_SSTL15")),
100+
Subsignal("cke", Pins("Y9"), IOStandard("SSTL15")),
101+
Subsignal("odt", Pins("AB8"), IOStandard("SSTL15")),
102+
Subsignal("reset_n", Pins("AB2"), IOStandard("LVCMOS15")),
103+
# Misc("SLEW=FAST"),
104+
),
105+
# both chips, 512 MB
106+
("ddram", 1,
107+
Subsignal("a", Pins(
108+
"V2 Y4 Y3 AB5 AB3 AA4 AA1 AA3 AB1 W2 W5 W1 AB6 Y2 Y1"),
109+
IOStandard("SSTL15")),
110+
Subsignal("ba", Pins("AA5 W4 AB7"), IOStandard("SSTL15")),
111+
Subsignal("ras_n", Pins("Y8"), IOStandard("SSTL15")),
112+
Subsignal("cas_n", Pins("AA8"), IOStandard("SSTL15")),
113+
Subsignal("we_n", Pins("AA6"), IOStandard("SSTL15")),
114+
Subsignal("cs_n", Pins("Y7"), IOStandard("SSTL15")),
115+
Subsignal("dm", Pins("M6 J4 H2 B1"), IOStandard("SSTL15")),
116+
Subsignal("dq", Pins(
117+
"R1 M5 P2 P6 N4 N5 N2 P1 L5 K3 K6 J6 M2 L3 M3 L4",
118+
"G4 G3 J5 H3 H4 K1 H5 G2 E2 A1 G1 B2 F1 C2 F3 D2",
119+
),
120+
IOStandard("SSTL15"),
121+
),
122+
Subsignal("dqs_p", Pins("P5 M1 K2 E1"),
123+
IOStandard("DIFF_SSTL15"),
124+
),
125+
Subsignal("dqs_n", Pins("P4 L1 J2 D1"),
126+
IOStandard("DIFF_SSTL15"),
127+
),
128+
Subsignal("clk_p", Pins("T5"), IOStandard("DIFF_SSTL15")),
129+
Subsignal("clk_n", Pins("U5"), IOStandard("DIFF_SSTL15")),
130+
Subsignal("cke", Pins("Y9"), IOStandard("SSTL15")),
131+
Subsignal("odt", Pins("AB8"), IOStandard("SSTL15")),
132+
Subsignal("reset_n", Pins("AB2"), IOStandard("LVCMOS15")),
133+
# Misc("SLEW=FAST"),
134+
),
135+
136+
# RGMII Ethernet (the first port is the closest to the power switch)
137+
("eth_clocks", 0,
138+
Subsignal("rx", Pins("W19")),
139+
Subsignal("tx", Pins("W20")),
140+
IOStandard("LVCMOS33"),
141+
),
142+
("eth_clocks", 1,
143+
Subsignal("rx", Pins("Y18")),
144+
Subsignal("tx", Pins("Y19")),
145+
IOStandard("LVCMOS33"),
146+
),
147+
("eth", 0,
148+
Subsignal("rst_n", Pins("Y22")),
149+
Subsignal("mdio", Pins("V17")),
150+
Subsignal("mdc", Pins("W17")),
151+
Subsignal("rx_ctl", Pins("V18")),
152+
Subsignal("rx_data", Pins("U22 V22 T21 U21")),
153+
Subsignal("tx_ctl", Pins("U20")),
154+
Subsignal("tx_data", Pins("W21 W22 AA20 AA21")),
155+
# Subsignal("col", Pins("D17")),
156+
# Subsignal("crs", Pins("G14")),
157+
IOStandard("LVCMOS33"),
158+
),
159+
("eth", 1,
160+
Subsignal("rst_n", Pins("AB20")),
161+
Subsignal("mdio", Pins("P14")),
162+
Subsignal("mdc", Pins("R14")),
163+
Subsignal("rx_ctl", Pins("V19")),
164+
Subsignal("rx_data", Pins("AB21 AB22 AA18 AB18")),
165+
Subsignal("tx_ctl", Pins("P20")),
166+
Subsignal("tx_data", Pins("N13 N14 P16 R17")),
167+
# Subsignal("col", Pins("D17")),
168+
# Subsignal("crs", Pins("G14")),
169+
IOStandard("LVCMOS33"),
170+
),
171+
172+
# PCIe.
173+
("pcie_x1", 0,
174+
Subsignal("rst_n", Pins("R16"), IOStandard("LVCMOS33"), Misc("PULLUP=TRUE")),
175+
Subsignal("clk_p", Pins("F6")),
176+
Subsignal("clk_n", Pins("E6")),
177+
Subsignal("rx_p", Pins("B4")),
178+
Subsignal("rx_n", Pins("A4")),
179+
Subsignal("tx_p", Pins("B8")),
180+
Subsignal("tx_n", Pins("A8"))
181+
),
182+
("pcie_x2", 0,
183+
Subsignal("rst_n", Pins("R16"), IOStandard("LVCMOS33"), Misc("PULLUP=TRUE")),
184+
Subsignal("clk_p", Pins("F6")),
185+
Subsignal("clk_n", Pins("E6")),
186+
Subsignal("rx_p", Pins("B4 D5")),
187+
Subsignal("rx_n", Pins("A4 C5")),
188+
Subsignal("tx_p", Pins("B8 D11")),
189+
Subsignal("tx_n", Pins("A8 C11"))
190+
),
191+
192+
# SFP+
193+
("gtp_refclk", 0,
194+
Subsignal("p", Pins("F6")),
195+
Subsignal("n", Pins("E6"))
196+
),
197+
("gtp_refclk", 1,
198+
Subsignal("p", Pins("F10")),
199+
Subsignal("n", Pins("E10"))
200+
),
201+
("sfp", 0,
202+
Subsignal("rxp", Pins("B6")),
203+
Subsignal("rxn", Pins("A6")),
204+
Subsignal("txp", Pins("B10")),
205+
Subsignal("txn", Pins("A10")),
206+
),
207+
("sfp", 1,
208+
Subsignal("rxp", Pins("D7")),
209+
Subsignal("rxn", Pins("C7")),
210+
Subsignal("txp", Pins("D9")),
211+
Subsignal("txn", Pins("C9")),
212+
),
213+
214+
# HDMI Out
215+
("hdmi_out", 0,
216+
Subsignal("clk", Pins("J21")),
217+
Subsignal("de", Pins("H19")),
218+
Subsignal("hsync", Pins("J19")),
219+
Subsignal("vsync", Pins("J20")),
220+
Subsignal("scl", Pins("L19"), Misc("PULLUP true")),
221+
Subsignal("sda", Pins("L20"), Misc("PULLUP true")),
222+
Subsignal("rst_n", Pins("K18")),
223+
Subsignal("r", Pins("L18 M18 N18 N19 N20 M20 K13 K14")),
224+
Subsignal("g", Pins("H17 H18 J22 H22 H20 G20 K21 K22")),
225+
Subsignal("b", Pins("H13 G13 G15 G16 J14 H14 G17 G18")),
226+
Subsignal("int", Pins("K19"), Misc("PULLUP true")),
227+
IOStandard("LVCMOS33"),
228+
),
229+
230+
# HDMI In
231+
("hdmi_in", 0,
232+
Subsignal("clk", Pins("C19")),
233+
Subsignal("de", Pins("C18")),
234+
Subsignal("hsync", Pins("C17")),
235+
Subsignal("vsync", Pins("D12")),
236+
Subsignal("scl", Pins("E22"), Misc("PULLUP true")),
237+
Subsignal("sda", Pins("D22"), Misc("PULLUP true")),
238+
Subsignal("rst_n", Pins("F15")),
239+
Subsignal("r", Pins("A13 A14 B20 A20 A18 A19 D20 C20")),
240+
Subsignal("g", Pins("E13 E14 D14 D15 C13 B13 A15 A16")),
241+
Subsignal("b", Pins("F13 F14 F16 E17 C14 C15 E16 D16")),
242+
Subsignal("int", Pins("F21")),
243+
IOStandard("LVCMOS33"),
244+
)
245+
]
246+
247+
# Connectors ---------------------------------------------------------------------------------------
248+
249+
_connectors = []
250+
251+
252+
# Platform -----------------------------------------------------------------------------------------
253+
254+
class Platform(Xilinx7SeriesPlatform):
255+
default_clk_name = "clk200"
256+
default_clk_period = 1e9/200e6
257+
258+
def __init__(self, toolchain="vivado"):
259+
device = "xc7a100tfgg484-1"
260+
Xilinx7SeriesPlatform.__init__(self, device, _io, _connectors, toolchain=toolchain)
261+
self.toolchain.bitstream_commands = \
262+
[
263+
"set_property CFGBVS VCCO [current_design]",
264+
"set_property CONFIG_VOLTAGE 3.3 [current_design]",
265+
"set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]",
266+
"set_property CONFIG_MODE SPIx4 [current_design]",
267+
"set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]",
268+
269+
]
270+
self.toolchain.additional_commands = \
271+
["write_cfgmem -force -format bin -interface spix4 -size 16 "
272+
"-loadbit \"up 0x0 {build_name}.bit\" -file {build_name}.bin"]
273+
274+
def create_programmer(self):
275+
return VivadoProgrammer(flash_part='mx25l25673g-spi-x1_x2_x4')
276+
277+
def do_finalize(self, fragment):
278+
Xilinx7SeriesPlatform.do_finalize(self, fragment)
279+
self.add_period_constraint(self.lookup_request("clk200", loose=True), 5e8/100e6)

0 commit comments

Comments
 (0)