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 } }