Przykład analizatora timingów: raport podsumowujący nieudane zegary

author-image

Według

Skrypt na tej stronie wykonuje analizę timingów konfiguracji, przytrzymaj, odzyskiwania i usuwania na wszystkich zegarach w Projekcie we wszystkich obsługiwanych warunkach operacyjnych. Skrypt tworzy tabelę zawierającą informacje o wszystkich problemach z synchronizacją czasową. Skrypt zapisze tabelę w pliku o nazwie <revision>.failing_clock_domains. W przypadku nieudanej nieudanej awarii, skrypt zapisze wiadomość do pliku, w którym nie udało się przeprowadzić żadnych awarii.

Za pomocą skryptu można uzyskać szybki i prosty przegląd wyników analizy błędów timingów przy projekcie. Jeśli zapiszesz skrypt w pliku o nazwie failing_clock_domains.tcl,użyj następującego polecenia, aby go uruchomić.

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

Oto przykład tabeli, jaką skrypt generuje w przypadku wystąpienia awarii timingów. W tabeli uwzględniono najbardziej niekorzystny slack, całkowity brak mocy (TNS), nazwę zegara, warunek działania, w którym wystąpił błąd oraz typ nieudanej analizy.

Domeny zegarowe, w przypadku awarii timingu

+--------+---------------+------------+-----------------------+-----------------+
; 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            ;
+--------+---------------+------------+-----------------------+-----------------+

Skopiuj i wkleij następujący kod TCL i zapisz go w pliku, aby użyć skryptu.

# Zgłoś, czy projekt ma domeny zegara z negatywnym zasuwem.
# Jeśli istnieją domeny zegara z negatywnym zapasem, włóż te informacje do
tabeli # i zapisz je w pliku.
# Zmień w tym miejscu nazwa pliku, jeśli jest to odpowiednie
ustawienie output_file_name [get_current_revision].failing_clock_domains

pakiet wymaga programowego::pakiet macierzy.
Wymaga to raportu #

Stwórz macierz w celu przechowywania informacji o nieujawnianych ścieżkach
ustawionych failing_paths_matrix [::typct::matrix];
$failing_paths_matrix dodaj kolumny 5

# Analiza musi być wykonana dla wszystkich warunków operacyjnych
ustawionych all_operating_conditions_col [get_available_operating_conditions]

# Wykonać te typy analizy dla każdej domeny zegara
ustawionej analysis_list [lista "setup" "hold" "recovery" "removal"]

# Przejdź przez wszystkie warunki operacyjne
foreach_in_collection operating_conditions_obj $all_operating_conditions_col {

   Ustaw warunek operacyjny,  zaktualizuj listę timingów
   set_operating_conditions $operating_conditions_obj
   update_timing_netlist # Pobierz

   angielską nazwę zestawu warunków operacyjnych
   operating_conditions_display_name   [get_operating_conditions_info -display_name $operating_conditions_obj]

   # Wykonuj każdy rodzaj analizy   
   foreach analysis_type $analysis_list {

      # Pobierz nazwę typu analizy, jeśli chcemy go wydrukować, ustawiając go
      analysis_display_name [string totagle $analysis_ typ]

      # Uzyskaj informacje o wszystkich domenach zegara
      ustawionych clock_domain_info_list [get_clock_domain_info -${analysis_type}]

      # Przejdź przez wszystkie domeny zegara i wyjmij wszystkie te, które mają # negatywny
      foreach slack domain_info $clock_domain_info_list {

         # Domain_info ma nazwę zegara, jego slack i TNS.
         # Rozpakuj te.      
         foreach { clock_name slack endpoint_tns edge_tns } $domain_info { break }

         # Jeśli zapas jest negatywny, ułożony wiersz informacji do raportu # w
         tabeli, jeśli { 0 > $slack } {
            $failing_paths_matrix add row [lista $slack $endpoint_tns $clock_name \
               $operating_conditions_display_name $analysis_display_name]
         } } #
      Ukończono przechodzenie przez wszystkie domeny zegara dla określonej
      analizy timingów #(konfiguracja,  hold itd.)  
   }
   # Ukończono przechodzenie przez wszystkie typy analizy dla określonego warunku operacyjnego
} #
Ukończono przechodzenie przez wszystkie warunki operacyjne
# Przygotuj się do zapisu pliku z podsumowaniem wyników

# Jeśli w macierzy są jakieś wiersze, są ścieżki, które zawodzą.
# Musimy wydrukować tabelę z danymi. Jeśli w tabeli nie ma
wierszy# nie ma timingów, nie ma ścieżek, więc zapisz wiadomość o sukcesie,
jeśli { 0 == [$failing_paths_matrix rows] } {

   # Wydrukuj szybki komunikat
   post_message "Nie ma domeny zegara, które nie wyświetlają timingów"

   # Jeśli występuje błąd otwierający plik, wydrukuj wiadomość
   o nr. W innym przypadku, powiedz, że nie ma nieudanego timingu w
   domenach, jeśli { [catch { open $output_file_name w } fh] } {
      post_message -błąd typu "Nie otwiera się plik: $fh"
   } in { umieszcza $fh   
      "Nie ma taktowania timingów"
      catch { zamknij $fh } } } jeszcze { #
   Sortuj wiersze macierzy, aby najgorzej było po raz pierwszy
   $failing_paths_matrix wiersze sortu -zwiększające się 0

   # Wprowadź wiersz nagłówka
   $failing_paths_matrix insert row 0[lista "Slack" "End Point TNS" "Clock" \
      "Warunki operacyjne" "analiza timingów" ]   

   # Potrzebny nam styl zdefiniowany do wydruku tabeli
   wyników catch { ::report::rmstyle basicrpt }
   ::report::d efstyle basicrpt {{cap_rows 1}} {
      zestaw danych [split "[string repeat " [ kolumny]];"]
      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 
   } #

   Stwórz raport, ustaw kolumny na jedną przestrzeń do wypełnienia i
   # wydrukuj macierz z określonym formatem
   catch { r destroy }
   ::report::report r 5 style basicrpt
   dla { set col 0 } { $col < [r columns]} { incr col } {
      r pad $col both " "
   } post_message "Clock domains failing timing\n[r printmatrix $failing_paths_matrix]"

   # Zapisz raport w
   pliku, jeśli { [catch { open $output_file_name w } fh] } {
      post_message —błąd typu "Nie otwiera się plik nie otwiera pliku: $fh"   
   } jeszcze { umieszcza $fh
      "timing nieudanego zegara domen"
      r printmatrix2channel $failing_paths_matrix $fh
      catch { close $fh }
}

Materiały zawarte na tej stronie są tłumaczeniem z języka angielskiego, wykonanym częściowo przez człowieka, a częściowo automatycznie. Materiały te są udostępnione dla Twojej wygody i należy je traktować jedynie jako ogólne źródło informacji. Nie ma jednak gwarancji, że są one kompletne bądź poprawne. Jeśli istnieje jakakolwiek rozbieżność między wersją angielską tej strony a jej tłumaczeniem, wersja angielska jest wersją obowiązującą i ma rozstrzygające znaczenie. Wyświetl anglojęzyczną wersję tej strony.