Ejemplo de Timing Analyzer: Informe de resumen de relojes con fallas

author-image

Por

El script de esta página realiza el análisis de tiempo de instalación, espera, recuperación y extracción en todos los relojes de su diseño en todas sus condiciones de funcionamiento compatibles. El script crea una tabla que enumera información sobre todos los análisis que fallaron la sincronización. El script escribe la tabla en un archivo llamado <revision>.failing_clock_domains. Si no fallaron los análisis, el script escribirá un mensaje en el archivo en el que se indica que no hubo errores en los análisis.

Puede utilizar el script para obtener una descripción general rápida y sencilla de los resultados del análisis de tiempo defectuosos para un diseño. Si guarda el script en un archivo llamado failing_clock_domains.tcl, utilice el siguiente comando para ejecutarlo.

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

Aquí tiene un ejemplo de la tabla que genera el script si algún análisis falla la sincronización. La tabla incluye el slack del peor caso, el slack negativo total (TNS), el nombre del reloj, la condición de funcionamiento en la que se produjo el fallo y el tipo de análisis que falló.

Dominios de reloj que fallan en la sincronización

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

Copie y pega el siguiente código TCL y guárdelo en un archivo para utilizar el script.

# Informe si un diseño tiene dominios de reloj con holga negativa.
# Si hay dominios de reloj con slack negativo, coloque esa información en
# una tabla y anote en un archivo.
# Cambie el nombre del archivo aquí si
corresponde establecer output_file_name [get_current_revision].failing_clock_domains

paquete requiere el paquete struct::matrix
require report # Cree una matriz para contener información sobre las rutas

de acceso
falladas establecidas failing_paths_matrix [::struct::matrix];
$failing_paths_matrix se deben realizar las columnas de adición de 5

análisis n.º para todas las condiciones de funcionamiento
establecidas all_operating_conditions_col [get_available_operating_conditions]

# Realice estos tipos de análisis para cada conjunto de dominio de reloj analysis_list
[list "setup" "hold" "recovery" "removal"]]

# Pase por todas las condiciones de funcionamiento
foreach_in_collection operating_conditions_obj $all_operating_conditions_col {

   # Establezca la condición de funcionamiento,  actualizar la lista de tiempo
   set_operating_conditions $operating_conditions_¹ update_timing_netlist # Obtener el nombre de texto en
   inglés de las condiciones de funcionamiento establecidas operating_conditions_display_name   [get_operating_conditions_info -display_name $operating_conditions_¹]

   # Realice cada tipo de análisis   
   forecad analysis_type $analysis_list {

      # Obtenga el nombre del tipo de análisis si tenemos que imprimirlo
      analysis_display_name [cadena para dar título $analysis_ escriba]

      # Obtenga información sobre todos los dominios de reloj
      establecidos clock_domain_info_list [get_clock_domain_info -${analysis_type}] # Recorra todos los dominios de

      reloj y extraiga cualquier dominio que tenga # slack negativo
      forecad domain_info $clock_domain_info_list {

         # El domain_info tiene el nombre del reloj, su vago y su TNS.
         Cantidad de extracción de esos.      
         foreconference { clock_name slack endpoint_tns edge_tns } $domain_info { break }

         # Si el slack es negativo, coloque una fila de información en el informe en la tabla si {
         0 > $slack } {
            $failing_paths_matrix add row [list $slack $endpoint_tns $clock_name \
               $operating_conditions_display_name $analysis_display_name] } } # Terminó de realizar todos los dominios de
         reloj para un análisis particular de la sincronización de la cantidad
      (configuración,  hold, etc.)  
   }
   # Terminado de revisar todos los tipos de análisis de una condición de n.° de operación determinada
   } # Terminado de pasar por todas las condiciones de funcionamiento #
Prepararse para escribir un archivo con el resumen de resultados

# Si hay filas en la matriz, hay rutas que están fallando
la sincronización. # Tenemos que imprimir la tabla con esa información. Si no hay
nro. filas en la tabla, no hay rutas que fallen en la sincronización, así que escriba un mensaje de éxito
si { 0 == [$failing_paths_matrix rows] } {

   # Print out un mensaje rápido post_message
   "No hay dominios de reloj fallando la sincronización"

   # Si hay un error al abrir el archivo, imprima un mensaje que dice
   # eso. De lo contrario, decir que no hay dominios fallando la sincronización
   si { [catch { open $output_file_name w } fh] } {
      post_message error -type "No se pudo abrir el archivo: $fh"
   } más { pone $fh   
      "No hay dominios de reloj fallando la sincronización" catch { cerrar $fh } } else { # Ordenar las filas de
      la matriz de modo que el peor
   vago es primero
   $failing_paths_matrix sort rows -increasing 0 # Put en una fila de

   encabezado
   $failing_paths_matrix insert row 0[list "Slack" "End Point TNS" "Clock" \
      "Condiciones de funcionamiento" "Análisis de temporización" ]   

   # Necesitamos un estilo definido para imprimir la tabla de capturas de resultados
   { ::report::rmograma basicrpt }
   ::report::d ef masculino básico {{cap_rows 1}} { conjunto de
      datos [dividir "[cadena de repetición " " [columnas];"]
      top set [split " [string repeat "+ - " [columns]+"]
      bottom set [top get]
      topcapsep set [top get]
      topdata set [data get]
      topcapsep enable
      bottom enable
      tcaption $cap_rows 
   } # Crear el

   informe, configure las columnas para que tengan un espacio de resalte y
   #print out la matriz con el formato especificado
   catch { r destroy }
   ::report::report r 5 style basicrpt
   for { set col 0 } { $col < [r columns]} { incr col } {
      r pad $col ambas " " } post_message "Dominios de reloj fallando la
   sincronización\n[r printmatrix $failing_paths_matrix]"

   # Guarde el informe en un archivo si {
   [catch { open $output_file_name w } fh] } {
      post_message error de tipo -type "No se pudo abrir el archivo: $fh"   
   } else { pone $fh
      "Dominios de reloj que están fallando la sincronización"
      r printmatrix2channel $failing_paths_matrix $fh
      catch { close $fh } }
}

El contenido de esta página es una combinación de la traducción humana y automática del contenido original en inglés. Este contenido se ofrece únicamente para su comodidad como información general y no debe considerarse completa o precisa. Si hay alguna contradicción entre la versión en inglés de esta página y la traducción, prevalecerá la versión en inglés. Consulte la versión en inglés de esta página.