Skip to content

Commit 107cc27

Browse files
committed
Support variants for ECP5
1 parent f1e5710 commit 107cc27

File tree

8 files changed

+118
-448
lines changed

8 files changed

+118
-448
lines changed

devices.json

Lines changed: 102 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,8 @@
22
"families": {
33
"ECP5": {
44
"devices": {
5-
"LFE5U-12F": {
6-
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
7-
"idcode": "0x21111043",
8-
"frames": 7562,
9-
"bits_per_frame": 592,
10-
"pad_bits_after_frame": 0,
11-
"pad_bits_before_frame": 0,
12-
"max_row" : 50,
13-
"max_col" : 72,
14-
"row_bias" : 0,
15-
"col_bias" : 0,
16-
"fuzz": 1
17-
},
185
"LFE5U-25F": {
196
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
20-
"idcode": "0x41111043",
217
"frames": 7562,
228
"bits_per_frame": 592,
239
"pad_bits_after_frame": 0,
@@ -26,11 +12,30 @@
2612
"max_col" : 72,
2713
"row_bias" : 0,
2814
"col_bias" : 0,
29-
"fuzz": 1
15+
"fuzz": 1,
16+
"variants": {
17+
"LFE5U-25F": {
18+
"idcode": "0x41111043",
19+
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
20+
"speeds": [ 6, 7, 8 ],
21+
"suffixes": [ "C", "I" ]
22+
},
23+
"LFE5U-12F": {
24+
"idcode": "0x21111043",
25+
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
26+
"speeds": [ 6, 7, 8 ],
27+
"suffixes": [ "C", "I" ]
28+
},
29+
"LAE5U-12F": {
30+
"idcode": "0x21111043",
31+
"packages": ["caBGA381"],
32+
"speeds": [ 6, 7 ],
33+
"suffixes": [ "E" ]
34+
}
35+
}
3036
},
3137
"LFE5U-45F": {
3238
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
33-
"idcode": "0x41112043",
3439
"frames": 9470,
3540
"bits_per_frame": 846,
3641
"pad_bits_after_frame": 0,
@@ -39,11 +44,18 @@
3944
"max_col" : 90,
4045
"row_bias" : 0,
4146
"col_bias" : 0,
42-
"fuzz": 1
47+
"fuzz": 1,
48+
"variants": {
49+
"LFE5U-45F": {
50+
"idcode": "0x41112043",
51+
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
52+
"speeds": [ 6, 7, 8 ],
53+
"suffixes": [ "C", "I" ]
54+
}
55+
}
4356
},
4457
"LFE5U-85F": {
4558
"packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"],
46-
"idcode": "0x41113043",
4759
"frames": 13294,
4860
"bits_per_frame": 1136,
4961
"pad_bits_after_frame": 0,
@@ -52,11 +64,18 @@
5264
"max_col" : 126,
5365
"row_bias" : 0,
5466
"col_bias" : 0,
55-
"fuzz": 1
67+
"fuzz": 1,
68+
"variants": {
69+
"LFE5U-85F": {
70+
"idcode": "0x41113043",
71+
"packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"],
72+
"speeds": [ 6, 7, 8 ],
73+
"suffixes": [ "C", "I" ]
74+
}
75+
}
5676
},
5777
"LFE5UM-25F": {
5878
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
59-
"idcode": "0x01111043",
6079
"frames": 7562,
6180
"bits_per_frame": 592,
6281
"pad_bits_after_frame": 0,
@@ -65,11 +84,30 @@
6584
"max_col" : 72,
6685
"row_bias" : 0,
6786
"col_bias" : 0,
68-
"fuzz": 1
87+
"fuzz": 1,
88+
"variants": {
89+
"LFE5UM-25F": {
90+
"idcode": "0x01111043",
91+
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
92+
"speeds": [ 6, 7, 8 ],
93+
"suffixes": [ "C", "I" ]
94+
},
95+
"LAE5UM-25F": {
96+
"idcode": "0x01111043",
97+
"packages": ["csfBGA285", "caBGA381"],
98+
"speeds": [ 6, 7 ],
99+
"suffixes": [ "E" ]
100+
},
101+
"LFE5UM5G-25F": {
102+
"idcode": "0x81111043",
103+
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
104+
"speeds": [ 8 ],
105+
"suffixes": [ "C", "I" ]
106+
}
107+
}
69108
},
70109
"LFE5UM-45F": {
71110
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
72-
"idcode": "0x01112043",
73111
"frames": 9470,
74112
"bits_per_frame": 846,
75113
"pad_bits_after_frame": 0,
@@ -78,50 +116,30 @@
78116
"max_col" : 90,
79117
"row_bias" : 0,
80118
"col_bias" : 0,
81-
"fuzz": 1
119+
"fuzz": 1,
120+
"variants": {
121+
"LFE5UM-45F": {
122+
"idcode": "0x01112043",
123+
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
124+
"speeds": [ 6, 7, 8 ],
125+
"suffixes": [ "C", "I" ]
126+
},
127+
"LAE5UM-45F": {
128+
"idcode": "0x01112043",
129+
"packages": ["csfBGA285", "caBGA381"],
130+
"speeds": [ 6, 7 ],
131+
"suffixes": [ "E" ]
132+
},
133+
"LFE5UM5G-45F": {
134+
"idcode": "0x81112043",
135+
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
136+
"speeds": [ 8 ],
137+
"suffixes": [ "C", "I" ]
138+
}
139+
}
82140
},
83141
"LFE5UM-85F": {
84142
"packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"],
85-
"idcode": "0x01113043",
86-
"frames": 13294,
87-
"bits_per_frame": 1136,
88-
"pad_bits_after_frame": 0,
89-
"pad_bits_before_frame": 0,
90-
"max_row" : 95,
91-
"max_col" : 126,
92-
"row_bias" : 0,
93-
"col_bias" : 0,
94-
"fuzz": 1
95-
},
96-
"LFE5UM5G-25F": {
97-
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
98-
"idcode": "0x81111043",
99-
"frames": 7562,
100-
"bits_per_frame": 592,
101-
"pad_bits_after_frame": 0,
102-
"pad_bits_before_frame": 0,
103-
"max_row" : 50,
104-
"max_col" : 72,
105-
"row_bias" : 0,
106-
"col_bias" : 0,
107-
"fuzz": 1
108-
},
109-
"LFE5UM5G-45F": {
110-
"packages": ["csfBGA285", "caBGA256", "caBGA381", "caBGA554", "caBGA756"],
111-
"idcode": "0x81112043",
112-
"frames": 9470,
113-
"bits_per_frame": 846,
114-
"pad_bits_after_frame": 0,
115-
"pad_bits_before_frame": 2,
116-
"max_row" : 71,
117-
"max_col" : 90,
118-
"row_bias" : 0,
119-
"col_bias" : 0,
120-
"fuzz": 1
121-
},
122-
"LFE5UM5G-85F": {
123-
"packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"],
124-
"idcode": "0x81113043",
125143
"frames": 13294,
126144
"bits_per_frame": 1136,
127145
"pad_bits_after_frame": 0,
@@ -130,7 +148,27 @@
130148
"max_col" : 126,
131149
"row_bias" : 0,
132150
"col_bias" : 0,
133-
"fuzz": 1
151+
"fuzz": 1,
152+
"variants": {
153+
"LFE5UM-85F": {
154+
"idcode": "0x01113043",
155+
"packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"],
156+
"speeds": [ 6, 7, 8 ],
157+
"suffixes": [ "C", "I"]
158+
},
159+
"LAE5UM-85F": {
160+
"idcode": "0x01113043",
161+
"packages": ["caBGA756"],
162+
"speeds": [ 6, 7 ],
163+
"suffixes": [ "E" ]
164+
},
165+
"LFE5UM5G-85F": {
166+
"idcode": "0x81113043",
167+
"packages": ["csfBGA285", "caBGA381", "caBGA554", "caBGA756"],
168+
"speeds": [ 8 ],
169+
"suffixes": [ "C", "I" ]
170+
}
171+
}
134172
}
135173
}
136174
},

