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

Finalizar elegantemente una simulación de testbench VHDL

Cuando un testbench VHDL alcanza el final de su ejecución prevista, querrá que el simulador se detenga limpiamente y, si es posible, devuelva el control a cualquier script llamador. Este artículo repasa las técnicas más comunes y fiables para detener una simulación en los principales simuladores VHDL, con ejemplos de código para ModelSim, Vivado y scripts Tcl.

1. Uso del procedimiento finish (VHDL‑2008)

La rutina finish del paquete std.env es la forma más directa de terminar un testbench que ha completado sin errores. Compile solo el testbench en VHDL‑2008; el RTL puede permanecer en un estándar anterior.

use std.env.finish; ... SEQUENCER_PROC : process begin -- Inserte lógica de testbench aquí wait until stop_condition; report "Calling 'finish'"; finish; end process;

Por defecto, finish pedirá confirmación en la GUI para terminar. Si prefiere salida automática —especialmente en modo batch— añada el interruptor -onfinish stop a vsim:

vsim -onfinish stop work.using_finish_tb

En modo batch (vsim -c), el simulador sale limpiamente y el control regresa al shell, ideal para scripts de regresión:

jonas@ubuntu:~/stop_tb$ vsim -c -do 'vsim work.using_finish_tb; run -all' # … # ** Note: Calling 'finish' # Time: 1 ms Iteration: 0 Instance: /using_finish_tb # End time: 22:58:31 on Jun 21,2020, Elapsed time: 0:00:00 # Errors: 0, Warnings: 8 jonas@ubuntu:~/stop_tb$

Existen dos sobrecargas: procedure FINISH; y procedure FINISH (STATUS : INTEGER);. El valor de status depende del simulador, así que no se recomienda confiar en él para códigos de salida. En ModelSim puede establecer explícitamente el código de salida del shell con exit -code <value> en un script Tcl.

2. Uso del procedimiento stop (VHDL‑2008)

La rutina stop pausa la simulación —útil para inspección manual o reanudación posterior. Se comporta como un punto de interrupción.

use std.env.stop; ... SEQUENCER_PROC : process begin wait until stop_condition; report "Calling 'stop'"; stop; end process;

En un flujo dirigido por scripts, stop lo deja en un shell Tcl, así que el script se bloqueará a menos que emita exit manualmente. Por eso finish es generalmente preferido para ejecuciones automatizadas.

3. Aprovechar un fallo de aserción

Algunos diseñadores terminan un testbench causando deliberadamente un fallo de aserción. Este método funciona en todas las versiones de VHDL y no requiere importaciones extra:

SEQUENCER_PROC : process begin wait until stop_condition; assert false report "Test: OK" severity failure; end process;

Aunque garantiza la terminación del simulador, la consola reportará un failure aunque la prueba haya tenido éxito, lo que puede ser engañoso en herramientas de regresión automatizadas que tratan los fallos como errores.

4. Controlar la terminación con callbacks Tcl

Para control más flexible —como inspeccionar señales o hacer limpieza— puede vincular una señal VHDL a un callback Tcl. El testbench VHDL señala un booleano stop_condition cuando todos los casos de prueba terminan.

signal stop_condition : boolean; begin -- Ejemplo: alternar después de 1 ms stop_condition <= not stop_condition after 1 ms; SEQUENCER_PROC : process begin -- lógica de testbench wait; -- mantener el proceso inactivo end process; 

ModelSim

when {stop_condition} { stop echo "Test: OK" } run -all

Cuando stop_condition se vuelve verdadero, el callback se ejecuta, imprime un mensaje y pausa la simulación. Puede reemplazar stop con exit para salir del simulador inmediatamente.

Vivado

set sim_fileset sim_1 launch_simulation -simset [get_filesets $sim_fileset] add_condition -notrace stop_condition { stop puts "Test: OK" } run all

La bandera -notrace suprime la eco de comandos, manteniendo la salida de consola limpia.

Recomendación final

En todos los simuladores principales, el procedimiento VHDL‑2008 finish sigue siendo la opción más portable y amigable para scripts. Termina limpiamente la simulación tanto en entornos GUI como batch sin solicitudes interactivas persistentes.

No obstante, los callbacks Tcl ofrecen capacidades de depuración poderosas cuando necesita pausar la simulación e inspeccionar o manipular señales sobre la marcha.

Descargar proyectos de ejemplo

Los usuarios de ModelSim pueden recibir un archivo zip con cuatro testbenches ilustrativos enviando su dirección de correo a continuación. (Los usuarios de Vivado pueden replicar los ejemplos con mínimo esfuerzo.)

VHDL

  1. Derrotando el óxido: 5 estrategias probadas para preservar sus activos metálicos
  2. Creación de listas de cadenas en VHDL: Buenas prácticas y ejemplo
  3. Creación de un testbench dirigido por Tcl para un módulo VHDL de cerradura por código
  4. Implementación de un controlador PWM en VHDL: Diseño, simulación y demo en FPGA
  5. Generación de números aleatorios en VHDL: De uniforme a OSVVM
  6. Mejora la verificación de hardware con un testbench interactivo basado en Tcl
  7. Cómo construir un testbench de auto-comprobación en VHDL: Guía práctica
  8. Implementación de lista enlazada dinámica en VHDL con tipos protegidos y punteros de acceso
  9. Aprovechando procedimientos en-proceso para diseños FSM más limpios en VHDL
  10. Uso de funciones impuras en VHDL: Mejorando legibilidad y mantenibilidad de FSM
  11. Dominando funciones VHDL: Guía práctica para diseño eficiente