Introducción
Cuando un diseño para FPGA no consigue cumplir sus restricciones de tiempos (timing constraints), lo natural es examinar con detenimiento los caminos críticos (critical paths). Ese examen se hace sobre un informe de tiempos que muestra los retardos que provocan los distintos elementos lógicos a lo largo de cada camino (path).
Si no eres un usuario asiduo de las FPGA de Intel, quizá no sea tan evidente averiguar cómo se obtiene ese informe. Y lo que es peor: puede que estés mirando el informe equivocado sin darte cuenta.
Lo primero que conviene tener claro es el concepto de análisis de tiempos en varias esquinas (multi-corner timing analysis). Lo habitual es verificar que los tiempos de una FPGA son válidos comprobando que se cumplen las restricciones de tiempos en cuatro casos: con la temperatura mínima y máxima, combinadas con un modelo de tiempos «lento» (slow) y «rápido» (fast). Así pues, el análisis se hace para cuatro combinaciones o, como se suele decir, cuatro esquinas.
Por lo tanto, al examinar los caminos críticos conviene mirar los informes de tiempos de las cuatro esquinas. Este detalle se suele pasar por alto. Por ejemplo, TimeQuest normalmente genera un informe de tiempos para una sola esquina.
Así que en este post explico cómo obtener un informe que sea realmente útil. Los ejemplos están hechos con Quartus Prime 17.1 Lite.
Menciono aquí otros dos posts relacionados: uno en el que se analiza la relación entre las restricciones de entrada/salida y el informe de tiempos, y otro que experimenta un poco con scripts Tcl en TimeQuest.
Importante: Esta página explica cómo obtener el informe de tiempos para la comprobación de setup (tiempo de preparación). No obstante, también existen informes de tiempos para hold (tiempo de retención), recovery (recuperación) y removal (eliminación), que pueden delatar igualmente incumplimientos de las restricciones de tiempos.
Crear un informe para varias esquinas: método rápido con scripts
Primero, copia el siguiente script Tcl en un archivo, por ejemplo, timing.tcl:
create_timing_netlist
read_sdc
update_timing_netlist
foreach_in_collection op [get_available_operating_conditions] {
set_operating_conditions $op
report_timing -setup -npaths 20 -detail full_path -multi_corner \
-panel_name "Critical paths"
}
Ten en cuenta que el informe de tiempos está limitado únicamente al análisis de setup.
Que no te confunda la opción "multi_corner": cada llamada a report_timing cubre una sola esquina. No está claro que esta opción haga nada.
Por eso el script recorre las cuatro opciones con foreach_in_collection y genera un informe aparte para cada esquina.
Vamos a ponerlo en práctica:
- En Quartus, despliega el grupo TimeQuest en el panel de tareas (Task pane) y abre TimeQuest Timing Analyzer.
- En TimeQuest Timing Analyzer, elige Script > Run Tcl Script… en la barra de menú y selecciona el script Tcl (por ejemplo, timing.tcl).
- En el panel de informes (Report pane) de TimeQuest Timing Analyzer se añadirá una entrada llamada "Critical paths". Haz clic en Multi-Corner Summary. Los paneles principales se llenarán con la lista de caminos y sus detalles.
- Para exportar toda la información de los caminos a un archivo de texto, haz clic con el botón derecho en Multi-Corner Summary y selecciona "Export…". Ponle nombre al archivo de salida con el sufijo .rpt. Los informes HTML no son compatibles con esta exportación (quedarán vacíos).
En esa misma entrada aparecerán también cuatro informes separados, uno por cada esquina. En versiones anteriores de Quartus solo aparecerán estos, es decir, no habrá Multi-Corner Summary.
Generar solo informes HTML o de texto
Las herramientas pueden generar unos informes HTML muy apañados, bastante más cómodos de leer que la propia interfaz gráfica (GUI) de TimeQuest. Pero, desgraciadamente, cada uno de esos informes cubre una sola esquina. Con este script se generan cuatro informes HTML independientes, uno por cada esquina (es un montón de archivos, scripts de JQuery, CSS y demás. Mucho ornamento, pero no es un informe multiesquina).
Guarda el siguiente script como timing-html.tcl:
#project_open myproj
create_timing_netlist
read_sdc
update_timing_netlist
foreach_in_collection op [get_available_operating_conditions] {
set_operating_conditions $op
report_timing -setup -npaths 20 -detail full_path -multi_corner \
-file "timing_paths_$op.html" \
-panel_name "Critical paths for $op"
}
Para obtener un informe de texto sencillo, cambia el argumento de la opción -file y haz que el sufijo sea .rpt o .txt en lugar de .html.
Fíjate en el comando "project_open", que está comentado al principio del script. Si se descomenta y se sustituye "myproj" por el nombre real del proyecto, se pueden generar los informes HTML desde la línea de comandos con algo como:
$ /path/to/quartus/bin/quartus_sta -t timing-html.tcl
Sin embargo, no he encontrado la manera de generar así un informe multiesquina.
Para que estos informes se generen en cada implementación (cosa que se recomienda), añade una línea como la siguiente al archivo QSF:
set_global_assignment -name TIMEQUEST_REPORT_SCRIPT relative/path/to/timing-html.tcl
Cuando el script Tcl se incluye en un archivo QSF de esta manera, el script no debe usar project_open.
Usar solo la interfaz gráfica
También se puede obtener un informe multiesquina sin más que apuntar y hacer clic:
- En Quartus, despliega el grupo TimeQuest en el panel de tareas (Task pane) y abre TimeQuest Timing Analyzer.
- Dentro del panel de tareas del Timing Analyzer, haz doble clic en "Update Timing Netlist".
- En el mismo panel, baja hasta "Custom Reports" y haz doble clic en "Report Timing…".
- Se abrirá un cuadro de diálogo. Elige entre setup, hold, recovery o removal. Por lo demás, deja los valores por defecto y haz clic en "Report Timing", más abajo.
- En el panel de informes se añadirá una entrada que dice "Report Timing". Despliega esa entrada y haz clic con el botón derecho sobre ella. En el menú que se abre, haz clic en "Generate in All Corners".
- Haz clic en el grupo "Multi Corner Summary". Si quieres, exporta el informe tal y como se ha explicado antes.