mirror of https://github.com/efabless/caravel.git
update signoff scripts to add the logs to `./signoff`
This commit is contained in:
parent
8525d6e105
commit
0823edc14f
|
@ -48,6 +48,7 @@ optional arguments:
|
|||
````
|
||||
## Reports and logs
|
||||
|
||||
Reports can be found `$CARAVEL_ROOT/signoff/<design_name>/`
|
||||
Reports can be found at `$CARAVEL_ROOT/signoff/<design_name>/`
|
||||
|
||||
Logs can be found at `$CARAVEL_ROOT/scripts/logs/`
|
||||
Logs can be found at `$CARAVEL_ROOT/signoff/<design_name>/standalone_pvr/logs` and `$CARAVEL_ROOT/signoff/<design_name>/primetime-signoff/logs`
|
||||
> If the design is related to the Management Core SoC, `$CARAVEL_ROOT` is replaced by `$MCW_ROOT` for the reports and logs
|
|
@ -6,7 +6,7 @@ import os
|
|||
|
||||
|
||||
def klayout_gds_drc_check(design_name, drc_script_path, gds_input_file_path, signoff_directory, logs_directory):
|
||||
report_file_path = signoff_directory / f'{design_name}' / f'standalone_pvr/{design_name}_klayout_drc.xml'
|
||||
report_file_path = signoff_directory / f'{design_name}_klayout_drc.xml'
|
||||
run_drc_check_cmd = ['klayout', '-b', '-r', drc_script_path,
|
||||
'-rd', f"input={gds_input_file_path}",
|
||||
'-rd', f"report={report_file_path}",
|
||||
|
|
|
@ -53,11 +53,11 @@ def run_sta (
|
|||
|
||||
# PrimeTime command
|
||||
PT_tcl = f"{SCRIPT_DIR}/pt_sta.tcl"
|
||||
pt_command = f"source /tools/bashrc_snps; pt_shell -f {PT_tcl} -output_log_file {log_dir}/{design}/{design}-{rc_corner}-{proc_corner}-sta.log"
|
||||
pt_command = f"source /tools/bashrc_snps; pt_shell -f {PT_tcl} -output_log_file {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log"
|
||||
os.system(pt_command)
|
||||
# Check if there exists any violations
|
||||
# Check if there are any violations
|
||||
sta_pass=search_viol(f"{output_dir}/reports/{rc_corner}/{design}.{proc_corner}{proc_corner}-global.rpt")
|
||||
log = open(f"{log_dir}/{design}/{design}-{rc_corner}-{proc_corner}-sta.log", "a")
|
||||
log = open(f"{log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log", "a")
|
||||
if sta_pass == "pass":
|
||||
print (f"STA run Passed!")
|
||||
log.write(f"STA run Passed!")
|
||||
|
@ -90,11 +90,11 @@ def run_sta (
|
|||
print(f"There are violations. check report: {output_dir}/reports/{rc_corner}/{design}.{proc_corner}{proc_corner}-all_viol.rpt")
|
||||
log.write(f"There are violations. check report: {output_dir}/reports/{rc_corner}/{design}.{proc_corner}{proc_corner}-all_viol.rpt")
|
||||
elif sta_pass== "no cons":
|
||||
print(f"Reading constraints SDC file failed. check log: {log_dir}/{design}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
log.write(f"Reading constraints SDC file failed. check log: {log_dir}/{design}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
print(f"Reading constraints SDC file failed. check log: {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
log.write(f"Reading constraints SDC file failed. check log: {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
else:
|
||||
print(f"Linking failed. check log: {log_dir}/{design}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
log.write(f"Linking failed. check log: {log_dir}/{design}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
print(f"Linking failed. check log: {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
log.write(f"Linking failed. check log: {log_dir}/{design}-{rc_corner}-{proc_corner}-sta.log")
|
||||
log.close()
|
||||
|
||||
# Check the required env variables
|
||||
|
@ -180,7 +180,7 @@ if __name__ == "__main__":
|
|||
parser.add_argument(
|
||||
"-l",
|
||||
"--logs_dir",
|
||||
help="output directory",
|
||||
help="log directory",
|
||||
required=True
|
||||
)
|
||||
parser.add_argument(
|
||||
|
@ -206,7 +206,7 @@ if __name__ == "__main__":
|
|||
|
||||
args = parser.parse_args()
|
||||
|
||||
output = os.path.abspath(os.path.join(args.output_dir,"primetime-signoff"))
|
||||
output = os.path.abspath(args.output_dir)
|
||||
log = os.path.abspath(args.logs_dir)
|
||||
|
||||
try:
|
||||
|
@ -221,12 +221,6 @@ if __name__ == "__main__":
|
|||
# directory already exists
|
||||
pass
|
||||
|
||||
try:
|
||||
os.makedirs(os.path.join(log,args.design))
|
||||
except FileExistsError:
|
||||
# directory already exists
|
||||
pass
|
||||
|
||||
sub_dirs = ['reports', 'sdf', 'lib']
|
||||
for item in sub_dirs:
|
||||
try:
|
||||
|
|
|
@ -43,7 +43,7 @@ def run_drc(design_root, log_dir, signoff_dir, pdk_root, design):
|
|||
"-l",
|
||||
f"{log_dir}",
|
||||
"-s",
|
||||
f"{signoff_dir}",
|
||||
f"{signoff_dir}/{design}/standalone_pvr",
|
||||
"-d",
|
||||
f"{design}",
|
||||
]
|
||||
|
@ -160,7 +160,7 @@ def run_sta(caravel_root, mcw_root, pt_lib_root, log_dir, signoff_dir, design):
|
|||
"-d",
|
||||
f"{design}",
|
||||
"-o",
|
||||
f"{signoff_dir}/{design}",
|
||||
f"{signoff_dir}/{design}/primetime-signoff",
|
||||
"-l",
|
||||
f"{log_dir}",
|
||||
]
|
||||
|
@ -212,6 +212,7 @@ def check_errors(
|
|||
lvs_summary_report = open(
|
||||
os.path.join(signoff_dir, f"{design}/standalone_pvr/lvs_summary.rpt"), "w"
|
||||
)
|
||||
lvs_sum_rep = os.path.join(signoff_dir, f"{design}/standalone_pvr/lvs_summary.rpt")
|
||||
lvs_report = os.path.join(signoff_dir, f"{design}/standalone_pvr/{design}.lvs.json")
|
||||
failures = count_lvs.count_LVS_failures(lvs_report)
|
||||
if failures[0] > 0:
|
||||
|
@ -226,7 +227,7 @@ def check_errors(
|
|||
lvs_summary_report.write(" property failures = " + str(failures[4]) + "\n")
|
||||
logging.error(f"LVS on {design} failed")
|
||||
logging.info(f"Find full report at {lvs_report}")
|
||||
logging.info(f"Find summary report at {lvs_summary_report}")
|
||||
logging.info(f"Find summary report at {lvs_sum_rep}")
|
||||
f.write("Layout Vs Schematic: Failed\n")
|
||||
else:
|
||||
lvs_summary_report.write("Layout Vs Schematic Passed")
|
||||
|
@ -249,7 +250,7 @@ def check_errors(
|
|||
f.write(f"{sim} simulations: Failed\n")
|
||||
|
||||
if sta:
|
||||
sta_logs = glob.glob(f"{log_dir}/{design}/{design}-*sta.log")
|
||||
sta_logs = glob.glob(f"{sta_log_dir}/{design}-*sta.log")
|
||||
for l in sta_logs:
|
||||
with open(l) as rep:
|
||||
log_name = l.split("/")[-1]
|
||||
|
@ -391,7 +392,6 @@ if __name__ == "__main__":
|
|||
|
||||
pdk_root = os.getenv("PDK_ROOT")
|
||||
pdk_env = os.getenv("PDK")
|
||||
log_dir = os.path.join(caravel_root, "scripts/logs")
|
||||
signoff_dir = os.path.join(caravel_root, "signoff")
|
||||
lvs_root = os.path.join(caravel_root, "scripts/extra_be_checks")
|
||||
drc = args.drc_check
|
||||
|
@ -404,15 +404,18 @@ if __name__ == "__main__":
|
|||
sta = args.primetime_sta
|
||||
design = args.design
|
||||
antenna = args.antenna
|
||||
log_dir = os.path.join(signoff_dir, f"{design}/standalone_pvr/logs")
|
||||
|
||||
if (design == "mgmt_core_wrapper" or design == "RAM128" or design == "RAM256"):
|
||||
signoff_dir = os.path.join(mcw_root, "signoff")
|
||||
log_dir = os.path.join(signoff_dir, f"{design}/standalone_pvr/logs")
|
||||
|
||||
if not os.path.exists(f"{log_dir}"):
|
||||
os.makedirs(f"{log_dir}")
|
||||
if not os.path.exists(f"{signoff_dir}/{design}"):
|
||||
os.makedirs(f"{signoff_dir}/{design}")
|
||||
if not os.path.exists(f"{signoff_dir}/{design}/standalone_pvr"):
|
||||
os.makedirs(f"{signoff_dir}/{design}/standalone_pvr")
|
||||
if not os.path.exists(f"{log_dir}"):
|
||||
os.makedirs(f"{log_dir}")
|
||||
|
||||
if lvs or drc or antenna:
|
||||
if glob.glob(f"{caravel_root}/gds/*.gz"):
|
||||
|
@ -465,12 +468,18 @@ if __name__ == "__main__":
|
|||
logging.info(f"Running LVS on {design}")
|
||||
|
||||
if sta:
|
||||
if not os.path.exists(f"{signoff_dir}/{design}/primetime-signoff"):
|
||||
os.makedirs(f"{signoff_dir}/{design}/primetime-signoff")
|
||||
sta_log_dir = os.path.join(signoff_dir, f"{design}/primetime-signoff/logs")
|
||||
if not os.path.exists(f"{sta_log_dir}"):
|
||||
os.makedirs(f"{sta_log_dir}")
|
||||
|
||||
logging.info(f"Running PrimeTime STA all corners on {design}")
|
||||
sta_p = run_sta(
|
||||
caravel_root,
|
||||
mcw_root,
|
||||
f"{caravel_root}/scripts/pt_libs",
|
||||
log_dir,
|
||||
sta_log_dir,
|
||||
signoff_dir,
|
||||
design,
|
||||
)
|
||||
|
@ -521,11 +530,13 @@ if __name__ == "__main__":
|
|||
# lvs_p1.wait()
|
||||
if sta:
|
||||
out, err = sta_p.communicate()
|
||||
sta_log = open(f"{log_dir}/PT_STA_{design}.log", "w")
|
||||
sta_log = open(f"{sta_log_dir}/PT_STA_{design}.log", "w")
|
||||
if err:
|
||||
logging.error(err)
|
||||
sta_log.write(err)
|
||||
sta_log.close()
|
||||
sta_log.close()
|
||||
else:
|
||||
os.remove(f"{sta_log_dir}/PT_STA_{design}.log")
|
||||
if lvs:
|
||||
lvs_p1.wait()
|
||||
if drc:
|
||||
|
|
Loading…
Reference in New Issue