Estoy tratando de sintetizar un bloque lógico combinacional en verilog usando Xilinx Vivado. Estoy tratando de reducir la cantidad de luts y aún trato de encontrar la ruta crítica del circuito.
Muchas soluciones dicen que el análisis de tiempo se realiza de registro a registro. Sin embargo, si la salida se realiza como registros, el área de mi diseño aumenta.
¿Hay alguna forma de encontrar la ruta crítica del diseño de comportamiento sin usar registros de salida?
¿Cómo restringir los caminos sin registros?
Sí, hay una manera. Las rutas de tiempo no tienen que ser de registro a registro. Un puerto también puede ser un punto de inicio o un punto final. Si su bloque es completamente combinacional, todas las rutas serán desde los puertos de entrada a los puertos de salida.
Lo más importante aquí es definir un reloj virtual y retrasos de entrada/salida en un archivo XDC. Luego debe agregar el archivo al proyecto Vivado.
create_clock -name VCLK -period 10.0 -waveform {0 5.0}
set_input_delay 1.0 -clock [get_clocks VCLK] [get_ports IN1]
set_output_delay 2.0 -clock [get_clocks VCLK] [get_ports OUT1]
El ejemplo anterior dice que IN1
la señal llega al bloque 1ns después de VCLK
las subidas. Además, OUT1
tiene que ser fijado 2ns antes de VCLK
subidas. Dado que nuestro período de reloj es de 10 ns, la ruta desde IN1
hasta OUT1
tiene 7 ns (10-1-2) para finalizar la operación.
¿Cómo ver la ruta crítica en Vivado?
Una vez completada la implementación, haga clic en " Informes " en la parte inferior de la GUI de Vivado. A continuación, haga clic en " Informe de resumen de tiempo " en " Diseño de ruta ". Como alternativa, también puede buscar el archivo blabla_timing_summary_routed.rpt en el directorio del proyecto.
Este informe muestra las rutas críticas para todos los dominios de reloj. Como solo tiene un dominio de reloj, debería ver algo como a continuación.
From Clock: VCLK
To Clock: VCLK
Luego busque la sección " Rutas máximas de retardo ". Verá la ruta crítica debajo de ella.
No estoy usando Xilinx, pero los comandos parecen familiares con una herramienta que usé en el pasado.
Con un poco de suerte, el script "reportCriticalPaths" en la página 25 en Vivado Scripting Documentation es de ayuda. Básicamente, utiliza la salida de "get_timing_paths -delay_type $delayType -max_paths 50 -nworst 1" para enumerar las rutas en un archivo CSV.
Para obtener rutas críticas, probablemente necesite restricciones en sus rutas. En mi humilde opinión, puede usar "set_max_delay" para hacerlo. Establezca el retraso máximo en un número pequeño desde sus entradas combinatorias hasta las salidas combinatorias (para el análisis de tiempo) y probablemente obtendrá las peores rutas reportadas como infractoras. Por lo que recuerdo, ese es el tipo de truco que apliqué para estas cosas.
aditya pradeep
usuario154136
aditya pradeep
usuario154136