|
1 | 1 | #!/usr/bin/env python3 |
2 | | -from edalize.edatool import get_edatool |
| 2 | + |
3 | 3 | import os |
4 | 4 |
|
| 5 | +from edalize.edatool import get_edatool |
| 6 | + |
| 7 | +packages = { |
| 8 | + "Artix": { |
| 9 | + "xc7a12t" : ["cpg238", "csg325"], |
| 10 | + "xc7a15t" : ["cpg236", "csg324", "csg325", "ftg256", "fgg484"], |
| 11 | + "xc7a25t" : ["cpg238", "csg325"], |
| 12 | + "xc7a35t" : ["cpg236", "csg324", "csg325", "ftg256", "fgg484"], |
| 13 | + "xc7a50t" : ["cpg236", "csg324", "csg325", "ftg256", "fgg484"], |
| 14 | + "xc7a75t" : ["csg324", "ftg256", "fgg484", "fgg676"], |
| 15 | + "xc7a100t" : ["csg324", "ftg256", "fgg484", "fgg676"], |
| 16 | + "xc7a200t" : ["sbg484", "fbg484", "fbg676", "ffg1156"], |
| 17 | + }, |
| 18 | + "Spartan 7": { |
| 19 | + "xc7s6" : ["ftgb196", "cpga196", "csga225"], |
| 20 | + "xc7s15" : ["ftgb196", "cpga196", "csga225"], |
| 21 | + "xc7s25" : ["ftgb196", "csga225", "csga324"], |
| 22 | + "xc7s50" : ["ftgb196", "csga324", "fgga484"], |
| 23 | + "xc7s75" : ["fgga484", "fgga676"], |
| 24 | + "xc7s100" : ["fgga484", "fgga676"], |
| 25 | + }, |
| 26 | +} |
| 27 | + |
5 | 28 | if len(os.sys.argv) != 2: |
6 | 29 | print("missing board param") |
7 | 30 | os.sys.exit() |
|
16 | 39 | else: |
17 | 40 | print ("Successfully created the directory %s " % build_dir) |
18 | 41 |
|
19 | | -currDir = os.path.abspath(os.path.curdir) + '/' |
20 | | -files = [] |
| 42 | +currDir = os.path.abspath(os.path.curdir) + '/' |
| 43 | +files = [] |
21 | 44 | parameters = {} |
| 45 | +pkg_name = None |
22 | 46 |
|
23 | 47 | subpart = part[0:4].lower() |
24 | 48 | if subpart == '10cl': |
|
39 | 63 | 'file_type': 'tclSource'}) |
40 | 64 | elif subpart == "xc7a": |
41 | 65 | family = "Artix" |
42 | | - tool = "vivado" |
| 66 | + tool = "vivado" |
| 67 | + model = subpart |
43 | 68 | elif subpart == "xc7v": |
44 | 69 | family = "Virtex 7" |
45 | 70 | tool = "vivado" |
|
54 | 79 | speed = -2 |
55 | 80 | elif subpart == "xc7s": |
56 | 81 | family = "Spartan 7" |
57 | | - tool = "vivado" |
| 82 | + tool = "vivado" |
| 83 | + model = subpart |
58 | 84 | elif subpart == "xc6s": |
59 | 85 | family = "Spartan6" |
60 | 86 | tool = "ise" |
|
74 | 100 | print("Error: unknown device") |
75 | 101 | os.sys.exit() |
76 | 102 |
|
| 103 | +if model in ["xc7a", "xc7s"]: |
| 104 | + pkg = packages[family][part][0] |
| 105 | + pkg_name = f"{model}_{pkg}" |
| 106 | + |
77 | 107 | if tool in ["ise", "vivado"]: |
78 | 108 | pkg_name = { |
79 | 109 | "xc3s500evq100" : "xc3s_vq100", |
|
89 | 119 | "xc6slx150tcsg484" : "xc6s_csg484", |
90 | 120 | "xc6slx150tfgg484" : "xc6s_t_fgg484", |
91 | 121 | "xc6vlx130tff784" : "xc6v_ff784", |
92 | | - "xc7a15tcpg236" : "xc7a_cpg236", |
93 | | - "xc7a15tfgg484" : "xc7a_fgg484", |
94 | | - "xc7a25tcpg238" : "xc7a_cpg238", |
95 | | - "xc7a25tcsg325" : "xc7a_csg325", |
96 | | - "xc7a35tcpg236" : "xc7a_cpg236", |
97 | | - "xc7a35tcsg324" : "xc7a_csg324", |
98 | | - "xc7a35tftg256" : "xc7a_ftg256", |
99 | | - "xc7a35tfgg484" : "xc7a_fgg484", |
100 | | - "xc7a50tcpg236" : "xc7a_cpg236", |
101 | | - "xc7a50tcsg324" : "xc7a_csg324", |
102 | | - "xc7a50tfgg484" : "xc7a_fgg484", |
103 | | - "xc7a50tcsg325" : "xc7a_csg325", |
104 | | - "xc7a75tfgg484" : "xc7a_fgg484", |
105 | | - "xc7a100tcsg324" : "xc7a_csg324", |
106 | | - "xc7a100tfgg484" : "xc7a_fgg484", |
107 | | - "xc7a100tfgg676" : "xc7a_fgg676", |
108 | | - "xc7a200tsbg484" : "xc7a_sbg484", |
109 | | - "xc7a200tfbg484" : "xc7a_fbg484", |
110 | | - "xc7a200tfbg676" : "xc7a_fbg676", |
111 | 122 | "xc7k70tfbg484" : "xc7k_fbg484", |
112 | 123 | "xc7k70tfbg676" : "xc7k_fbg676", |
113 | 124 | "xc7k160tffg676" : "xc7k_ffg676", |
114 | 125 | "xc7k325tffg676" : "xc7k_ffg676", |
115 | 126 | "xc7k325tffg900" : "xc7k_ffg900", |
116 | 127 | "xc7k420tffg901" : "xc7k_ffg901", |
117 | 128 | "xc7vx330tffg1157" : "xc7v_ffg1157", |
118 | | - "xc7s6ftgb196" : "xc7s_ftgb196", |
119 | | - "xc7s25csga225" : "xc7s_csga225", |
120 | | - "xc7s25csga324" : "xc7s_csga324", |
121 | | - "xc7s50csga324" : "xc7s_csga324", |
122 | | - "xc7s75fgga676" : "xc7s_fgga676", |
123 | 129 | "xcku040-ffva1156" : "xcku040_ffva1156", |
124 | 130 | "xcku060-ffva1156" : "xcku060_ffva1156", |
125 | 131 | "xcvu9p-flga2104" : "xcvu9p_flga2104", |
126 | 132 | "xcvu37p-fsvh2892" : "xcvu37p_fsvh2892", |
127 | 133 | "xcku3p-ffva676" : "xcku3p_ffva676", |
128 | 134 | "xcku5p-ffvb676" : "xcku5p_ffvb676", |
129 | 135 | "xcau15p-ffvb676" : "xcau15p_ffvb676", |
130 | | - }[part] |
| 136 | + }.get(part, pkg_name) |
131 | 137 | if tool == "ise": |
132 | 138 | cst_type = "UCF" |
133 | 139 | tool_options = {'family': family, |
|
171 | 177 | } |
172 | 178 | else: |
173 | 179 | cst_type = "xdc" |
174 | | - if family == "Xilinx UltraScale": |
| 180 | + # Artix/Spartan 7 Specific use case: |
| 181 | + if family in ["Artix", "Spartan 7"]: |
| 182 | + tool_options = {'part': f"{part}{pkg}-1"} |
| 183 | + elif family == "Xilinx UltraScale": |
175 | 184 | if part in ["xcvu9p-flga2104", "xcku5p-ffvb676"]: |
176 | 185 | tool_options = {'part': part + '-1-e'} |
177 | 186 | parameters["secondaryflash"]= { |
|
194 | 203 | tool_options = {'part': part + '-2-e'} |
195 | 204 | else: |
196 | 205 | tool_options = {'part': part + '-1'} |
| 206 | + |
197 | 207 | cst_file = currDir + "constr_" + pkg_name + "." + cst_type.lower() |
198 | 208 | files.append({'name': currDir + 'xilinx_spiOverJtag.v', |
199 | 209 | 'file_type': 'verilogSource'}) |
|
245 | 255 |
|
246 | 256 | if tool == "vivado": |
247 | 257 | import shutil |
248 | | - shutil.copy("tmp_" + part + "/spiOverJtag.runs/impl_1/spiOverJtag.bit", |
249 | | - "tmp_" + part); |
| 258 | + import subprocess |
| 259 | + import gzip |
| 260 | + |
| 261 | + # Compress bitstream. |
| 262 | + with open(f"tmp_{part}/spiOverJtag.bit", 'rb') as bit: |
| 263 | + with gzip.open(f"spiOverJtag_{part}.bit.gz", 'wb', compresslevel=9) as bit_gz: |
| 264 | + shutil.copyfileobj(bit, bit_gz) |
| 265 | + |
| 266 | + # Create Symbolic links for all supported packages. |
| 267 | + if family in ["Artix", "Spartan 7"]: |
| 268 | + in_file = f"spiOverJtag_{part}.bit.gz" |
| 269 | + for pkg in packages[family][part]: |
| 270 | + out_file = f"spiOverJtag_{part}{pkg}.bit.gz" |
| 271 | + if not os.path.exists(out_file): |
| 272 | + subprocess.run(["ln", "-s", in_file, out_file]) |
0 commit comments