@@ -46,24 +46,43 @@ proc recover_power {} {
4646 report_power
4747}
4848
49+ proc extract_stage {input_file} {
50+ if {![regexp {/([0-9])_(([0-9])_)?} $input_file match num1 _ num2]} {
51+ puts " ERROR: Could not determine design stage from $input_file "
52+ exit 1
53+ }
54+ lappend number_groups $num1
55+ if {$num2 !=" " } {
56+ lappend number_groups $num2
57+ } else {
58+ lappend number_groups " 0"
59+ }
60+ }
61+
4962proc find_sdc_file {input_file} {
50- # Determine design stage (1 ... 6)
51- set input_pieces [split [file tail $input_file ] " _" ]
52- set design_stage [lindex $input_pieces 0]
53- if { [llength $input_pieces ] == 3 } {
54- set start [expr $design_stage - 1]
55- } else {
56- set start $design_stage
57- }
58- # Read SDC, first try to find the most recent SDC file for the stage
59- set sdc_file " "
60- for {set s $start } {$s > 0} {incr s -1} {
61- set sdc_file [glob -nocomplain -directory $::env(RESULTS_DIR) -types f " ${s} _\[ A-Za-z\] *\. sdc" ]
62- if {$sdc_file != " " } {
63- break
64- }
63+ # canonicalize input file, sometimes it is called with an input
64+ # file relative to $::env(RESULTS_DIR), other times with
65+ # an absolute path
66+ if { ![file exists $input_file ] } {
67+ set input_file [file join $::env(RESULTS_DIR) $input_file ]
68+ }
69+ set input_file [file normalize $input_file ]
70+
71+ set stage [extract_stage $input_file ]
72+ set design_stage [lindex $stage 0]
73+ set sdc_file " "
74+
75+ set exact_sdc [string map {.odb .sdc} $input_file ]
76+ set sdc_files [glob -nocomplain -directory $::env(RESULTS_DIR) -types f " \[ 1-9+\] _\[ 1-9_A-Za-z\] *\. sdc" ]
77+ set sdc_files [lsort -decreasing -dictionary $sdc_files ]
78+ set sdc_files [lmap file $sdc_files {file normalize $file }]
79+ foreach name $sdc_files {
80+ if {[lindex [lsort -decreasing -dictionary [list $name $exact_sdc ] ] 0] == $exact_sdc } {
81+ set sdc_file $name
82+ break
6583 }
66- return [list $design_stage $sdc_file ]
84+ }
85+ return [list $design_stage $sdc_file ]
6786}
6887
6988proc env_var_equals {env_var value} {
0 commit comments