Skip to content

Commit 30fa032

Browse files
timkpainewhitequark
authored andcommitted
Adding alinx ax7325b
1 parent 85d91df commit 30fa032

File tree

1 file changed

+266
-0
lines changed

1 file changed

+266
-0
lines changed

amaranth_boards/alinx_ax7325b.py

Lines changed: 266 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
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(156.25e6), 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="LVCMOS15")),
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="AA12 AB12 AA8 AB8 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+
# QSPI Flash
95+
*SPIFlashResources(0,
96+
cs_n="U19", clk="B10", copi="P24", cipo="R25", wp_n="R20", hold_n="R21",
97+
attrs=Attrs(IOSTANDARD="LVCMOS33")
98+
),
99+
UARTResource(0,
100+
rx="AJ26", tx="AK26",
101+
attrs=Attrs(IOSTANDARD="LVCMOS33")
102+
),
103+
# 4x SFP (BANK117, ref clock 156.25MHz)
104+
Resource("sfp", 0,
105+
Subsignal("tx", DiffPairs(p="K2", n="K1", dir="o")),
106+
Subsignal("rx", DiffPairs(p="K6", n="K5", dir="i")),
107+
Subsignal("tx_dis", Pins("T28", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
108+
Subsignal("loss", Pins("R28", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
109+
),
110+
Resource("sfp", 1,
111+
Subsignal("tx", DiffPairs(p="J4", n="J3", dir="o")),
112+
Subsignal("rx", DiffPairs(p="H6", n="H5", dir="i")),
113+
Subsignal("tx_dis", Pins("T28", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
114+
Subsignal("loss", Pins("T26", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
115+
),
116+
Resource("sfp", 2,
117+
Subsignal("tx", DiffPairs(p="H2", n="H1", dir="o")),
118+
Subsignal("rx", DiffPairs(p="G4", n="G3", dir="i")),
119+
Subsignal("tx_dis", Pins("U28", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
120+
Subsignal("loss", Pins("U27", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
121+
),
122+
Resource("sfp", 3,
123+
Subsignal("tx", DiffPairs(p="F2", n="F1", dir="o")),
124+
Subsignal("rx", DiffPairs(p="F6", n="F5", dir="i")),
125+
Subsignal("tx_dis", Pins("U25", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
126+
Subsignal("loss", Pins("A18", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
127+
),
128+
# QSFP+ (BANK118, ref clock 125MHz)
129+
Resource("qsfp", 0,
130+
Subsignal("tx", DiffPairs(p="D2 B2 C4 A4", n="D1 B1 C3 A3", dir="o")),
131+
Subsignal("rx", DiffPairs(p="E4 B6 D6 A8", n="E3 B5 D5 A7", dir="i")),
132+
Subsignal("modsel", PinsN("R30", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
133+
Subsignal("rst", PinsN("U30", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
134+
Subsignal("modprs", PinsN("U22", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
135+
Subsignal("int", PinsN("R24", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
136+
Subsignal("lpmode", Pins("V26", dir="o"), Attrs(IOSTANDARD="LVCMOS33")),
137+
Subsignal("scl", Pins("A20", dir="io"), Attrs(IOSTANDARD="LVCMOS33")),
138+
Subsignal("sda", Pins("A21", dir="io"), Attrs(IOSTANDARD="LVCMOS33")),
139+
),
140+
# PCIe x8 (BANK115, BANK116)
141+
Resource("pcie", 0,
142+
Subsignal("rst", PinsN("B18", dir="i"), Attrs(IOSTANDARD="LVCMOS33")),
143+
Subsignal("rx", DiffPairs(p="M6 P6 R4 T6 V6 W4 Y6 AA4",
144+
n="M5 P5 R3 T5 V5 W3 Y5 AA3", dir="i")),
145+
Subsignal("tx", DiffPairs(p="L4 M2 N4 P2 T2 U4 V2 Y2",
146+
n="L3 M1 N3 P1 T1 U3 V1 Y1", dir="o")),
147+
),
148+
Resource("temperature", 0,
149+
Subsignal("scl", Pins("P23", dir="i")),
150+
Subsignal("sda", Pins("N25", dir="i")),
151+
Attrs(IOSTANDARD="LVCMOS33")
152+
),
153+
*SDCardResources(0, clk="AH21", cmd="AJ21", dat0="AJ22", dat1="AJ23",
154+
dat2="AG20", dat3="AH20", cd="AE20",
155+
attrs=Attrs(IOSTANDARD="LVCMOS25")),
156+
*ButtonResources(pins="AG27 AG28", attrs=Attrs(IOSTANDARD="LVCMOS25")),
157+
]
158+
connectors = [
159+
# FMC LPC connector (BANK12, BANK13, VADJ=2.5V)
160+
Connector("fmc", 0,
161+
{"clk0_p": "AD23",
162+
"clk0_n": "AE24",
163+
"clk1_p": "AG29",
164+
"clk1_n": "AH29",
165+
"la00_cc_p": "AF22",
166+
"la00_cc_n": "AG23",
167+
"la01_cc_p": "AG24",
168+
"la01_cc_n": "AH24",
169+
"la02_p": "AK23",
170+
"la02_n": "AK24",
171+
"la03_p": "AJ24",
172+
"la03_n": "AK25",
173+
"la04_p": "AG25",
174+
"la04_n": "AH25",
175+
"la05_p": "AE23",
176+
"la05_n": "AF23",
177+
"la06_p": "AG22",
178+
"la06_n": "AH22",
179+
"la07_p": "AC24",
180+
"la07_n": "AD24",
181+
"la08_p": "AE25",
182+
"la08_n": "AF25",
183+
"la09_p": "AC22",
184+
"la09_n": "AD22",
185+
"la10_p": "AD21",
186+
"la10_n": "AE21",
187+
"la11_p": "AB22",
188+
"la11_n": "AB23",
189+
"la12_p": "AB24",
190+
"la12_n": "AC25",
191+
"la13_p": "AC20",
192+
"la13_n": "AC21",
193+
"la14_p": "Y21",
194+
"la14_n": "AA21",
195+
"la15_p": "Y23",
196+
"la15_n": "Y24",
197+
"la16_p": "AA22",
198+
"la16_n": "AA23",
199+
"la17_cc_p": "AE28",
200+
"la17_cc_n": "AF28",
201+
"la18_cc_p": "AB27",
202+
"la18_cc_n": "AC27",
203+
"la19_p": "AK29",
204+
"la19_n": "AK30",
205+
"la20_p": "AJ27",
206+
"la20_n": "AK28",
207+
"la21_p": "AG30",
208+
"la21_n": "AH30",
209+
"la22_p": "AJ28",
210+
"la22_n": "AJ29",
211+
"la23_p": "AA27",
212+
"la23_n": "AB28",
213+
"la24_p": "AD29",
214+
"la24_n": "AE29",
215+
"la25_p": "AE30",
216+
"la25_n": "AF30",
217+
"la26_p": "Y28",
218+
"la26_n": "AA28",
219+
"la27_p": "Y26",
220+
"la27_n": "AA26",
221+
"la28_p": "AC29",
222+
"la28_n": "AC30",
223+
"la29_p": "AD27",
224+
"la29_n": "AD28",
225+
"la30_p": "Y30",
226+
"la30_n": "AA30",
227+
"la31_p": "AB29",
228+
"la31_n": "AB30",
229+
"la32_p": "W27",
230+
"la32_n": "W28",
231+
"la33_p": "W29",
232+
"la33_n": "Y29",
233+
"scl": "A16",
234+
"sda": "A17"}),
235+
# J16 Expansion Header (active pins only, numbered by header pin)
236+
Connector("j16", 0,
237+
{ "3": "J24", "4": "J23",
238+
"5": "J22", "6": "J21",
239+
"7": "J26", "8": "K26",
240+
"9": "K30", "10": "L30",
241+
"11": "L28", "12": "M28",
242+
"13": "M27", "14": "N27",
243+
"15": "N30", "16": "N29",
244+
"17": "L27", "18": "L26",
245+
"19": "J28", "20": "J27",
246+
"21": "H29", "22": "J29",
247+
"23": "K29", "24": "K28",
248+
"25": "L20", "26": "M20",
249+
"27": "K21", "28": "L21",
250+
"29": "L23", "30": "L22",
251+
"31": "K24", "32": "K23",
252+
"33": "K25", "34": "L25",
253+
"35": "M29", "36": "M19"}),
254+
]
255+
256+
def toolchain_program(self, product, name):
257+
# openfpgaloader
258+
openfpgaloader = os.environ.get("OPENFPGALOADER", "openFPGALoader")
259+
with product.extract("{}.bin".format(name)) as fn:
260+
# included with board
261+
subprocess.check_call([openfpgaloader, "-c", "ft232", fn])
262+
263+
264+
if __name__ == "__main__":
265+
from .test.blinky import *
266+
AX7325BPlatform().build(Blinky(), do_program=True)

0 commit comments

Comments
 (0)