Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> VHDL

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Este tutorial le guía en el uso de los núcleos Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) de Xilinx Vivado para depurar y monitorizar diseños VHDL en el chip. Al final, sabrá cómo insertar sondas, configurar disparadores y capturar el comportamiento preciso de las señales sin necesidad de equipo externo.

Visión general

A lo largo del artículo haremos referencia a capturas de pantalla de Vivado. Haga clic en cada imagen para ampliarla. Utilice la barra lateral o la navegación emergente en dispositivos móviles para un acceso rápido.

ILA y VIO

El IP ILA permite sondear señales internas del FPGA en tiempo real, mientras que el IP VIO permite controlar señales internas desde Vivado. Ambos son gratuitos, altamente configurables y se integran perfectamente en el flujo de trabajo de Vivado.

Requisitos

  1. Una placa FPGA de Xilinx
  2. Vivado Design Suite (2020.2 o posterior)
  3. Conocimientos básicos de VHDL

En los ejemplos utilizaremos el Kit de Evaluación Kintex‑7 KC705, pero los pasos son aplicables a cualquier FPGA moderno de Xilinx.

Descargar el proyecto de ejemplo

Descargue el archivo ZIP que contiene el diseño de ejemplo y los archivos VHDL. Abra ila_tutorial.xpr en Vivado para explorar el diseño, o siga leyendo para crearlo desde cero.

Crear un proyecto con Vivado

Inicie Vivado y haga clic en Create Project en la pantalla de bienvenida.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Avance por el asistente: asigne el nombre ila_tutorial (sin espacios), seleccione RTL Project, y añada los fuentes counter.vhdl y counter_top.vhdl. Active Copy sources into project y continúe.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Añada el archivo de restricciones top.xdc, copiándolo al proyecto. Ajuste los pines de reloj y LED para que coincidan con su placa, y establezca el período de reloj correcto.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Seleccione su placa de la lista y haga clic en Finish para abrir el proyecto.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Descripción general del diseño de ejemplo

El ejemplo consta de dos contadores de 4 bits encadenados. counter.vhdl implementa un contador que se incrementa cuando está habilitado y afirma una salida trigger de 1 bit entre las cuentas 12 y 15.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Declaración de entidad:

 ---------------------------------------------------------------------------- -- DECLARACIÓN DE ENTIDAD. ---------------------------------------------------------------------------- ENTITY counter IS PORT(clk : IN STD_LOGIC; -- Reloj principal reset : IN STD_LOGIC; -- Reset, activo en alto enable : IN STD_LOGIC; -- Habilita el siguiente contador trigger : OUT STD_LOGIC -- Dispara el siguiente contador ); END ENTITY; 

Señales internas:

Uso de atributos (se explicará más adelante):

 ATTRIBUTE MARK_DEBUG : STRING; ATTRIBUTE MARK_DEBUG OF count : SIGNAL IS "true"; 

Lógica secuencial:

 seq_proc: PROCESS (reset, clk) BEGIN -- for seq_proc IF (reset = '1') THEN count <= (OTHERS => '0'); trigger_o <= '0'; ELSIF rising_edge(clk) THEN IF (enable = '1') THEN count <= count + 1; IF (count > x"B" AND count <= x"F") THEN trigger_o <= '1'; ELSE trigger_o <= '0'; END IF; END IF; END IF; END PROCESS; 

counter_top.vhdl instancia dos contadores. counter_1_inst está siempre habilitado y proporciona el reloj a counter_2_inst a través de su salida trigger. Por consiguiente, counter_2_inst se incrementa solo cuatro veces por cada ciclo de 16 ciclos de counter_1_inst.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Crear un núcleo VIO para RESET

Generaremos un VIO que controle la entrada reset del diseño, permitiendo su conmutación manual desde Vivado.

Abra IP Catalog, busque VIO, haga doble clic en VIO (Virtual Input/Output) y cámbiele el nombre a vio_reset. Establezca Input Probe Count a 0 y Output Probe Count a 1.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Configure la sonda de salida: anchura = 1, valor inicial = 0x1, luego haga clic en OK y Generate.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Después de la síntesis, declare un componente en counter_top.vhdl e instancielo. No olvide establecer flatten_hierarchy en None antes de volver a sintetizar.

 COMPONENT vio_reset PORT( clk : IN STD_LOGIC; probe_out0 : OUT STD_LOGIC_VECTOR(0 DOWNTO 0) ); END COMPONENT; 

