Esempio di analizzatore di temporizzazione: rapporto riepilogativo clock guasto

author-image

di

Lo script in questa pagina esegue l'analisi delle tempistiche di configurazione, attesa, ripristino e rimozione su tutti i clock nella progettazione in tutte le condizioni operative supportate. Lo script crea una tabella che elenca le informazioni su tutte le analisi che hanno fallito la tempistica. Lo script scrive la tabella in un file denominato <revision>.failing_clock_domains. Se nessuna analisi non è riuscita, lo script scrive un messaggio nel file in cui non è stata eseguita alcuna analisi.

È possibile utilizzare lo script per ottenere una panoramica rapida e semplice dei risultati dell'analisi dei tempi non riusciti per una progettazione. Se si salva lo script in un file denominato failing_clock_domains.tcl, utilizzare il seguente comando per eseguirlo.

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

Ecco un esempio della tabella che lo script genera se eventuali analisi non riescono a eseguire la tempistica. La tabella include il margine di flessibilità peggiore, il margine di flessibilità totale negativo (TNS), il nome del clock, la condizione operativa in cui si è verificato il guasto e il tipo di analisi che ha fallito.

Temporizzazione dei domini di clock non riuscita

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

Copiare e incollare il seguente codice TCL e salvarlo in un file per utilizzare lo script.

# Segnala se un progetto ha domini di clock con rallentamento negativo.
# Se ci sono domini di clock con rallentamento negativo, inserire le informazioni in
# una tabella e scriverla in un file.
# Modificare il nome del file qui se
l'impostazione appropriata output_file_name [get_current_revision].failing_clock_domains

pacchetto richiede struct::matrix
package require report # Crea una matrice per contenere informazioni sui percorsi non riusciti
impostati failing_paths_matrix [::struct::matrix];
$failing_paths_matrix add columns 5

# Analisi deve essere eseguita per tutte le condizioni operative
impostate all_operating_conditions_col [get_available_operating_conditions]

# Eseguire questi tipi di analisi per ciascun set di domini di clock analysis_list
[elenco "setup" "hold" "recovery" "removal"]

# Walk through all operating conditions
foreach_in_collection operating_conditions_obj $all_operating_conditions_col {

   # Impostare la condizione operativa,  aggiornare il netlist di
   temporizzazione set_operating_conditions $operating_conditions_obj
   update_timing_netlist # Ottieni il nome in inglese delle condizioni operative
   impostate operating_conditions_display_name   [get_operating_conditions_info -display_name $operating_conditions_obj]

   # Esegui ogni tipo di analisi   
   foreach analysis_type $analysis_list {

      # Ottieni il nome del tipo di analisi se dobbiamo stamparlo
      impostato analysis_display_name [string totitle $analysis_ type]

      # Ottieni informazioni su tutti i domini di clock
      impostati clock_domain_info_list [get_clock_domain_info -${analysis_type}]

      # Attraversa tutti i domini di clock ed estrae tutti i domini di clock che hanno
      un foreach di slack n. negativo
      domain_info $clock_domain_info_list {

         # Il domain_info ha il nome del clock, il suo slack e il suo TNS.
         # Estrarli.      
         foreach { clock_name slack endpoint_tns edge_tns } $domain_info { break }

         # Se il margine di flessibilità è negativo, mettere insieme una riga di informazioni a # report nella tabella se {
         0 > $slack } {
            $failing_paths_matrix add row [list $slack $endpoint_tns $clock_name \
               $operating_conditions_display_name $analysis_display_name]
         } } # Completato
      l'esecuzione di tutti i domini di clock per un'analisi # timing particolare
      (setup, setup,  tenere premuto, ecc.)  
   }
   # Finito di esaminare tutti i tipi di analisi per una particolare condizione di errore operativo
   } # Finito di passare attraverso tutte le condizioni operative #
Preparatevi a scrivere un file con il riepilogo dei risultati

# Se ci sono righe nella matrice, ci sono percorsi che non funzionano.
# Dobbiamo stampare la tabella con le informazioni. Se non ci sono
righe di numero nella tabella, nessun percorso non riesce a tempismo, quindi scrivere un messaggio di successo se {
0 == [$failing_paths_matrix rows] } {

   # Stampa un messaggio rapido post_message
   "Non ci sono domini di clock che non funzionano"

   # Se c'è un errore che apre il file, stampa un messaggio che dice
   # che. In caso contrario, dire che non ci sono domini che non funzionano la tempistica
   se { [catch { aprire $output_file_name w } fh] } {
      errore di tipo post_message "Impossibile aprire il file: $fh"
   } altro { mette $fh   
      "Non ci sono domini di clock che non funzionano"
      catch { chiudi $fh } } } } else { #
   Ordina le righe della matrice in modo che il margine di flessibilità peggiore sia prima
   $failing_paths_matrix ordina le righe -aumentando 0

   # Inserire una riga di intestazione
   $failing_paths_matrix insert row 0[list "Slack" "End Point TNS" "Clock" \
      "Condizioni operative" "Analisi dei tempi" ]   

   # Abbiamo bisogno di uno stile definito per stampare la tabella dei risultati catch {
   ::report::rmstyle basicrpt }
   ::report::d efstyle basicrpt {{cap_rows 1}} {
      set di dati [split "[string repeat " " "[colonne]];"]
      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 
   } # Crea il

   report, impostare le colonne in modo che abbiano uno spazio di riempimento e
   # stampare la matrice con il formato specificato catch { r destroy }
   ::report:report r 5 style basicrpt
   for { set col 0 } { $col < [r columns]} { incr col } {
      r pad $col "
   }
   post_message "Clock domains failing timing\n[r printmatrix $failing_paths_matrix]"

   # Salvare il report in un file se {
   [catch { open $output_file_name w } fh] } {
      errore di tipo post_message "Impossibile aprire il file: $fh"   
   } else { mette $fh
      "Clock domains failing timing"
      r printmatrix2channel $failing_paths_matrix $fh
      catch { chiudi $fh } }
}

Il contenuto di questa pagina è il risultato della combinazione tra la traduzione umana e quella automatica del contenuto originale in lingua inglese. Questo contenuto è fornito soltanto a titolo di informazione generale e non ha pretese di completezza o accuratezza. In presenza di contraddizioni tra la versione in lingua inglese di questa pagina e la sua traduzione, fa fede la versione inglese. Visualizza la versione in lingua inglese di questa pagina.