run_genus_hybrid.tcl 3.63 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
# This script was written and developed by ABKGroup students at UCSD. However, the underlying commands and reports are copyrighted by Cadence. 
# We thank Cadence for granting permission to share our research to help promote and foster the next generation of innovators.
source lib_setup.tcl
source design_setup.tcl

if {[info exist ::env(PHY_SYNTH)] && $::env(PHY_SYNTH) == 1} {
    read_mmmc mmmc_iSpatial_setup.tcl
}

# set the output directories
set OUTPUTS_PATH  syn_output
set REPORTS_PATH  syn_rpt
set HANDOFF_PATH  syn_handoff

if {![file exists ${OUTPUTS_PATH}]} {
  file mkdir ${OUTPUTS_PATH}
}

if {![file exists ${REPORTS_PATH}]} {
  file mkdir ${REPORTS_PATH}
}

if {![file exists ${HANDOFF_PATH}]} {
  file mkdir ${HANDOFF_PATH}
}
#
# set threads
set_db max_cpus_per_server 16
set_db super_thread_servers "localhost"
#
set list_lib "$libworst"


if {[info exist ::env(PHY_SYNTH)] && $::env(PHY_SYNTH) == 1} {
    set_db invs_temp_dir ${OUTPUTS_PATH}/invs_tmp_dir
    read_physical -lefs $lefs
}

# Target library
set link_library $list_lib
set target_library $list_lib

# set pathi
set_db hdl_flatten_complex_port true
set_db hdl_record_naming_style  %s_%s
set_db auto_ungroup none


if {![info exist ::env(PHY_SYNTH)] || $::env(PHY_SYNTH) == 0} {
    set_db library $list_lib
}

#################################################
# Load Design and Initialize
#################################################
set_db init_hdl_search_path $rtldir 

58 59 60 61 62 63
read_hdl -f rtl_list.tcl
#source rtl_list.tcl
#
#foreach rtl_file $rtl_all {
#    read_hdl -sv $rtl_file
#}
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

elaborate $DESIGN
time_info Elaboration

if {![info exist ::env(PHY_SYNTH)] || $::env(PHY_SYNTH) == 0} {
    #read_sdc $sdc
    source $sdc
}

init_design

check_design -unresolved

check_timing_intent
# reports the physical layout estimation report from lef and QRC tech file
report_ple > ${REPORTS_PATH}/ple.rpt 

###############################################
# Read DEF
###############################################
if {[info exist ::env(PHY_SYNTH)] && $::env(PHY_SYNTH) == 1} {
    read_def $floorplan_def
    check_floorplan -detailed
}

# keep hierarchy during synthesis
set_db auto_ungroup none

if {[info exist ::env(PHY_SYNTH)] && $::env(PHY_SYNTH) == 1} {
    syn_generic -physical
} else {
    syn_generic
96
    write_hdl -generic > ${HANDOFF_PATH}/${DESIGN}_generic.v
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
}
time_info GENERIC

# generate a summary for the current stage of synthesis
write_reports -directory ${REPORTS_PATH} -tag generic
write_db  ${OUTPUTS_PATH}/${DESIGN}_generic.db

 
if {[info exist ::env(PHY_SYNTH)] && $::env(PHY_SYNTH) == 1} {
    syn_map -physical
} else {
    syn_map
}
time_info MAPPED

# generate a summary for the current stage of synthesis
write_reports -directory ${REPORTS_PATH} -tag map
write_db  ${OUTPUTS_PATH}/${DESIGN}_map.db

if {[info exist ::env(PHY_SYNTH)] && $::env(PHY_SYNTH) == 1} {
    syn_opt -spatial
} else {
    syn_opt
}

time_info OPT 
write_db ${OUTPUTS_PATH}/${DESIGN}_opt.db

##############################################################################
# Write reports
##############################################################################

# summarizes the information, warnings and errors
report_messages > ${REPORTS_PATH}/${DESIGN}_messages.rpt

# generate PPA reports
report_gates > ${REPORTS_PATH}/${DESIGN}_gates.rpt
report_power > ${REPORTS_PATH}/${DESIGN}_power.rpt
report_area > ${REPORTS_PATH}/${DESIGN}_power.rpt
write_reports -directory ${REPORTS_PATH} -tag final 


if {[info exist ::env(PHY_SYNTH)] && $::env(PHY_SYNTH) == 1} {
    write_design -innovus -base_name ${HANDOFF_PATH}/${DESIGN}
} else {
    write_sdc >${HANDOFF_PATH}/${DESIGN}.sdc
    write_hdl > ${HANDOFF_PATH}/${DESIGN}.v
}

exit