Skip to content

Commit ff0629a

Browse files
committed
sdc: fix algorithm to pick .sdc file for generate abstract and make gui
fixes #2488 Signed-off-by: Øyvind Harboe <[email protected]>
1 parent 03d3d9a commit ff0629a

File tree

1 file changed

+35
-16
lines changed

1 file changed

+35
-16
lines changed

flow/scripts/util.tcl

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
4962
proc 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

6988
proc env_var_equals {env_var value} {

0 commit comments

Comments
 (0)