Panel Sources de Vivado

1.8 Implementación

Implementación

La Implementación (Implementation) es la fase de diseño físico que transforma la netlist lógica (mapeada en la síntesis) en una configuración de hardware completamente enrutada sobre la matriz de la FPGA.

A diferencia de la síntesis, que trabaja con lógica, la implementación trabaja con coordenadas físicas y recursos de interconexión. Su objetivo principal es ubicar los componentes en sitios específicos del chip (Placement) y conectarlos mediante las pistas de metal disponibles (Routing), garantizando que se cumplan las restricciones de tiempo (timing) y de ubicación física (pines) definidas en los archivos de restricciones (XDC).

1.8.1 Ficheros de restricciones

En la fase de implementación se utilizan dos ficheros de restricciones XDC, se encuentran en la carpeta constraints del proyecto:

  • 01_timing.xdc: Define las restricciones temporales (Input/Output Delay) que guían la optimización del diseño para cumplir con los requisitos de tiempo.

  • 02_basys3_io.xdc: Asigna los pines físicos de la FPGA a los puertos lógicos del diseño, definiendo el conexionado con los periféricos de la placa Basys 3.

 1    # --------------------------------------------------------------------------------
 2    # Archivo: 02_basys3_io.xdc
 3    # Descripción: Asignación de pines y configuración de voltaje para Basys3
 4    # --------------------------------------------------------------------------------
 5    ## Switches (Entradas A y B)
 6    ##                      <pin>           <port>
 7    set_property PACKAGE_PIN V17 [get_ports {A[0]}]
 8    set_property PACKAGE_PIN V16 [get_ports {A[1]}]
 9    set_property PACKAGE_PIN W16 [get_ports {A[2]}]
10    set_property PACKAGE_PIN W17 [get_ports {A[3]}]
11    set_property PACKAGE_PIN W15 [get_ports {A[4]}]
12    set_property PACKAGE_PIN V15 [get_ports {A[5]}]
13    set_property PACKAGE_PIN W14 [get_ports {A[6]}]
14    set_property PACKAGE_PIN W13 [get_ports {A[7]}]
15
16    set_property PACKAGE_PIN V2  [get_ports {B[0]}]
17    set_property PACKAGE_PIN T3  [get_ports {B[1]}]
18    set_property PACKAGE_PIN T2  [get_ports {B[2]}]
19    set_property PACKAGE_PIN R3  [get_ports {B[3]}]
20    set_property PACKAGE_PIN W2  [get_ports {B[4]}]
21    set_property PACKAGE_PIN U1  [get_ports {B[5]}]
22    set_property PACKAGE_PIN T1  [get_ports {B[6]}]
23    set_property PACKAGE_PIN R2  [get_ports {B[7]}]
24
25    ## Buttons (Selectores ALU)
26    set_property PACKAGE_PIN W19 [get_ports {ALU[1]}]
27    set_property PACKAGE_PIN T17 [get_ports {ALU[0]}]
28
29    ## LEDs (Salidas)
30    set_property PACKAGE_PIN XXX [get_ports {SALIDA[0]}]
31    set_property PACKAGE_PIN XXX [get_ports {SALIDA[1]}]
32    set_property PACKAGE_PIN XXX [get_ports {SALIDA[2]}]
33    set_property PACKAGE_PIN XXX [get_ports {SALIDA[3]}]
34    set_property PACKAGE_PIN XXX [get_ports {SALIDA[4]}]
35    set_property PACKAGE_PIN XXX [get_ports {SALIDA[5]}]
36    set_property PACKAGE_PIN XXX [get_ports {SALIDA[6]}]
37    set_property PACKAGE_PIN XXX [get_ports {SALIDA[7]}]
38
39    set_property PACKAGE_PIN XXX  [get_ports {Z}]
40
41    # --------------------------------------------------------------------------
42    # Configuración Eléctrica y de Dispositivo
43    # --------------------------------------------------------------------------
44    #
45    # Estándar I/O: Aplicamos LVCMOS33 a todos los puertos
46    # Configuración para Entradas (Switches y Botones)
47    set_property IOSTANDARD LVCMOS33 [get_ports {A[*] B[*] ALU[*]}]
48    # Configuración para Salidas (LEDs)
49    set_property IOSTANDARD LVCMOS33 [get_ports {SALIDA[*] Z}]
50
51    # Configuración de compresión de Bitstream y Voltaje de Bancos
52    set_property CFGBVS VCCO [current_design]
53    set_property CONFIG_VOLTAGE 3.3 [current_design]

El archivo está incompleto, sustituye los valores XXX por los pines correctos. Verifica además, que el fichero 02_basys3_io.xdc contiene las directivas que corresponden con la asignación de pines mostrada en la figura siguiente.

fig1

Conexionado señales entrada/salida en la placa BASYS3.


1.8.2 Iniciar la implementación

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

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

Cuando el proceso termine seleccione Open Implementation Design y comprueba en la pestaña Messages si hay errores o warnings.

1.8.3 Informes de resultados de implementación

Tras realizar el proceso de implementación 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 implementación, mientras que el comando report_timing analiza los tiempos de propagación de las señales en el circuito.

Análisis de resultados de implementación

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 ____.

  • Compara estos resultados con los obtenidos tras la síntesisis. ¿Han cambiado los recursos hardware utilizados? ¿Y el tiempo máximo de propagación? Justifica las diferencias observadas.