Panel Sources de Vivado

1.7 Síntesis lógica

Síntesis lógica

La Síntesis Lógica es el proceso que traduce una descripción comportamental de alto nivel (RTL en VHDL/Verilog/SystemVerilog) en una estructura hardware realizable.

Este proceso transforma el código fuente en una netlist a nivel de puertas lógicas y biestables interconectados, realizando tres tareas fundamentales:

Traducción: Convierte las sentencias del lenguaje en bloques lógicos genéricos.

Optimización: Minimiza las ecuaciones booleanas para reducir área o aumentar velocidad (eliminando lógica redundante).

Mapeo Tecnológico: Sustituye los operadores genéricos por las primitivas específicas de la arquitectura de la FPGA objetivo (LUTs, Flip-Flops, Slices DSP, Bloques de RAM), cumpliendo con las restricciones (Constraints) definidas por el usuario.

Durante este proceso, las restricciones de diseño incluidas en el archivo .xdc actúan como una guía de optimización. El motor de síntesis utiliza las restricciones temporales (relojes y retardos) para calcular el costo de las diferentes estructuras lógicas. Basándose en estas restricciones, la herramienta decide si debe aplanar niveles lógicos, duplicar registros para reducir el fan-out, o mapear operaciones aritméticas a bloques DSP dedicados en lugar de lógica distribuida.


1.7.1 Fichero de restricciones

Las herramientas de síntesis utilizan las restricciones temporales definidas en el fichero .xdc para optimizar el diseño. En este laboratorio utilizaremos el archivo de restricciones temporales llamado 01_timing.xdc, que se encuentra en la carpeta constraints.

 1     # --------------------------------------------------------------------------------
 2     # Archivo: 01_timing.xdc
 3     # Descripción: Restricciones temporales (Virtual Clock y I/O Delays)
 4     # --------------------------------------------------------------------------------
 5
 6     # 1. Crear el Reloj Virtual (v_clk)
 7     # Definimos un reloj de 50 MHz (20.0ns).
 8     create_clock -name v_clk -period 20.0
 9
10     # --------------------------------------------------------------------------
11     # 2. Restricciones de Entrada (Input Delay)
12     # --------------------------------------------------------------------------
13     # El diseño es combinacional. Indicamos que los datos (A, B, ALU) llegan
14     # 2ns después del flanco del reloj virtual.
15     # Usamos -max para setup (camino lento) y -min para hold (camino rápido).
16     set_input_delay -clock v_clk -max 2.0 [get_ports {A[*] B[*] ALU[*]}]
17     set_input_delay -clock v_clk -min 0.5 [get_ports {A[*] B[*] ALU[*]}]
18
19     # --------------------------------------------------------------------------
20     # 3. Restricciones de Salida (Output Delay)
21     # --------------------------------------------------------------------------
22     # Indicamos que las salidas (SALIDA, Z) deben estar estables 1.5ns antes
23     # del siguiente flanco para cumplir con el setup del dispositivo externo.
24     # Usamos -max para setup (camino lento) y -min para hold (camino rápido).
25     set_output_delay -clock v_clk -max 1.5 [get_ports {SALIDA[*] Z}]
26     set_output_delay -clock v_clk -min 0.0 [get_ports {SALIDA[*] Z}]
27
28     # --------------------------------------------------------------------------
29     # NOTA SOBRE LAS CONDICIONES DE CONTORNO:
30     # Los valores asignados (2.0 ns de entrada, 1.5 ns de salida y 20 ns de periodo)
31     # se utilizan aquí como ejemplo ilustrativo. En una implementación real, estos
32     # parámetros dependen estrictamente de las condiciones de contorno físicas del
33     # sistema completo, tales como:
34     #   1. Las especificaciones de tiempo (Datasheets) de los chips externos.
35     #   2. La longitud y capacitancia de las pistas de la PCB (retardos de vuelo).
36     #   3. La frecuencia de operación requerida por el bus del sistema.
37     # --------------------------------------------------------------------------

El diseño con el que estamos trabajando es combinacional, no incluye señal de reloj, por eso incluimos un reloj virtual con respecto al cual se definen las restricciones temporales de entrada y salida.

Con este conjunto de restricciones, estamos indicando que disponemos para evaluar el resultado de la ALU de 20 ns, menos 2 ns que perdemos en la llegada de la entrada, y menos 1.5 ns que debemos reservar al final para el setup del dispositivo externo, la lógica interna de la ALU (FPGA) dispone por lo tanto de un máximo de 16.5 ns de retardo de propagación para generar el resultado válido.

Los valores temporales aquí definidos no son arbitrarios, sino que dependen de las condiciones de contorno bajo las cuales operará el sistema. En un entorno de producción, el Input Delay y el Output Delay se calcularían basándose en los tiempos de propagación de la PCB y los requisitos de setup y hold de los dispositivos periféricos conectados a la FPGA. Para este laboratorio utilizamos estos valores como un ejemplo práctico, para ilustrar cómo las restricciones temporales influyen en el proceso de síntesis.

1.7.2 Iniciar la síntesis

En Flow Navigator, hacer doble clic en Synthesis ‣ Run Synthesis

Puedes ver la evolución del proceso abriendo la ventana Project Summary ico_project_summary, y en la pestaña Messages.

Cuando el proceso de síntesis termina se abre un cuadro de diálogo, si ha concluido con éxito, seleccionamos Open Synthesized Design. Comprueba en la pestaña Messages si hay errores o warnings.

1.7.3 Informes de resultados de síntesis

Tras realizar el proceso de síntesis se pueden obtener informes de resultados. El comando report_utilization (en la pestaña Tcl Console) genera un informe que muestra los recursos hardware utilizados tras la síntesis, mientras que el comando report_timing analiza los tiempos de propagación de las señales en el circuito.

Análisis de resultados de síntesis

Utilizando los comandos report_utilization y report_timing, anote los siguientes datos:

  • Recursos hardware utilizados:

    • Slice LUTs:

    • Slice Registers:

    • Bonded IOBs:

  • Primitivas:

    • IBUF:

    • OBUF:

    • LUT2:

    • LUT4:

    • LUT5:

    • CARRY4:

  • Tiempo máximo de propagación: ____ ns, correspondiente al camino crítico

    entre las señales ____ y ____.