cocoon/engine.py

90 lines
3.7 KiB
Python

import subprocess
import os
import util
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
def run(design, flow):
design_name = design.top_name
run_path = util.getRunPath(design, "Cadence")
print(run_path)
make_file = open(run_path + "/" + "Makefile", "w")
tcl_path = util.getScriptPath(design, "Cadence")
overall_tcl = open(tcl_path + "/" + "flow.tcl", 'w', encoding='utf-8')
for x_list in flow.ops:
x = x_list[0]
if x[0] == "GenusSynth":
script_path = "../scripts/"
tmp_op_syn = eval("syn1." + "GenusSynth" + "(design)")
for param in flow.params_syn:
tmp_op_syn.setParams(param[0], param[1])
tmp_op_syn.config(design, design_name + "_" + x[1])
make_file.write("all:\n")
make_file.write("\tgenus -legacy_ui -batch -files " + script_path + design_name + "_" + x[1] + ".tcl\n")
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])
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])
overall_tcl.write('source %s/%s_to_pdn.tcl\n'%(tcl_path, design_name))
if x[0] == "InnovusPlace":
tmp_op_place = eval("place1." + "InnovusPlace" + "(design)")
for param in flow.params_place:
if param[1] == True:
tmp_op_place.setParams(param[0])
tmp_op_place.config(design, design_name + "_" + x[1])
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])
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)")
for param in flow.params_route:
tmp_op_route.setParams(param[0], param[1])
tmp_op_route.config(design, design_name + "_" + x[1])
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])
overall_tcl.write('source %s/%s_to_drc.tcl\n'%(tcl_path, design_name))
#make_file.write("\tinnovus -batch -files " + script_path + "flow.tcl")
run_path = util.getRunPath(design, "Yosys")
os.chdir(run_path)
print(os.getcwd())
#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'
#subprocess.Popen(cmd)
subprocess.Popen(cmd, shell=True).wait()
return design