Insertar sondas de depuración

Las señales pueden sondearse mediante tres métodos:

  1. Desde el código VHDL (mediante atributos MARK_DEBUG).
  2. Desde el Netlist o Esquemático (clic derecho → Mark Debug).
  3. Desde un archivo XDC/TCL (no se trata aquí).

Inserción desde archivo VHDL

Declare el atributo MARK_DEBUG una vez por archivo y aplíquelo a las señales deseadas:

 ATTRIBUTE MARK_DEBUG : STRING; ATTRIBUTE MARK_DEBUG OF count : SIGNAL IS "true"; 

En el diseño sintetizado, count aparecerá bajo Unassigned Debug Nets con un icono de error.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Inserción desde el Netlist

Navegue a Netlist o Schematic, localice la red trigger, haga clic derecho y elija Mark Debug para ambos contadores.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Crear el núcleo de depuración ILA

Abra Set Up Debug desde el IP Catalog. Vivado listará todas las redes de depuración y sus dominios de reloj. Mantenga las cuatro señales para este tutorial.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Configure la profundidad FIFO del ILA (1024 es suficiente) y active Capture control. Finalice el asistente; Vivado genera un núcleo ILA y un archivo de restricciones.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Guarde la restricción como ila_core.xdc. Este archivo aplica los atributos de depuración, crea el núcleo ILA, configura cada sonda e instancia un dbg_hub que conecta el núcleo con Vivado. Actualice la frecuencia de reloj del hub para que coincida con su diseño.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Vuelva a ejecutar síntesis, luego implementación, y genere el bitstream. Abra el Hardware Manager, conecte automáticamente y programe el dispositivo junto con el archivo de sondas .ltx.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Configurar disparadores del ILA

Tras la programación, aparece el panel de control del ILA. Active la pestaña VIO y elimine ventanas innecesarias. Añada la sonda reset al VIO para poder conmutarla durante la captura.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Configure un disparador en counter_1_inst/trigger con condición de flanco ascendente y una ventana de pre-disparo de 32 muestras.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Ejecutar ILA con un disparador

Arme el disparador (el estado cambia a waiting for trigger) y conmute reset a 0. Una vez que el disparador se activa, el ILA registra 32 muestras antes del evento y continúa hasta llenar el FIFO.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Al alejar el zoom se revela también el comportamiento de counter_2_inst.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Ejecutar ILA con múltiples disparadores

Para escenarios complejos, encadene varios disparadores. Por ejemplo, dispare cuando counter_1_inst/count == 9 y counter_2_inst/count > 2, dividiendo el FIFO en cuatro ventanas.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Modo de rearme automático

Active Auto re‑trigger para capturar eventos esporádicos o de alta frecuencia. Configure un único disparador, establezca la profundidad del FIFO y arme el núcleo.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Modo de captura

El modo de captura registra solo las muestras que cumplen una condición global. Por ejemplo, capture cuando counter_1_inst/trigger == 1 Y counter_2_inst/trigger == 0 simultáneamente.

Dominando Xilinx Vivado: Analizador Lógico Integrado (ILA) y Entrada/Salida Virtual (VIO) para Depuración

Conclusión

ILA y VIO son herramientas potentes y gratuitas para la depuración en chip. Aprovechando sondas, múltiples disparadores y modos de captura, puede monitorizar y controlar con precisión diseños FPGA complejos directamente desde Vivado.

VHDL

  1. Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
  2. RightHand Robotics y Element Logic presentan sistema integrado de picking robótico de piezas
  3. Expandiendo horizontes cloud: Nuevas zonas, contenedores y estrategias multicloud
  4. Fundamentos de C#: Entrada y salida esenciales
  5. Dominando la Entrada y Salida en C++: Guía Práctica
  6. Dominando la entrada/salida en C: scanf() y printf() explicados
  7. Dominando Entrada y Salida en programación C
  8. Dominando VHDL y Verilog: Escribiendo lógica combinacional y secuencial limpia
  9. Dominando Latches D: Diseño, Operación y Diferencias Clave
  10. Dominando E/S e importación de módulos en Python: Guía práctica
  11. Dominar Entrada y Salida en Java: Imprimir, Leer y Formatear Datos