Exemple d’analyseur de synchronisation : rapport de synthèse des horloges défaillantes

author-image

Par

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

Le contenu de cette page est une combinaison de traduction humaine et informatique du contenu original en anglais. Ce contenu vous est fourni pour votre commodité et à titre informatif seulement et ne saurait être totalement exact ou complet. En cas de contradiction entre la version anglaise de cette page et la traduction, c'est la version anglaise qui prévaut. Afficher la version anglaise de cette page.