Skip to content

Commit 0362df2

Browse files
Merge pull request #729 from GMM-7550/gmm7550
GMM-7550 module support
2 parents 70480ac + f2046d2 commit 0362df2

3 files changed

Lines changed: 476 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ Some of the supported boards, see yours? Give LiteX-Boards a try!
167167
├── fpc_iii
168168
├── fpgawars_alhambra2
169169
├── gadgetfactory_papilio_pro
170+
├── gmm7550_usb3
170171
├── gsd_butterstick
171172
├── gsd_orangecrab
172173
├── hackaday_hadbadge

litex_boards/platforms/gmm7550.py

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
#
2+
# This file is part of LiteX-Boards.
3+
#
4+
# Copyright (c) 2026 Anton Kuzmin <ak@gmm7550.dev>
5+
#
6+
# Based on CologneChip GateMate Evaluation Board (colognechip_gatemate_evb)
7+
# Copyright (c) 2023 Gwenhael Goavec-merou<gwenhael.goavec-merou@trabucayre.com>
8+
# SPDX-License-Identifier: BSD-2-Clause
9+
10+
# Board documentation/schematics:
11+
# https://www.gmm7550.dev/doc/module.html
12+
13+
from litex.build.generic_platform import *
14+
from litex.build.colognechip.platform import CologneChipPlatform
15+
from litex.build.openfpgaloader import OpenFPGALoader
16+
17+
_io = [
18+
# Main reference clock (100 MHz, module PLL)
19+
("ser_clk", 0, Pins("SER_CLK")),
20+
21+
# SPI NOR Flash (FPGA configuration, MUXed with signals on P5 connector)
22+
("spiflash", 0,
23+
Subsignal("cs_n", Pins("IO_WA_A8")),
24+
Subsignal("clk", Pins("IO_WA_B8")),
25+
Subsignal("mosi", Pins("IO_WA_B7")), # D0
26+
Subsignal("miso", Pins("IO_WA_A7")), # D1
27+
Subsignal("wp", Pins("IO_WA_B6")), # D2
28+
Subsignal("hold", Pins("IO_WA_A6")), # D3
29+
),
30+
("spiflash4x", 0,
31+
Subsignal("cs_n", Pins("IO_WA_A8")),
32+
Subsignal("clk", Pins("IO_WA_B8")),
33+
Subsignal("dq", Pins("IO_WA_B7 IO_WA_A7 IO_WA_B6 IO_WA_A6")),
34+
),
35+
36+
# UART
37+
("serial", 0,
38+
Subsignal("rx", Pins("IO_WA_B6")), # SPI D2, P5/J5 pin 31
39+
Subsignal("tx", Pins("IO_WA_A6")), # SPI D3, P5/J5 pin 33
40+
),
41+
42+
# Status LEDs on the USB 3 Adapter board
43+
("led_red_n", 0, Pins("IO_WA_A2")), # CFG_FAILED_N, P5/J5 pin 35
44+
("led_green", 0, Pins("IO_WA_B2")), # CFG_DONE, P5/J5 pin 36
45+
46+
# JTAG
47+
("jtag", 0,
48+
Subsignal("tck", Pins("IO_WA_A5")),
49+
Subsignal("tms", Pins("IO_WA_B4")),
50+
Subsignal("tdi", Pins("IO_WA_A4")),
51+
Subsignal("tdo", Pins("IO_WA_B3")),
52+
),
53+
]
54+
55+
# GMM-7550 Module Connectors
56+
_connectors = [
57+
# West ------------------------
58+
("P1", "-", # 0
59+
" --- --- ", # 1 2
60+
"IO_WB_B1 IO_WB_B0", # 3 4
61+
"IO_WB_A1 IO_WB_A0", # 5 6
62+
" --- --- ", # 7 8
63+
"IO_WB_B2 IO_WB_B3", # 9 10
64+
"IO_WB_A2 IO_WB_A3", # 11 12
65+
" --- --- ", # 13 14
66+
"IO_WB_B4 IO_WB_B5", # 15 16
67+
"IO_WB_A4 IO_WB_A5", # 17 18
68+
" --- --- ", # 19 20
69+
"IO_WB_B6 IO_WB_B7", # 21 22
70+
"IO_WB_A6 IO_WB_A7", # 23 24
71+
" --- --- ", # 25 26
72+
"IO_WB_B8 IO_WC_B0", # 27 28
73+
"IO_WB_A8 IO_WC_A0", # 29 30
74+
"--- --- ", # 31 32
75+
"--- --- ", # 33 34
76+
"--- --- ", # 35 36
77+
"IO_WC_B1 IO_WC_B3", # 37 38
78+
"IO_WC_A1 IO_WC_A3", # 39 40
79+
" --- --- ", # 41 42
80+
"IO_WC_B2 IO_WC_B5", # 43 44
81+
"IO_WC_A2 IO_WC_A5", # 45 46
82+
" --- --- ", # 47 48
83+
"IO_WC_B4 IO_WC_B8", # 49 50
84+
"IO_WC_A4 IO_WC_A8", # 51 52
85+
" --- --- ", # 53 54
86+
"IO_WC_B6 IO_WC_B7", # 55 56
87+
"IO_WC_A6 IO_WC_A7", # 57 58
88+
" --- --- ", # 59 60
89+
),
90+
# North ------------------------
91+
("P2", "-", # 0
92+
" --- --- ", # 1 2
93+
"IO_NA_B2 IO_NA_B0", # 3 4
94+
"IO_NA_A2 IO_NA_A0", # 5 6
95+
" --- --- ", # 7 8
96+
"IO_NA_B3 IO_NA_B1", # 9 10
97+
"IO_NA_A3 IO_NA_A1", # 11 12
98+
" --- --- ", # 13 14
99+
"IO_NA_B5 IO_NA_B4", # 15 16
100+
"IO_NA_A5 IO_NA_A4", # 17 18
101+
" --- --- ", # 19 20
102+
"IO_NA_B6 IO_NA_B7", # 21 22
103+
"IO_NA_A6 IO_NA_A7", # 23 24
104+
" --- --- ", # 25 26
105+
"IO_NA_B8 IO_NB_B0", # 27 28
106+
"IO_NA_A8 IO_NB_A0", # 29 30
107+
"--- --- ", # 31 32
108+
"--- --- ", # 33 34
109+
"--- --- ", # 35 36
110+
"IO_NB_B1 IO_NB_B2", # 37 38
111+
"IO_NB_A1 IO_NB_A2", # 39 40
112+
" --- --- ", # 41 42
113+
"IO_NB_B3 IO_NB_B4", # 43 44
114+
"IO_NB_A3 IO_NB_A4", # 45 46
115+
" --- --- ", # 47 48
116+
"IO_NB_B5 IO_NB_B7", # 49 50
117+
"IO_NB_A5 IO_NB_A7", # 51 52
118+
" --- --- ", # 53 54
119+
"IO_NB_B6 IO_NB_B8", # 55 56
120+
"IO_NB_A6 IO_NB_A8", # 57 58
121+
" --- --- ", # 59 60
122+
),
123+
# East ------------------------
124+
("P3", "-", # 0
125+
" --- --- ", # 1 2
126+
"IO_EB_B7 IO_EB_B8", # 3 4
127+
"IO_EB_A7 IO_EB_A8", # 5 6
128+
" --- --- ", # 7 8
129+
"IO_EB_B5 IO_EB_B4", # 9 10
130+
"IO_EB_A5 IO_EB_A4", # 11 12
131+
" --- --- ", # 13 14
132+
"IO_EB_B6 IO_EB_B2", # 15 16
133+
"IO_EB_A6 IO_EB_A2", # 17 18
134+
" --- --- ", # 19 20
135+
"IO_EB_B3 IO_EB_B0", # 21 22
136+
"IO_EB_A3 IO_EB_A0", # 23 24
137+
" --- --- ", # 25 26
138+
"IO_EB_B1 IO_EA_B7", # 27 28
139+
"IO_EB_A1 IO_EA_A7", # 29 30
140+
"--- --- ", # 31 32
141+
"--- --- ", # 33 34
142+
"--- --- ", # 35 36
143+
"IO_EA_B8 IO_EA_B4", # 37 38
144+
"IO_EA_A8 IO_EA_A4", # 39 40
145+
" --- --- ", # 41 42
146+
"IO_EA_B6 IO_EA_B2", # 43 44
147+
"IO_EA_A6 IO_EA_A2", # 45 46
148+
" --- --- ", # 47 48
149+
"IO_EA_B5 IO_EA_B1", # 49 50
150+
"IO_EA_A5 IO_EA_A1", # 51 52
151+
" --- --- ", # 53 54
152+
"IO_EA_B3 IO_EA_B0", # 55 56
153+
"IO_EA_A3 IO_EA_A0", # 57 58
154+
" --- --- ", # 59 60
155+
),
156+
# South ------------------------
157+
("P4", "-", # 0
158+
" --- --- ", # 1 2
159+
"IO_SB_B8 IO_SB_B3", # 3 4
160+
"IO_SB_A8 IO_SB_A3", # 5 6
161+
" --- --- ", # 7 8
162+
"IO_SB_B6 IO_SB_B2", # 9 10
163+
"IO_SB_A6 IO_SB_A2", # 11 12
164+
" --- --- ", # 13 14
165+
"IO_SB_B5 IO_SB_B1", # 15 16
166+
"IO_SB_A5 IO_SB_A1", # 17 18
167+
" --- --- ", # 19 20
168+
"IO_SB_B7 IO_SB_B0", # 21 22
169+
"IO_SB_A7 IO_SB_A0", # 23 24
170+
" --- --- ", # 25 26
171+
"IO_SB_B4 IO_SA_B8", # 27 28
172+
"IO_SB_A4 IO_SA_A8", # 29 30
173+
"--- --- ", # 31 32
174+
"--- --- ", # 33 34
175+
"--- --- ", # 35 36
176+
"IO_SA_B6 IO_SA_B7", # 37 38
177+
"IO_SA_A6 IO_SA_A7", # 39 40
178+
" --- --- ", # 41 42
179+
"IO_SA_B4 IO_SA_B5", # 43 44
180+
"IO_SA_A4 IO_SA_A5", # 45 46
181+
" --- --- ", # 47 48
182+
"IO_SA_B2 IO_SA_B3", # 49 50
183+
"IO_SA_A2 IO_SA_A3", # 51 52
184+
" --- --- ", # 53 54
185+
"IO_SA_B1 IO_SA_B0", # 55 56
186+
"IO_SA_A1 IO_SA_A0", # 57 58
187+
" --- --- ", # 59 60
188+
),
189+
]
190+
191+
# Platform -----------------------------------------------------------------------------------------
192+
193+
class Platform(CologneChipPlatform):
194+
default_clk_name = "ser_clk"
195+
default_clk_period = 1e9/100e6
196+
197+
def __init__(self, toolchain="peppercorn"):
198+
CologneChipPlatform.__init__(self, "CCGM1A1", _io, _connectors, toolchain=toolchain)
199+
200+
def create_programmer(self):
201+
return OpenFPGALoader(cable="dirtyJtag")
202+
203+
def do_finalize(self, fragment):
204+
CologneChipPlatform.do_finalize(self, fragment)
205+
self.add_period_constraint(self.lookup_request(self.default_clk_name, loose=True),
206+
self.default_clk_period)

0 commit comments

Comments
 (0)