Le script de cette page effectue l’analyse de la configuration, de la conservation, de la récupération et du retrait de toutes les horloges de votre conception dans toutes ses conditions de fonctionnement prises en charge. Le script crée un tableau qui répernumère les informations sur toutes les analyses qui ont échoué dans le timing. Le script écrit le tableau dans un fichier appelé <revision>.failing_clock_domains. Si aucune analyse n’a échoué, le script écrit un message au fichier indiquant qu’aucune analyse n’a échoué.
Vous pouvez utiliser le script pour obtenir un aperçu rapide et simple des résultats d’analyse de synchronisation défectueux pour une conception. Si vous enregistrez le script dans un fichier appelé failing_clock_domains.tcl, utilisez la commande suivante pour l’exécuter.
quartus_sta --report_script=failing_clock_domains.tcl <project name> [-c <revision name>]
Voici un exemple du tableau que le script génère si des analyses échouent dans la synchronisation. Le tableau comprend le pire cas de slack, le slack négatif total (TNS), le nom de l’horloge, l’état de fonctionnement dans lequel la panne s’est produite, et le type d’analyse qui a échoué.
Domaines d’horloge défectueux
+--------+---------------+------------+-----------------------+-----------------+
; 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 ;
+--------+---------------+------------+-----------------------+-----------------+
Copiez et collez le code TCL suivant et enregistrez-le dans un fichier pour utiliser le script.
# Indiquez si un design possède des domaines d’horloge avec un slack négatif. # S’il existe des domaines d’horloge avec un slack négatif, placez ces informations dans # un tableau et écrivez-les dans un fichier. # Changez le nom du fichier ici si le jeu approprié output_file_name [get_current_revision].failing_clock_domains package nécessite 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 # Analysis doit être effectuée pour toutes les conditions de fonctionnement définies all_operating_conditions_col [get_available_operating_conditions] # Effectuer ces types d’analyse pour chaque domaine d’horloge défini analysis_list [liste « setup » « hold » « hold » « recovery » « removal » ] # Walk through all operating conditions foreach_in_collection operating_conditions_obj $all_operating_conditions_col { # Définir la condition d’exploitation, mettre à jour la netlist de synchronisation set_operating_conditions $operating_conditions_obj update_timing_netlist # Obtenez le nom en texte anglais des conditions de fonctionnement définies operating_conditions_display_name [get_operating_conditions_info -display_name $operating_conditions_obj] # Faites chaque type d’analyse foreach analysis_type $analysis_list { # Obtenez le nom du type d’analyse si nous devons l’imprimer défini analysis_display_name [string totitle $analysis_ type] # Obtenez des informations sur tous les domaines d’horloge définis clock_domain_info_list [get_clock_domain_info -${analysis_type}] # Parcourez tous les domaines d’horloge et tirez celui qui ont # slack foreach négatif domain_info $clock_domain_info_list { # Le domain_info a le nom de l’horloge, son slack, et son TNS. # Extrayez-les. foreach { clock_name slack endpoint_tns edge_tns } $domain_info { break } # Si le slack est négatif, mettez en place une ligne d’informations pour n° de rapport dans le tableau si { 0 > $slack } { $failing_paths_matrix add row [liste $slack $endpoint_tns $clock_name \ $operating_conditions_display_name $analysis_display_name] } } # Terminé en passant par tous les domaines d’horloge pour une analyse de synchronisation #particulière (configuration, configuration, tenir, etc.) } # Terminé en passant par tous les types d’analyse pour une condition de fonctionnement particulière # } # Terminé en passant par toutes les conditions de fonctionnement # Préparer l’écriture d’un fichier avec le résumé des résultats S’il y a des lignes dans la matrice, il y a des chemins qui ne prennent pas en compte le timing. # Nous devons imprimer le tableau avec ces informations. S’il n’y a pas de lignes # dans le tableau, aucun chemin ne échoue dans la synchronisation, écrivez donc un message de réussite si { 0 == [$failing_paths_matrix rows] } { Imprimer un message rapide post_message « Il n’y a pas de domaines d’horloge qui échouent dans la synchronisation » # S’il y a une erreur ouvrant le fichier, imprimez un message indiquant nº 1. Sinon, dire qu’il n’y a pas de domaines à défaut de synchronisation si {[catch { open $output_file_name w } fh] } { post_message-type d’erreur « Impossible d’ouvrir le fichier : $fh » } d’autre { met $fh « Il n’y a pas de domaines d’horloge qui échouent » capture { Fermez $fh $fh } } } d’autre { Trier les lignes de matrice afin que le pire slack soit d’abord $failing_paths_matrix sort rows -increasing 0 # Put in a header row $failing_paths_matrix insert row 0[list « Slack » « End Point TNS » « Clock » \ « Conditions de fonctionnement » « Analyse de synchronisation » ] Nous avons besoin d’un style défini pour imprimer le tableau des résultats de capture { ::report::rmcenter basicrpt } ::report::d efinder basicrpt {{cap_rows 1}} { jeu de données [split « [string repeat » » [columns];] top set [split « [string repeat « + - " [columns]+"] bottom set [top get] topcapsep set [top get] topdata set [data get] topcapsep enable bottom enable bottom enable tcaption $cap_rows } # Create the report, définissez les colonnes pour disposer d’un espace de publi cité, et # imprimez la matrice avec le format de capture spécifié { r destroy } ::report::report r 5 style basicrpt pour {set col 0 } { $col < [r columns]} { incr col } { r pad $col les deux » » } post_message « Domaines d’horloge défectueux timing\n[r printmatrix $failing_paths_matrix] » # Enregistrez le rapport dans un fichier si {capture {open $output_file_name w } fh] } { $output_file_name Erreur de type post_message « Impossible d’ouvrir le fichier : $fh » } d’autre { met $fh « domaines d’horloge à défaut de synchronisation » r printmatrix2channel $failing_paths_matrix $fh capture { fermer $fh } } }