Timing-Analyzer-Beispiel: Fehlgeschlagener Clocks Summary Report

author-image

Von

Das Skript auf dieser Seite führt Setup-, Halte-, Wiederherstellungs- und Entfernungs-Timing-Analyse auf allen Taktfrequenzen in Ihrem Design bei allen unterstützten Betriebsbedingungen durch. Das Skript erstellt eine Tabelle, die Informationen zu allen Analysen auflistet, bei denen das Timing fehlgeschlagen ist. Das Skript schreibt die Tabelle in eine Datei namens <revision>.failing_clock_domains. Wenn keine Analysen fehlgeschlagen sind, schreibt das Skript eine Nachricht in die Datei, dass keine Analysen fehlgeschlagen sind.

Sie können das Skript verwenden, um einen schnellen, einfachen Überblick über die fehlerhaften Timing-Analyseergebnisse für ein Design zu erhalten. Wenn Sie das Skript in einer Datei namens failing_clock_domains.tclspeichern, verwenden Sie den folgenden Befehl, um es auszuführen.

quartus_sta --report_script=failing_clock_domains.tcl <project name> [-c <revision name>]

Hier ist ein Beispiel für die Tabelle, die das Skript generiert, wenn analysen das Timing fehlschlagen. Die Tabelle enthält den Worst-Case-Slack, den gesamten negativen Slack (TNS), den Namen der Taktfrequenz, die Betriebsbedingung, in der der Fehler aufgetreten ist, und den Fehlerhaften Analysetyp.

Fehler bei Clock-Domains

+--------+---------------+------------+-----------------------+-----------------+
; Slack  ; End Point TNS ; Clock      ; Operating conditions  ; Timing analysis ;
+--------+---------------+------------+-----------------------+-----------------+
; -0.113 ; -0.321        ; IF_RXCLK   ; Slow 1100mV 85C Model ; Setup           ;
; -0.098 ; -0.223        ; core_clk   ; Fast 1100mV 0C Model  ; Hold            ;
+--------+---------------+------------+-----------------------+-----------------+

Kopieren Sie den folgenden TCL-Code und speichern Sie ihn in einer Datei, um das Skript zu verwenden.

Anzahl Melden Sie, ob ein Design Clock-Domains mit negativem Slack hat.
Anzahl Wenn es Clock-Domains mit negativem Slack gibt, stecken Sie diese Informationen in
# eine Tabelle und schreiben Sie sie in eine Datei.
# Ändern Sie den Dateinamen hier, falls sie angemessen
output_file_name [get_current_revision].failing_clock_domains

Paket erfordern:struct::matrix
package require report # Create a matrix to hold information about the failing paths set failing_paths_matrix
[::struct::matrix];
$failing_paths_matrix add columns 5

# Die Analyse muss für alle betriebsbereiten Bedingungen durchgeführt
werden, die all_operating_conditions_col [get_available_operating_conditions]

# diese Arten von Analysen für jeden Takt-Domain-Satz
analysis_list [List "setup" "hold" "recovery" "removal"]

#Walk through all operating conditions
foreach_in_collection operating_conditions_obj $all_operating_conditions_domains

   {# Set the operating condition,  Aktualisieren Sie die
   Timing-Netliste set_operating_conditions $operating_conditions_obj
   update_timing_netlist # Holen Sie sich den Namen des englischen

   Text-Zeichens der operating_conditions_display_name gesetzten Betriebsbedingungen   [get_operating_conditions_info -display_name $operating_conditions_obj]

   # Führen Sie jede Art von Analyse   
   foreach analysis_type $analysis_list {

      # Den Namen des Analysetyps aus, wenn wir
      ihn analysis_display_name [string totitle $analysis_ ausdrucken müssen type]

      # Erhalten Sie Informationen zu allen clock_domain_info_list gesetzten Clock-Domains
      [get_clock_domain_info -${analysis_type}]

      # Gehen Sie durch alle Taktdomains und ziehen Sie alle aus, die
      domain_info $clock_domain_info_list { # negative Slack haben: {

         # Der domain_info hat den Taktnamen, seinen Slack und sein TNS.
         Anzahl extrahieren Sie diese.      
         foreach { clock_name Slack endpoint_tns edge_tns } $domain_info { break }

         # Wenn der Slack negativ ist, fügen Sie eine Informationsreihe zum
         #bericht in der Tabelle
         zusammen, wenn { 0 > $slack } {
            $failing_paths_matrix add row [list $slack $endpoint_tns $clock_name \
               $operating_conditions_display_name $analysis_display_name]
         } #
      Finished going through all the clock domains for a particular
      # timing analysis (setup,  halten, usw.)  
   }
   Anzahl wurde durch alle Analysetypen für eine bestimmte
   Betriebsnummer abgeschlossen
} # Beendet durch alle
Betriebsbedingungen # Bereiten Sie die Erstellung
einer Datei mit der Zusammenfassung der Ergebnisse

vor. Wenn es In der Matrix Zeilen gibt, gibt es Pfade, die das Timing fehlgeschlagen sind.
Anzahl wir müssen die Tabelle mit diesen Informationen ausdrucken. Wenn es
keine Anzahl von Zeilen in der Tabelle gibt, schlägt das Timing keine Pfade fehl. Schreiben Sie also eine Erfolgsnachricht,
wenn { 0 == [$failing_paths_matrix rows] } {

   # Drucken Sie eine Schnellnachricht aus post_message
   "Es gibt keine Clock-Domains fehlgeschlagenes Timing"

   # Wenn ein Fehler beim Öffnen der Datei vorliegt, drucken Sie eine Nachricht aus, die
   die Nummer besagt. Andernfalls, sagen, es gibt keine Domains, die das Timing fehlgeschlagen
   haben, wenn { [catch { open $output_file_name w } fh] } {
      post_message -type error "Couldn't open file: $fh"
   } else { puts $fh   
      "There are no clock domains failing timing" (Es gibt keine Clock-Domains fehlgeschlagenes Timing)
      catch {close $fh } } else
   { # Sortieren Sie die
   Matrixreihen, damit der schlechteste Slack zuerst
   $failing_paths_matrix sort rows ist – erhöhung von 0

   # in einer Header-Zeile
   $failing_paths_matrix insert row 0[list "Slack" "End Point TNS" "Clock" \
      "Betriebsbedingungen" "Timing-Analyse" ]   

   # Wir benötigen einen Stil, der zum Ausdrucken der Tabelle der Ergebnisse definiert ist {
   ::report::rmstyle basicrpt }
   ::report::d efstyle basicrpt {{cap_rows 1}} {
      Datensatz [geteilt "[String wiederholen " " [Spalten]];]]
      top set [split "[string repeat "+ - " [columns]]+"]
      bottom set [top get]
      topcapsep set [top get]
      topdata set [data get]
      top enable
      topcapsep enable
      bottom enable
      tcaption $cap_rows 
   } # Create the

   report, setzen Sie die Spalten auf einen Bereich mit Einer- und Anzahl aus, und drucken Sie
   die Matrix mit dem angegebenen Format catch
   { r destroy }
   aus::report::report r 5 style basicrpt
   für { set of 0 } { $col < [r columns]} { incr of } {
      r pad $col sowohl " "
   }
   post_message "Clock domains failing timing\n[r printmatrix $failing_paths_matrix]"

   # Speichern Sie den Bericht in einer
   Datei, wenn { [catch { open $output_file_name w } fh] } {
      post_message -typ error "Couldn't open file: $fh"   
   } else { puts $fh
      "Clock domains failing timing"
      r printmatrix2channel $failing_paths_matrix $fh
      catch { close $fh } }
}

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.