blob: f161ced2fb5fce55cc9a1ed0ab5d4bf0ae96dce2 [file] [log] [blame]
#!/usr/bin/tclsh8.5
# Copyright (c) Efabless Corporation. All rights reserved.
# See LICENSE file in the project root for full license information.
set ::env(OPENLANE_ROOT) [file dirname [file normalize [info script]]]
source $::env(OPENLANE_ROOT)/scripts/utils/utils.tcl
proc run_non_interactive_mode {args} {
set args_copy $args
set options {{-save_path optional}}
set flags {-save}
parse_key_args "run_non_interactive_mode" args_copy arg_values $options flags_map $flags
set ::env(OPENLANE_ROOT) [file dirname [file normalize [info script]]]
source $::env(OPENLANE_ROOT)/scripts/tcl_commands/all.tcl
if {[prep {*}$args] < 0} {
puts "prep failed"
exit
}
run_synthesis
run_floorplan
run_placement
#run_cts
gen_pdn
run_routing
run_magic
run_magic_drc
#export_magic_view \
-def $::env(CURRENT_DEF) \
-output $::env(magic_result_file_tag).mag
run_magic_spice_export
run_netgen
if { [info exists flags_map(-save) ] } {
if { [info exists arg_values(-save_path)] } {
save_magic_views -full_lef_path $::env(magic_result_file_tag).full.lef \
-abstract_lef_path $::env(magic_result_file_tag).lef \
-gds_path $::env(magic_result_file_tag).gds \
-mag_path $::env(magic_result_file_tag).mag \
-save_path $arg_values(-save_path) \
-tag $::env(RUN_TAG)
} else {
save_magic_views -full_lef_path $::env(magic_result_file_tag).full.lef \
-abstract_lef_path $::env(magic_result_file_tag).lef \
-mag_path $::env(magic_result_file_tag).mag \
-gds_path $::env(magic_result_file_tag).gds \
-tag $::env(RUN_TAG)
}
}
}
proc run_interactive_mode {args} {
set ::env(TCLLIBPATH) $::env(OPENLANE_ROOT)/scripts/tcl_commands/
exec tclsh |& tee /dev/tty
}
proc run_magic_drc_batch {args} {
set options {{-magicrc optional} \
{-tech optional} \
{-report required} \
{-design required} \
{-gds required}}
set flags {}
parse_key_args "run_magic_drc_batch" args arg_values $options flags_mag $flags
if { [info exists arg_values(-magicrc)] } {
set magicrc [file normalize $arg_values(-magicrc)]
}
if { [info exists arg_values(-tech)] } {
set ::env(TECH) [file normalize $arg_values(-tech)]
}
set ::env(GDS_INPUT) [file normalize $arg_values(-gds)]
set ::env(REPORT_OUTPUT) [file normalize $arg_values(-report)]
set ::env(DESIGN_NAME) $arg_values(-design)
if { [info exists magicrc] } {
exec magic \
-noconsole \
-dnull \
-rcfile $magicrc \
$::env(OPENLANE_ROOT)/scripts/magic_drc_batch.tcl \
</dev/null |& tee /dev/tty
} else {
exec magic \
-noconsole \
-dnull \
$::env(OPENLANE_ROOT)/scripts/magic_drc_batch.tcl \
</dev/null |& /dev/tty
}
}
proc run_file {args} {
set ::env(TCLLIBPATH) $::env(OPENLANE_ROOT)/scripts/tcl_commands/
exec tclsh $args |& tee /dev/tty
}
set options {{-design optional} \
{-tag optional} \
{-config optional} \
{-file optional} \
}
set flags {-init_design_config -disable_output -interactive -drc -no_save}
set argv_copy $argv
parse_key_args "flow.tcl" argv arg_values $options flags_map $flags
if { [info exists flags_map(-interactive)] } {
if { [info exists arg_values(-file)] } {
run_file [file normalize $arg_values(-file)]
} else {
run_interactive_mode "$argv_copy"
}
} elseif { [info exists flags_map(-drc)] } {
run_magic_drc_batch {*}$argv_copy
} else {
run_non_interactive_mode {*}$argv_copy
}