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 procede, establezca output_file_name [get_current_revision].failing_clock_domains paquete requiera 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 agregar columnas 5 # El análisis se debe realizar 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 } } }