Dieses Skript erstellt eine SDO-Datei mit kombinierten Timing-Parametern aus zwei SDO-Dateien, die von der Quartus® II Software während der maximalen und minimalen Timing-Analyse generiert werden.
Die Quartus II Software generiert separate SDO-Dateien, die den mindesten oder maximalen Verzögerungswert für die drei Verzögerungswerte in jedem Dreifachteil verwenden. Trip drilling in SDO-Dateien unterstützen minimale, typische und maximale Verzögerungswerte wie diese: (min:typ:max). Eine von der Quartus II Software für die maximale Timing-Analyse generierte SDO-Datei hat Delay Trip ascii, die nur maximale Verzögerungswerte wie folgt enthält: (max:max:max). Eine während der Minimal-Timing-Analyse generierte SDO-Datei enthält Verzögerungs-Tripel, die nur minimale Verzögerungswerte wie folgt enthalten: (min:min:min).
Dieses Skript kombiniert SDO-Dateien mit minimalen und maximalen Werten, um eine Datei mit tripfile zu erstellen, die sowohl die mindeste als auch die maximale Anzahl haben, wie folgt: (min:max:max). Beachten Sie, dass der maximale Verzögerungswert auch für den typischen Verzögerungswert dupliziert wird. Die von diesem Skript generierte Datei wird nicht von Altera garantiert, dass sie für eine gemischte Minimal-/Maximalanalyse funktioniert.
Führen Sie das Skript wie folgt aus: quartus_sh -t combine_sdo.tcl -min_sdo <min sdo-Datei> -max_sdo <max-SDO-Datei> -new_sdo <neue SDO-Datei>
Paket erfordert cmdline Variable ::argv0 $::quartus(args) Set-Optionen { \ { "min_sdo.arg" "" "Dateiname des SDO mit min Timing" } \ { "max_sdo.arg" "" "Dateiname des SDO mit max. Timing" } \ { "new_sdo.arg" "" "Dateiname von SDO with min/max timing" } \ } array set opts [::cmdline::getoptions ::argv0 $options "Bad option"] set min [open $opts(min_sdo)] set max [open $opts(max_sdo)] set new [open $opts(new_sdo) w] # Behalten Sie den Überblick über die Zeilennummer im Dateisatz line_num 1, während { 1 } { # Die nächste Zeile aus den min- und max. SDO-Dateien gelesen wird, die more_min [gets $min min_line] festgelegt more_max [gets $max max_line # Finish, wenn keine Daten mehr in den Dateien vorhanden sind, wenn { $more_min < 0 || $more_max < 0 } { # Es ist möglich, dass eine Datei mehr Zeilen als die andere hat. Warnen Sie hier davor. wenn { $more_min >= 0 } { post_message -type warning \ "Entsprungene Zeilen, die mit zeile $line_num in $opts(min_sdo)" } beginnen, wenn { $more_max > = 0 } {post_message -type warning \ "Entsprungene Zeilen beginnen mit Zeile $line_num in $opts(max_sdo)" } # Da mindestens eine der Dateien keine Daten mehr hat, muss die Schleife angehalten werden. break } if { [regexp {\(\d+:\d+:\d+\)} $min_line] } { # Wenn die Zeile ein Verzögerungs-Triplet enthält, müssen die Werte # # kombiniert werden new_line sammelt den Text zum Ausdrucken an. #line_differences ist festgelegt, wenn neben der Verzögerungs-Triplet Unterschiede in den #-Zeilen vorhanden sind. setzen Sie new_line "" line_differences 0 # einstellen, während in der Zeile Verzögerungs-Triplete vorhanden sind ... while { [regexp {\(\d+:\d+:\d+\)} $min_line] } { # Extrahieren Sie alles bis zum Verzögerungs-Triplet, dem #Verzögerungswert selbst, und alles nach dem #delay triplet regexp {^(.*?\()(\d+):\d+:\d+(\).*$)} $min_line \ match min_start min_value min_line regexp {^(..*?\()\d+:\d+:(\d+)(\).*$)} $max_line \ match max_start max_value max_line # Setzen Sie eine Kennzeichnung, wenn neben dem Verzögerungs-Triplett Unterschiede in der Zeilennummer vorhanden sind wenn { ! [string equal $min_start $max_start] } { set line_differences 1 } # Setzen Sie das kombinierte Verzögerungs-Triplet in der neuen Zeile zusammen, um new_line $min_start \ $min_value : $max_value: $max_value } # Überprüfen Sie, welcher Text in der Zeile auf #Unterschiede überlässt. wenn { ! [string equal $min_line $max_line] } { set line_differences 1 } if { $line_differences } { post_message -type warning \ [join [list \ "Diese Teile der Zeile $line_num sind anders." \ " $opts(min_sdo): $min_line" \ " $opts(max_sdo): $max_line"] \ "\n"] } # Setzen Sie den Rest der Zeile, nach dem letzten Verzögerungs-Triplet: # zusammen in der neuen Zeile anhängen new_line $min_line } else { # Wenn die Zeile kein Verzögerungs-Triplet enthält, # die Zeilen aus den min- und max.Dateien sollten identisch sein (außer z. B. wenn in der Datei eine Datumsstempelnummer vorhanden ist). Führen Sie eine Schnellüberprüfung durch, um sicherzustellen, dass die Zeilen nr. gleich sind, und drucken Sie eine Warnung aus, falls sie anders sind. wenn { ! [string equal $min_line $max_line] } { post_message -type warning \ [join [list \ "Line $line_num is different." \ " Die neue Datei enthält die erste Zeile unten." \ " $opts(min_sdo): $min_line" \ " $opts(max_sdo): $max_line"] \ "\n"] } set new_line $min_line } # Schreib die Zeile in die kombinierte Datei, wodurch $new $new_line incr line_num } # Done durch die Dateien läuft. Schließen Sie alles, $min schließen Sie $max schließen Sie $new post_message "Dateien in $opts(new_sdo) kombinieren"