cocoon/engine.py

90 lines
3.7 KiB
Python
Raw Permalink Normal View History

2020-08-10 10:55:05 +08:00
import subprocess
2020-08-10 11:20:10 +08:00
import os
2020-08-10 10:55:05 +08:00
import util
2020-09-07 17:44:42 +08:00
import apps.cds.syn as syn1
import apps.cds.floorplan as fp1
import apps.cds.pdn as pdn1
import apps.cds.place as place1
import apps.cds.cts as cts1
import apps.cds.route as route1
import apps.cds.drc as drc1
import apps.opensource.syn.yosys as syn2
2020-08-10 10:55:05 +08:00
def run(design, flow):
design_name = design.top_name
run_path = util.getRunPath(design, "Cadence")
2020-08-11 12:30:45 +08:00
print(run_path)
make_file = open(run_path + "/" + "Makefile", "w")
2020-08-11 12:30:45 +08:00
tcl_path = util.getScriptPath(design, "Cadence")
overall_tcl = open(tcl_path + "/" + "flow.tcl", 'w', encoding='utf-8')
2020-09-07 18:02:57 +08:00
for x_list in flow.ops:
x = x_list[0]
2020-08-10 10:55:05 +08:00
if x[0] == "GenusSynth":
2020-08-10 11:20:10 +08:00
script_path = "../scripts/"
tmp_op_syn = eval("syn1." + "GenusSynth" + "(design)")
2020-09-07 18:02:57 +08:00
for param in flow.params_syn:
tmp_op_syn.setParams(param[0], param[1])
tmp_op_syn.config(design, design_name + "_" + x[1])
2020-08-10 10:55:05 +08:00
make_file.write("all:\n")
2020-08-10 11:20:10 +08:00
make_file.write("\tgenus -legacy_ui -batch -files " + script_path + design_name + "_" + x[1] + ".tcl\n")
2020-08-30 21:24:55 +08:00
if x[0] == "YosysSynth":
script_path = "../scripts/"
tmp_op_syn = eval("syn2." + "YosysSynth" + "(design)")
tmp_op_syn.config(design, design_name + "_" + x[1])
make_file.write("all:\n")
make_file.write("\tyosys " + script_path + design_name + "_" + x[1] + ".ys\n")
if x[0] == "InnovusFloorplan":
tmp_op_fp = eval("fp1." + "InnovusFloorplan" + "(design)")
for y in flow.params_fp:
tmp_op_fp.setParams(y[0], y[1])
tmp_op_fp.config(design, design_name + "_" + x[1])
2020-08-11 12:30:45 +08:00
overall_tcl.write('source %s/%s_to_floorplan.tcl\n'%(tcl_path, design_name))
if x[0] == "InnovusPDN":
tmp_op_pdn = eval("pdn1." + "InnovusPDN" + "(design)")
tmp_op_pdn.config(design, design_name + "_" + x[1])
2020-08-11 12:30:45 +08:00
overall_tcl.write('source %s/%s_to_pdn.tcl\n'%(tcl_path, design_name))
if x[0] == "InnovusPlace":
2020-09-07 22:08:12 +08:00
tmp_op_place = eval("place1." + "InnovusPlace" + "(design)")
for param in flow.params_place:
2020-09-07 18:02:57 +08:00
if param[1] == True:
2020-09-07 22:08:12 +08:00
tmp_op_place.setParams(param[0])
tmp_op_place.config(design, design_name + "_" + x[1])
2020-08-11 12:30:45 +08:00
overall_tcl.write('source %s/%s_to_place.tcl\n'%(tcl_path, design_name))
if x[0] == "InnovusCTS":
tmp_op_cts = eval("cts1." + "InnovusCTS" + "(design)")
tmp_op_cts.config(design, design_name + "_" + x[1])
2020-08-11 12:30:45 +08:00
overall_tcl.write('source %s/%s_to_cts.tcl\n'%(tcl_path, design_name))
if x[0] == "InnovusRoute":
tmp_op_route = eval("route1." + "InnovusRoute" + "(design)")
2020-09-07 22:08:12 +08:00
for param in flow.params_route:
tmp_op_route.setParams(param[0], param[1])
tmp_op_route.config(design, design_name + "_" + x[1])
2020-08-11 12:30:45 +08:00
overall_tcl.write('source %s/%s_to_route.tcl\n'%(tcl_path, design_name))
if x[0] == "InnovusDRC":
tmp_op_drc = eval("drc1." + "InnovusDRC" + "(design)")
tmp_op_drc.config(design, design_name + "_" + x[1])
2020-08-11 12:30:45 +08:00
overall_tcl.write('source %s/%s_to_drc.tcl\n'%(tcl_path, design_name))
2020-08-30 21:24:55 +08:00
#make_file.write("\tinnovus -batch -files " + script_path + "flow.tcl")
run_path = util.getRunPath(design, "Yosys")
2020-08-10 11:20:10 +08:00
os.chdir(run_path)
print(os.getcwd())
2020-08-11 12:30:45 +08:00
#cmd_clean = 'rm innovus.* genus.*'
#subprocess.Popen(cmd_clean, shell=True).wait()
#cmd_clean = 'rm -rf fv'
#subprocess.Popen(cmd_clean, shell=True).wait()
cmd = 'make'
2020-08-30 21:24:55 +08:00
#subprocess.Popen(cmd)
subprocess.Popen(cmd, shell=True).wait()
2020-08-10 10:55:05 +08:00
2020-09-07 22:08:12 +08:00
return design
2020-08-10 10:55:05 +08:00