libtrellis/src/ChipConfig.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ string ChipConfig::to_string() const
1212
{
1313
stringstream ss;
1414
ss << ".device " << chip_name << endl << endl;
15-
if (!chip_variant.empty())
16-
ss << ".variant " << chip_variant << endl << endl;
15+
ss << ".variant " << chip_variant << endl << endl;
1716
for (const auto &meta : metadata)
1817
ss << ".comment " << meta << endl;
1918
for (const auto &sc : sysconfig)

libtrellis/src/Database.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,21 @@ DeviceLocator find_device_by_name(string name) {
6363
return *found;
6464
}
6565

66+
static string device_legacy_mapping(string variant)
67+
{
68+
if (variant == "LFE5U-12F") return "LFE5U-25F";
69+
if (variant == "LFE5UM5G-25F") return "LFE5UM-25F";
70+
if (variant == "LFE5UM5G-45F") return "LFE5UM-45F";
71+
if (variant == "LFE5UM5G-85F") return "LFE5UM-85F";
72+
return variant;
73+
}
74+
6675
DeviceLocator find_device_by_name_and_variant(string name, string variant) {
67-
if (variant.empty())
68-
return find_device_by_name(name);
76+
if (variant.empty()) {
77+
fprintf(stderr, "warning: using old nexpnr with new trellis tools.\n");
78+
variant = name;
79+
name = device_legacy_mapping(variant);
80+
}
6981
auto found = find_device_generic([variant](const string &n, const pt::ptree &p) -> bool {
7082
UNUSED(p);
7183
return n == variant;

libtrellis/src/PyTrellis.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ PYBIND11_MODULE (pytrellis, m)
156156

157157
class_<Chip>(m, "Chip")
158158
.def(init<string>())
159+
.def(init<string,string>())
159160
.def(init<uint32_t>())
160161
.def(init<const ChipInfo &>())
161162
.def("get_tile_by_name", &Chip::get_tile_by_name)

metadata/ECP5/LFE5U-12F/globals.json

Lines changed: 0 additions & 88 deletions
This file was deleted.

0 commit comments

Comments
 (0)