2021-07-08 20:59:28 +02:00
|
|
|
#!/usr/bin/env python3
|
2023-08-05 11:48:06 +02:00
|
|
|
from edalize.edatool import get_edatool
|
2021-07-08 20:59:28 +02:00
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
if len(os.sys.argv) != 2:
|
|
|
|
|
print("missing board param")
|
|
|
|
|
os.sys.exit()
|
|
|
|
|
part = os.sys.argv[1]
|
|
|
|
|
|
|
|
|
|
build_dir="tmp_" + part
|
|
|
|
|
if not os.path.isdir(build_dir):
|
|
|
|
|
try:
|
|
|
|
|
os.mkdir(build_dir)
|
|
|
|
|
except OSError:
|
|
|
|
|
print ("Creation of the directory %s failed" % build_dir)
|
|
|
|
|
else:
|
|
|
|
|
print ("Successfully created the directory %s " % build_dir)
|
|
|
|
|
|
|
|
|
|
currDir = os.path.abspath(os.path.curdir) + '/'
|
2021-07-10 08:20:27 +02:00
|
|
|
files = []
|
|
|
|
|
parameters = {}
|
2021-07-08 20:59:28 +02:00
|
|
|
|
|
|
|
|
subpart = part[0:4].lower()
|
|
|
|
|
if subpart == '10cl':
|
|
|
|
|
family = "Cyclone 10 LP"
|
|
|
|
|
tool = "quartus"
|
|
|
|
|
elif subpart == 'ep4c':
|
|
|
|
|
family = "Cyclone IV E"
|
|
|
|
|
tool = "quartus"
|
|
|
|
|
elif subpart[0:2] == '5c':
|
|
|
|
|
family = "Cyclone V"
|
|
|
|
|
tool = "quartus"
|
2021-07-10 08:20:27 +02:00
|
|
|
files.append({'name': currDir + 'constr_cycloneV.tcl',
|
|
|
|
|
'file_type': 'tclSource'})
|
2021-07-08 20:59:28 +02:00
|
|
|
elif subpart == "xc7a":
|
|
|
|
|
family = "Artix"
|
|
|
|
|
tool = "vivado"
|
2022-02-22 18:01:02 +01:00
|
|
|
elif subpart == "xc7k":
|
2022-05-14 04:38:58 +02:00
|
|
|
device_size = int(part.split('k')[1].split('t')[0])
|
|
|
|
|
if device_size <= 160:
|
|
|
|
|
family = "Kintex 7"
|
|
|
|
|
tool = "vivado"
|
|
|
|
|
else:
|
|
|
|
|
family = "Kintex7"
|
|
|
|
|
tool = "ise"
|
|
|
|
|
speed = -2
|
2021-07-08 20:59:28 +02:00
|
|
|
elif subpart == "xc7s":
|
|
|
|
|
family = "Spartan 7"
|
|
|
|
|
tool = "vivado"
|
|
|
|
|
elif subpart == "xc6s":
|
2021-07-11 08:57:46 +02:00
|
|
|
family = "Spartan6"
|
2021-07-08 20:59:28 +02:00
|
|
|
tool = "ise"
|
2022-03-25 21:29:00 +01:00
|
|
|
speed = -3
|
|
|
|
|
elif subpart == "xc3s":
|
|
|
|
|
family = "Spartan3E"
|
|
|
|
|
tool = "ise"
|
|
|
|
|
speed = -4
|
2024-02-27 15:44:14 +01:00
|
|
|
elif subpart == "xc6v":
|
|
|
|
|
family = "Virtex6"
|
|
|
|
|
tool = "ise"
|
|
|
|
|
speed = -1
|
2023-03-09 20:48:19 +01:00
|
|
|
elif subpart in ["xcvu", "xcku"]:
|
|
|
|
|
family = "Xilinx UltraScale"
|
2023-01-21 14:00:20 +01:00
|
|
|
tool = "vivado"
|
2021-07-08 20:59:28 +02:00
|
|
|
else:
|
|
|
|
|
print("Error: unknown device")
|
|
|
|
|
os.sys.exit()
|
|
|
|
|
|
|
|
|
|
if tool in ["ise", "vivado"]:
|
|
|
|
|
pkg_name = {
|
2022-03-25 21:29:00 +01:00
|
|
|
"xc3s500evq100" : "xc3s_vq100",
|
2022-12-04 11:18:44 +01:00
|
|
|
"xc6slx9tqg144" : "xc6s_tqg144",
|
2023-04-17 06:51:02 +02:00
|
|
|
"xc6slx9csg324" : "xc6s_csg324",
|
2022-01-15 11:46:32 +01:00
|
|
|
"xc6slx16ftg256" : "xc6s_ftg256",
|
2022-01-27 09:19:55 +01:00
|
|
|
"xc6slx16csg324" : "xc6s_csg324",
|
2021-07-11 08:57:46 +02:00
|
|
|
"xc6slx45csg324" : "xc6s_csg324",
|
|
|
|
|
"xc6slx100fgg484" : "xc6s_fgg484",
|
2023-02-16 19:51:04 +01:00
|
|
|
"xc6slx150tcsg484" : "xc6s_csg484",
|
2024-02-28 12:52:01 +01:00
|
|
|
"xc6slx150tfgg484" : "xc6s_t_fgg484",
|
2024-02-27 15:44:14 +01:00
|
|
|
"xc6vlx130tff784" : "xc6v_ff784",
|
2024-02-26 21:15:36 +01:00
|
|
|
"xc7a15tcpg236" : "xc7a_cpg236",
|
2023-04-07 05:28:29 +02:00
|
|
|
"xc7a25tcpg238" : "xc7a_cpg238",
|
|
|
|
|
"xc7a25tcsg325" : "xc7a_csg325",
|
2021-07-08 20:59:28 +02:00
|
|
|
"xc7a35tcpg236" : "xc7a_cpg236",
|
2021-07-10 08:20:27 +02:00
|
|
|
"xc7a35tcsg324" : "xc7a_csg324",
|
|
|
|
|
"xc7a35tftg256" : "xc7a_ftg256",
|
2023-10-13 11:13:29 +02:00
|
|
|
"xc7a35tfgg484" : "xc7a_fgg484",
|
2021-07-10 08:20:27 +02:00
|
|
|
"xc7a50tcpg236" : "xc7a_cpg236",
|
2022-11-22 17:11:50 +01:00
|
|
|
"xc7a50tcsg324" : "xc7a_csg324",
|
2023-06-24 17:02:12 +02:00
|
|
|
"xc7a50tfgg484" : "xc7a_fgg484",
|
2021-07-10 08:20:27 +02:00
|
|
|
"xc7a75tfgg484" : "xc7a_fgg484",
|
2021-12-21 07:02:14 +01:00
|
|
|
"xc7a100tcsg324" : "xc7a_csg324",
|
2021-07-08 20:59:28 +02:00
|
|
|
"xc7a100tfgg484" : "xc7a_fgg484",
|
2022-05-10 19:09:21 +02:00
|
|
|
"xc7a100tfgg676" : "xc7a_fgg676",
|
2021-07-08 20:59:28 +02:00
|
|
|
"xc7a200tsbg484" : "xc7a_sbg484",
|
|
|
|
|
"xc7a200tfbg484" : "xc7a_fbg484",
|
2022-08-23 17:13:13 +02:00
|
|
|
"xc7k70tfbg484" : "xc7k_fbg484",
|
2023-11-09 01:45:46 +01:00
|
|
|
"xc7k70tfbg676" : "xc7k_fbg676",
|
2022-05-14 09:30:01 +02:00
|
|
|
"xc7k160tffg676" : "xc7k_ffg676",
|
2022-02-22 18:01:02 +01:00
|
|
|
"xc7k325tffg676" : "xc7k_ffg676",
|
|
|
|
|
"xc7k325tffg900" : "xc7k_ffg900",
|
2022-05-14 04:38:58 +02:00
|
|
|
"xc7k420tffg901" : "xc7k_ffg901",
|
2022-09-30 11:01:49 +02:00
|
|
|
"xc7s25csga225" : "xc7s_csga225",
|
2021-12-19 17:30:06 +01:00
|
|
|
"xc7s25csga324" : "xc7s_csga324",
|
2023-01-21 14:00:20 +01:00
|
|
|
"xc7s50csga324" : "xc7s_csga324",
|
|
|
|
|
"xcvu9p-flga2104" : "xcvu9p_flga2104",
|
2023-02-20 08:41:48 +01:00
|
|
|
"xcvu37p-fsvh2892" : "xcvu37p_fsvh2892",
|
2023-10-12 18:02:23 +02:00
|
|
|
"xcku3p-ffva676" : "xcku3p_ffva676",
|
2023-03-09 20:48:19 +01:00
|
|
|
"xcku5p-ffvb676" : "xcku5p_ffvb676",
|
2021-07-08 20:59:28 +02:00
|
|
|
}[part]
|
|
|
|
|
if tool == "ise":
|
|
|
|
|
cst_type = "UCF"
|
2021-07-11 08:57:46 +02:00
|
|
|
tool_options = {'family': family,
|
|
|
|
|
'device': {
|
2022-05-14 04:38:58 +02:00
|
|
|
"xc3s500evq100": "xc3s500e",
|
2022-12-04 11:18:44 +01:00
|
|
|
"xc6slx9tqg144": "xc6slx9",
|
2023-04-17 06:51:02 +02:00
|
|
|
"xc6slx9csg324": "xc6slx9",
|
2022-05-14 04:38:58 +02:00
|
|
|
"xc6slx16ftg256": "xc6slx16",
|
|
|
|
|
"xc6slx16csg324": "xc6slx16",
|
|
|
|
|
"xc6slx45csg324": "xc6slx45",
|
|
|
|
|
"xc6slx100fgg484": "xc6slx100",
|
2023-02-16 19:51:04 +01:00
|
|
|
"xc6slx150tcsg484": "xc6slx150t",
|
2022-05-14 04:38:58 +02:00
|
|
|
"xc6slx150tfgg484": "xc6slx150t",
|
2024-02-27 15:44:14 +01:00
|
|
|
"xc6vlx130tff784": "xc6vlx130t",
|
2022-05-14 04:38:58 +02:00
|
|
|
"xc7k325tffg676": "xc7k325t",
|
|
|
|
|
"xc7k325tffg900": "xc7k325t",
|
|
|
|
|
"xc7k420tffg901": "xc7k420t",
|
|
|
|
|
}[part],
|
2021-07-11 08:57:46 +02:00
|
|
|
'package': {
|
2022-05-14 04:38:58 +02:00
|
|
|
"xc3s500evq100": "vq100",
|
2022-12-04 11:18:44 +01:00
|
|
|
"xc6slx9tqg144": "tqg144",
|
2023-04-17 06:51:02 +02:00
|
|
|
"xc6slx9csg324": "csg324",
|
2022-05-14 04:38:58 +02:00
|
|
|
"xc6slx16ftg256": "ftg256",
|
|
|
|
|
"xc6slx16csg324": "csg324",
|
|
|
|
|
"xc6slx45csg324": "csg324",
|
2024-02-27 13:30:33 +01:00
|
|
|
"xc6slx100fgg484": "fgg484",
|
2023-02-16 19:51:04 +01:00
|
|
|
"xc6slx150tcsg484": "csg484",
|
2022-05-14 04:38:58 +02:00
|
|
|
"xc6slx150tfgg484": "fgg484",
|
2024-02-27 15:44:14 +01:00
|
|
|
"xc6vlx130tff784": "ff784",
|
2022-05-14 04:38:58 +02:00
|
|
|
"xc7k325tffg676": "ffg676",
|
|
|
|
|
"xc7k325tffg900": "ffg900",
|
|
|
|
|
"xc7k420tffg901": "ffg901",
|
|
|
|
|
}[part],
|
2022-03-25 21:29:00 +01:00
|
|
|
'speed' : speed
|
2021-07-11 08:57:46 +02:00
|
|
|
}
|
2021-07-08 20:59:28 +02:00
|
|
|
else:
|
|
|
|
|
cst_type = "xdc"
|
2023-03-09 20:48:19 +01:00
|
|
|
if family == "Xilinx UltraScale":
|
|
|
|
|
if part in ["xcvu9p-flga2104", "xcku5p-ffvb676"]:
|
|
|
|
|
tool_options = {'part': part + '-1-e'}
|
2023-02-20 08:41:48 +01:00
|
|
|
parameters["secondaryflash"]= {
|
|
|
|
|
'datatype': 'int',
|
|
|
|
|
'paramtype': 'vlogdefine',
|
|
|
|
|
'description': 'secondary flash',
|
|
|
|
|
'default': 1}
|
2023-10-12 18:02:23 +02:00
|
|
|
elif part == "xcku3p-ffva676":
|
|
|
|
|
tool_options = {'part': part + '-2-e'}
|
2023-02-20 08:41:48 +01:00
|
|
|
elif part == "xcvu37p-fsvh2892":
|
|
|
|
|
tool_options = {'part': part + '-2L-e'}
|
2023-01-21 14:00:20 +01:00
|
|
|
else:
|
|
|
|
|
tool_options = {'part': part + '-1'}
|
2021-07-11 08:57:46 +02:00
|
|
|
cst_file = currDir + "constr_" + pkg_name + "." + cst_type.lower()
|
2021-07-08 20:59:28 +02:00
|
|
|
files.append({'name': currDir + 'xilinx_spiOverJtag.v',
|
|
|
|
|
'file_type': 'verilogSource'})
|
|
|
|
|
files.append({'name': cst_file, 'file_type': cst_type})
|
|
|
|
|
else:
|
|
|
|
|
full_part = {
|
2023-08-05 11:48:06 +02:00
|
|
|
"10cl016484": "10CL016YU484C8G",
|
2021-07-08 20:59:28 +02:00
|
|
|
"10cl025256": "10CL025YU256C8G",
|
2022-12-26 01:36:52 +01:00
|
|
|
"10cl055484": "10CL055YU484C8G",
|
2022-06-13 17:02:57 +02:00
|
|
|
"ep4ce11523": "EP4CE115F23C7",
|
2021-07-08 20:59:28 +02:00
|
|
|
"ep4ce2217" : "EP4CE22F17C6",
|
2021-11-28 16:50:13 +01:00
|
|
|
"ep4ce1523" : "EP4CE15F23C8",
|
2021-07-11 08:57:46 +02:00
|
|
|
"5ce223" : "5CEFA2F23I7",
|
2022-03-13 14:14:52 +01:00
|
|
|
"5ce523" : "5CEFA5F23I7",
|
2021-11-28 10:00:21 +01:00
|
|
|
"5ce423" : "5CEBA4F23C8",
|
2022-05-05 07:03:06 +02:00
|
|
|
"5ce927" : "5CEBA9F27C7",
|
2021-07-11 08:57:46 +02:00
|
|
|
"5cse423" : "5CSEMA4U23C6",
|
|
|
|
|
"5cse623" : "5CSEBA6U23I7"}[part]
|
2021-07-08 20:59:28 +02:00
|
|
|
files.append({'name': currDir + 'altera_spiOverJtag.v',
|
|
|
|
|
'file_type': 'verilogSource'})
|
2021-11-28 10:00:21 +01:00
|
|
|
files.append({'name': currDir + 'altera_spiOverJtag.sdc',
|
2021-07-08 20:59:28 +02:00
|
|
|
'file_type': 'SDC'})
|
|
|
|
|
tool_options = {'device': full_part, 'family':family}
|
|
|
|
|
|
|
|
|
|
parameters[family.lower().replace(' ', '')]= {
|
|
|
|
|
'datatype': 'int',
|
|
|
|
|
'paramtype': 'vlogdefine',
|
|
|
|
|
'description': 'fpga family',
|
|
|
|
|
'default': 1}
|
|
|
|
|
|
|
|
|
|
edam = {'name' : "spiOverJtag",
|
|
|
|
|
'files': files,
|
|
|
|
|
'tool_options': {tool: tool_options},
|
|
|
|
|
'parameters': parameters,
|
|
|
|
|
'toplevel' : 'spiOverJtag',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
backend = get_edatool(tool)(edam=edam, work_root=build_dir)
|
|
|
|
|
backend.configure()
|
|
|
|
|
backend.build()
|
2021-07-11 08:57:46 +02:00
|
|
|
|
|
|
|
|
if tool == "vivado":
|
|
|
|
|
import shutil
|
|
|
|
|
shutil.copy("tmp_" + part + "/spiOverJtag.runs/impl_1/spiOverJtag.bit",
|
|
|
|
|
"tmp_" + part);
|