blob: 10a861bb7189535640dd5f19f96a92a3335845b5 [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 ::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
run_magic_spice_export
run_netgen
}
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}
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 $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
}