blob: d2701b56605d309ac743c4bb8b1909f9927e58e4 [file] [log] [blame]
proc global_routing {args} {
TIMER::timer_start
# if {$::env(GLB_RT_OLD_FR)} {
# try_catch envsubst < $::env(SCRIPTS_DIR)/fastroute.rsyn > $::env(fastroute_tmp_file_tag).rsyn
# try_catch FRlefdef_old \
# --no-gui \
# --script $::env(fastroute_tmp_file_tag).rsyn \
# |& tee $::env(TERMINAL_OUTPUT) $::env(fastroute_log_file_tag).log
# } else {
# try_catch envsubst < $::env(SCRIPTS_DIR)/fastroute.tcl > $::env(fastroute_tmp_file_tag).tcl
# cd $::env(OPENLANE_ROOT)/etc
# try_catch FastRoute -c 1 < $::env(fastroute_tmp_file_tag).tcl \
# |& tee $::env(TERMINAL_OUTPUT) $::env(fastroute_log_file_tag).log
# }
try_catch openroad -exit $::env(SCRIPTS_DIR)/openroad/or_fastroute.tcl |& tee $::env(TERMINAL_OUTPUT) $::env(fastroute_log_file_tag)_openroad.log
TIMER::timer_stop
exec echo "[TIMER::get_runtime]" >> $::env(fastroute_log_file_tag)_runtime.txt
}
proc detailed_routing {args} {
TIMER::timer_start
if {$::env(RUN_ROUTING_DETAILED)} {
try_catch envsubst < $::env(SCRIPTS_DIR)/tritonRoute.param > $::env(tritonRoute_tmp_file_tag).param
try_catch TritonRoute \
$::env(tritonRoute_tmp_file_tag).param \
|& tee $::env(TERMINAL_OUTPUT) $::env(tritonRoute_log_file_tag).log
} else {
exec echo "SKIPPED!" >> $::env(tritonRoute_log_file_tag).log
}
TIMER::timer_stop
exec echo "[TIMER::get_runtime]" >> $::env(tritonRoute_log_file_tag)_runtime.txt
# exec dr-cu \
# -lef $::env(MERGED_LEF) \
# -def $::env(RESULTS_DIR)/5_cts/5_4_cts.def \
# -guide $::env(RESULTS_DIR)/$::env(CURRENT_STAGE)/route.guide \
# -threads [exec nproc] \
# \
# -output $::env(RESULTS_DIR)/$::env(CURRENT_STAGE)/6_2_route.def \
# -tat 9999999 \
# |& tee $::env(TERMINAL_OUTPUT) $::env(LOG_DIR)/$::env(CURRENT_STAGE)/6_2_dr-cu.log
set_def $::env(tritonRoute_result_file_tag).def
}
proc ins_fill_cells {args} {
TIMER::timer_start
if {$::env(FILL_INSERTION)} {
try_catch sh $::env(SCRIPTS_DIR)/addspacers.sh $::env(CURRENT_DEF) $::env(addspacers_tmp_file_tag).def
} else {
exec echo "SKIPPED!" >> $::env(addspacers_log_file_tag).log
try_catch cp $::env(CURRENT_DEF) $::env(addspacers_tmp_file_tag).def
}
TIMER::timer_stop
exec echo "[TIMER::get_runtime]" >> $::env(addspacers_log_file_tag)_runtime.txt
set_def $::env(addspacers_tmp_file_tag).def
}
proc run_routing {args} {
# |----------------------------------------------------|
# |---------------- 5. ROUTING ----------------------|
# |----------------------------------------------------|
set ::env(CURRENT_STAGE) routing
# insert fill_cells
ins_fill_cells
# fastroute global 6_routing
global_routing
# detailed routing
detailed_routing
## TIMER END
set timer_end [clock seconds]
set timer_start $::env(timer_start)
set datetime $::env(datetime)
set runtime_s [expr {($timer_end - $timer_start)}]
set runtime_h [expr {$runtime_s/3600}]
set runtime_s [expr {$runtime_s-$runtime_h*3600}]
set runtime_m [expr {$runtime_s/60}]
set runtime_s [expr {$runtime_s-$runtime_m*60}]
puts "Completed $::env(DESIGN_NAME)/$datetime in ${runtime_h}h${runtime_m}m${runtime_s}s"
set runtime_log [open $::env(REPORTS_DIR)/runtime.txt w]
puts $runtime_log "Completed $::env(DESIGN_NAME)/$datetime in ${runtime_h}h${runtime_m}m${runtime_s}s"
close $runtime_log
}
proc gen_pdn {args} {
TIMER::timer_start
if {![info exists ::env(PDN_CFG)]} {
set ::env(PDN_CFG) $::env(OPENLANE_ROOT)/pdks/$::env(PDK)/libs.tech/openlane/common_pdn.tcl
}
#try_catch apply_pdn $::env(PDN_CFG).old \
#|& tee $::env(TERMINAL_OUTPUT) $::env(pdn_log_file_tag).log
try_catch openroad -exit $::env(SCRIPTS_DIR)/new_pdn.tcl \
|& tee $::env(TERMINAL_OUTPUT) $::env(pdn_log_file_tag).log
#try_catch mv $::env(TMP_DIR)/$::env(CURRENT_STAGE)/$::env(DESIGN_NAME)_post_T8.def $::env(pdn_tmp_file_tag).def
TIMER::timer_stop
exec echo "[TIMER::get_runtime]" >> $::env(pdn_log_file_tag)_runtime.txt
set_def $::env(pdn_tmp_file_tag).def
}
package provide openlane 0.9