blob: 402fde2dcf0b3dcb21fe4333cc6dfedd5fbd8517 [file] [log] [blame]
if {![info exists vars(lint)]} {
set vars(lint) 0
}
# Overload command behavior
catch {rename setDesignMode setDesignModeOrig}
catch {rename setDelayCalMode setDelayCalModeOrig}
catch {rename setTieHiLoMode setTieHiLoModeOrig}
catch {rename setPlaceMode setPlaceModeOrig}
catch {rename setCTSMode setCTSModeOrig}
catch {rename setCCOptMode setCCOptModeOrig}
catch {rename setFillerMode setFillerModeOrig}
catch {rename setNanoRouteMode setNanoRouteModeOrig}
catch {rename setExtractRCMode setExtractRCModeOrig}
catch {rename setSIMode setSIModeOrig}
catch {rename create_library_set create_library_set_orig}
catch {rename create_rc_corner create_rc_corner_orig}
catch {rename create_delay_corner create_delay_corner_orig}
catch {rename create_constraint_mode create_constraint_mode_orig}
catch {rename create_analysis_view create_analysis_view_orig}
proc setDesignMode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_commands "setDesignMode $args"
} else {
setDesignModeOrig $args
}
}
proc setDelayCalMode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_commands "setDelayCalMode $args"
} else {
setDelayCalModeOrig $args
}
}
proc setTieHiLoMode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_commands "setTieHiLoMode $args"
} else {
setTieHiLoModeOrig $args
}
}
proc setPlaceMode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_commands "setPlaceMode $args"
} else {
setPlaceModeOrig $args
}
}
proc setCTSMode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_commands "setCTSMode $args"
} else {
setCTSModeOrig $args
}
}
proc setCCOptMode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_commands "setCCOptMode $args"
} else {
setCCOptModeOrig $args
}
}
proc setFillerMode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_commands "setFillerMode $args"
} else {
setFillerModeOrig $args
}
}
proc setNanoRouteMode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_commands "setNanoRouteMode $args"
} else {
setNanoRouteModeOrig $args
}
}
proc setExtractRCMode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_commands "setExtractRCMode $args"
} else {
setExtractRCModeOrig $args
}
}
proc setSIMode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_commands "setSIMode $args"
} else {
setSIModeOrig $args
}
}
proc create_rc_corner {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_options "create_rc_corner $args"
} else {
create_library_set $args
}
}
proc create_library_set {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_options "create_library_set $args"
} else {
create_library_set $args
}
}
proc create_delay_corner {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_options "create_delay_corner $args"
} else {
create_delay_corner $args
}
}
proc create_constraint_mode {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_options "create_constraint_mode $args"
} else {
create_constraint_mode $args
}
}
proc create_analysis_view {args} {
global vars
if {$vars(lint)} {
ff_edi::seed_options "create_analysis_view $args"
} else {
create_analysis_view $args
}
}
namespace eval ff_edi {
proc seed_options {command_string} {
global vars
set command [lindex $command_string 0]
set args [lreplace $command_string 0 0]
switch $command {
setDesignMode {
while {[llength $args] > 0} {
set option [lindex $args 0]
set args [lreplace $args 0 0]
switch -regexp -- $option {
process {
set vars(process) [lindex $args 0]
set args [lreplace $args 0 0]
}
}
}
}
setPlaceMode {
while {[llength $args] > 0} {
set option [lindex $args 0]
set args [lreplace $args 0 0]
switch -regexp -- $option {
placeIoPins {
set vars(place_io_pins) [lindex $args 0]
set args [lreplace $args 0 0]
}
congEffort {
set vars(congestion_effort) [lindex $args 0]
set args [lreplace $args 0 0]
}
}
}
}
setOptMode {
while {[llength $args] > 0} {
set option [lindex $args 0]
set args [lreplace $args 0 0]
switch -regexp -- $option {
allEndPoints {
set vars(all_end_points) [lindex $args 0]
set args [lreplace $args 0 0]
}
preserveAsssertions {
set vars(preserve_assertions) [lindex $args 0]
set args [lreplace $args 0 0]
}
leakagePowerEffort {
set vars(leakage_power_effort) [lindex $args 0]
set args [lreplace $args 0 0]
}
dynamicPowerEffort {
set vars(leakage_power_effort) [lindex $args 0]
set args [lreplace $args 0 0]
}
}
}
}
setCTSMode {
while {[llength $args] > 0} {
set option [lindex $args 0]
set args [lreplace $args 0 0]
switch -regexp -- $option {
routeClkNets {
set vars(route_clock_nets) [lindex $args 0]
set args [lreplace $args 0 0]
}
}
}
}
setNanoRouteMode {
while {[llength $args] > 0} {
set option [lindex $args 0]
set args [lreplace $args 0 0]
switch -regexp -- $option {
drouteMultiCutViaEffort {
set vars(multi_cut_effort) [lindex $args 0]
set args [lreplace $args 0 0]
}
}
}
}
create_rc_corner {
while {[llength $args] > 0} {
set option [lindex $args 0]
set args [lreplace $args 0 0]
switch -regexp -- $option {
-name {
set rc_corner [lindex $args 0]
Puts "<FF> Found rc corner $rc_corner"
if {![info exists vars(rc_corners)]} {
set vars(rc_corners) $rc_corner
} else {
append vars(rc_corners) $rc_corner
}
set args [lreplace $args 0 0]
}
-T {
set vars($rc_corner,T) [lindex $args 0]
set args [lreplace $args 0 0]
}
-cap_table {
set vars($rc_corner,cap_table) [lindex $args 0]
set args [lreplace $args 0 0]
}
-qx_tech_file {
set vars($rc_corner,qx_tech_file) [lindex $args 0]
set args [lreplace $args 0 0]
}
-preRoute_res {
set vars($rc_corner,pre_route_res_factor) [lindex $args 0]
}
-preRoute_cap {
set vars($rc_corner,pre_route_cap_factor) [lindex $args 0]
}
-preRoute_clkres {
set vars($rc_corner,pre_route_clk_res_factor) [lindex $args 0]
}
-preRoute_clkcap {
set vars($rc_corner,pre_route_clk_cap_factor) [lindex $args 0]
}
-postRoute_res {
set vars($rc_corner,post_route_res_factor) [lindex $args 0]
}
-postRoute_cap {
set vars($rc_corner,post_route_cap_factor) [lindex $args 0]
}
-postRoute_res {
set vars($rc_corner,post_route_clk_res_factor) [lindex $args 0]
}
-postRoute_clkcap {
set vars($rc_corner,post_route_clk_cap_factor) [lindex $args 0]
}
-postRoute_clkres {
set vars($rc_corner,post_route_clk_res_factor) [lindex $args 0]
}
-postRoute_xcap {
set vars($rc_corner,post_route_xcap_factor) [lindex $args 0]
}
}
}
}
create_library_set {
while {[llength $args] > 0} {
set option [lindex $args 0]
set args [lreplace $args 0 0]
switch -regexp -- $option {
-name {
set library_set [lindex $args 0]
Puts "<FF> Found library set $library_set"
if {![info exists vars(library_sets)]} {
set vars(library_sets) $library_set
} else {
append vars(library_sets) $library_set
}
set args [lreplace $args 0 0]
}
-timing {
set vars($library_set,timing) [lindex $args 0]
set args [lreplace $args 0 0]
}
}
}
}
create_delay_corner {
while {[llength $args] > 0} {
set option [lindex $args 0]
set args [lreplace $args 0 0]
switch -regexp -- $option {
-name {
set delay_corner [lindex $args 0]
Puts "<FF> Found delay corner $delay_corner"
if {![info exists vars(delay_corners)]} {
set vars(delay_corners) $delay_corner
} else {
append vars(delay_corners) $delay_corner
}
set args [lreplace $args 0 0]
}
-library_set {
set vars($delay_corner,library_set) [lindex $args 0]
set args [lreplace $args 0 0]
}
-rc_corner {
set vars($delay_corner,rc_corner) [lindex $args 0]
set args [lreplace $args 0 0]
}
}
}
}
create_constraint_mode {
while {[llength $args] > 0} {
set option [lindex $args 0]
set args [lreplace $args 0 0]
switch -regexp -- $option {
-name {
set constraint_mode [lindex $args 0]
Puts "<FF> Found constraint mode $constraint_mode"
if {![info exists vars(constraint_modes)]} {
set vars(constraint_modes) $constraint_mode
} else {
append vars(delay_corners) $constraint_mode
}
set args [lreplace $args 0 0]
}
-sdc_files {
set vars($constraint_mode,sdc_files) [lindex $args 0]
set vars($constraint_mode,pre_cts_sdc) [lindex $args 0]
set args [lreplace $args 0 0]
}
-ilm_sdc_files {
set vars($constraint_mode,ilm_sdc_files) [lindex $args 0]
set args [lreplace $args 0 0]
}
}
}
}
create_analysis_view {
while {[llength $args] > 0} {
set option [lindex $args 0]
set args [lreplace $args 0 0]
switch -regexp -- $option {
-name {
set analysis_view [lindex $args 0]
if {![info exists vars(constraint_modes)]} {
set vars(analysis_views) $analysis_view
} else {
append vars(analysis_views) $analysis_view
}
set args [lreplace $args 0 0]
}
-constraint_mode {
set vars($analysis_view,constraint_mode) [lindex $args 0]
set args [lreplace $args 0 0]
}
-delay_corner {
set vars($analysis_view,delay_corner) [lindex $args 0]
set args [lreplace $args 0 0]
}
}
}
}
}
}
proc seed_commands {command_string} {
global vars
set command [lindex $command_string 0]
set args [lreplace $command_string 0 0]
Puts "<FF> Processing mode commands $command ..."
switch $command {
setDesignMode {
set vars(set_design_mode) $command_string
}
setTieHiLoMode {
set vars(set_tiehilo_mode) $command_string
}
setPlaceMode {
set vars(set_place_mode) $command_string
}
setDelayCalMode {
set vars(set_delay_cal_mode) $command_string
}
setOptMode {
set vars(set_opt_mode) $command_string
}
setCTSMode {
set vars(set_cts_mode) $command_string
}
setCCOptMode {
set vars(set_ccopt_mode) $command_string
}
setFillerMode {
set vars(set_filler_mode) $command_string
}
setNanoRouteMode {
set vars(set_route_mode) $command_string
}
setExtractRCMode {
set vars(set_extract_rc_mode) $command_string
}
setSIMode {
set vars(set_si_mode) $command_string
}
}
}
}