Bancos de prueba

Test benches

Salvador Eduardo Tropea

Universidad Tecnológica Nacional - FRBA
Historial de revisiones
Revisión 0.1.015-06-2011Revisado por: set
Creación del documento inicial
Revisión 1.0.019-09-2011Revisado por: set
Primer versión publicada
Revisión 1.0.122-09-2011Revisado por: set
Revisión de Rodrigo A. Melo y observación de Guillermo Güichal. Corregida información de descarga de los ejemplos.
Revisión 1.1.016-06-2012Revisado por: set
Agregado anexo sobre como usar Quartus II.
Revisión 1.1.128-10-2013Revisado por: set
Corregido línea de comandos para correr la simulación ghdl en Windows.

Tabla de contenidos
1. Introducción
1.1. Requisitos y objetivo
1.2. Conceptos
2. VHDL para simulación
2.1. Tiempo transcurrido
2.2. Constantes
2.3. Demoras de tiempo
2.3.1. Esperar a que una o más señales cambien
2.3.2. Esperar a que se cumpla una condición
2.3.3. Esperar una cantidad de tiempo determinada
2.3.4. Esperar en forma indefinida
2.3.5. Ejemplos de esperas
2.4. Caracteres y cadenas de caracteres
2.5. Informar y detener
2.6. Conversión a texto
2.7. Procedimientos y funciones
2.7.1. Declaración de argumentos
2.8. Manejo de archivos
2.8.1. Modelo de archivos usado en VHDL
2.8.2. Biblioteca y paquete necesarios
2.8.3. File handlers
2.8.4. Abrir y cerrar archivos
2.8.5. Lectura y escritura de líneas completas
2.8.6. Leyendo el contenido de una línea
2.8.7. Armando el contenido de una línea
2.8.8. Entrada y salida estándar
2.8.9. Ejemplo de escritura y lectura
2.8.10. Tipos IEEE
2.9. Demoras en señales
2.9.1. Modelo de demoras por transporte
2.9.2. Modelo de demoras inerciales
2.9.3. Asignación generalizada
2.9.4. Diferencia entre ambos tipos de demoras
3. Circuitos de uso frecuente
3.1. Generador de reloj
3.2. Generador de reset
3.3. Esqueleto básico de un banco de pruebas
4. Funcionamiento del simulador
5. Ejemplos de bancos de prueba
5.1. Prueba de valores extremos
5.1.1. Ejemplo asincrónico
5.1.2. Ejemplo sincrónico
5.2. Prueba por comparación con un modelo de referencia
5.2.1. Ejemplo asincrónico
5.2.2. Ejemplo sincrónico
5.3. Uso de archivos
5.3.1. Referencia desde un archivo
5.3.2. Estímulo y referencia desde un archivo
5.3.3. Verificación externa
5.3.4. Estímulos y verificación separados
A. Simulación de los ejemplos
A.1. Simulación en Linux
A.1.1. Instalación
A.1.2. Ejecutar ghdl
A.1.3. Instalar los ejemplos
A.1.4. Como compilar un banco de pruebas
A.1.5. Ejecutando el test bench
A.2. Simulación en Windows
A.2.1. Instalación
A.2.2. Ejecutar ghdl
A.2.3. Instalar los ejemplos
A.2.4. Como compilar un banco de pruebas
A.2.5. Ejecutando el test bench
B. Simulación con Quartus II y ModelSim
B.1. Instalación
B.1.1. Notas de instalación para Linux
B.2. Crear un proyecto en Quartus II
B.3. Configurar la ubicación de ModelSim
B.4. Selección del test bench
B.5. Análisis y elaboración
Lista de figuras
1-1. Banco de pruebas físico
1-2. Diagrama de conexiones de un banco de pruebas VHDL
2-1. Diferencia entre ambos tipos de demoras
5-1. Máquina de estados para verificar dígitos BCD
A-1. Acceso al gestor de paquetes
A-2. GHDL seleccionado en el gestor de paquetes
A-3. Diálogo de bienvenida (Next)
A-4. Punto de instalación (Next)
A-5. Confirmación de instalación (Install)
A-6. Progreso de instalación
A-7. Fin de la instalación (Finish)
A-8. Reiniciar el sistema (Yes)
A-9. Ejecutando cmd.exe
A-10. Abrir el archivo comprimido
A-11. Extraer el contenido
A-12. Indicamos donde queremos descomprimir el contenido
B-1. Crear un nuevo proyecto
B-2. Directorio y nombre del proyecto
B-3. Fuentes importados a nuestro proyecto
B-4. Selección de la FPGA
B-5. Selección de las herramientas
B-6. Resumen de las opciones seleccionadas
B-7. Ubicación de la herramienta de simulación
B-8. Selección del test bench
B-9. Listado de test benches disponibles
B-10. Datos del test bench
B-11. Análisis y elaboración del proyecto
B-12. Resultados de la simulación
Lista de ejemplos
2-1. Ejemplo de declaración de constantes
2-2. Dos procesos equivalentes, uno usando wait on
2-3. Usos de la sentencia wait
2-4. Ejemplos de señales tipo character y string
2-5. Forma genérica de la sentencia assert
2-6. Ejemplo de mensaje reportado por assert
2-7. Como obtener una representación en formato de texto
2-8. Sintaxis básica para funciones y procedimientos
2-9. Sintaxis básica para los argumentos
2-10. Declaraciones de argumentos omitiendo la clase y/o el modo
2-11. Biblioteca y paquete necesarios para el manejo de archivos
2-12. Ejemplo de como abrir y cerrar un archivo
2-13. Ejemplo de como abrir y cerrar un archivo
2-14. Ejemplo "Hola mundo" en VHDL
2-15. Escritura de datos en VHDL
2-16. Contenido del archivo test.txt obtenido
2-17. Lectura de datos en VHDL
2-18. Resultados mostrados por el ejemplo de lectura
2-19. Lectura y escritura de datos IEEE 1164
2-20. Ejemplo de demoras por transporte
2-21. Ejemplo de demoras inerciales
2-22. Demoras inerciales equivalentes
2-23. Generación de un pulso
2-24. Diferencia entre ambos tipos de demoras
3-1. Generación de reloj
3-2. Generación de reloj
3-3. Generación de reset
3-4. Generación de reset
3-5. Esqueleto de un testbench
5-1. Conversor de BCD natural a Aiken (bcd2aiken.vhdl)
5-2. Prueba de extremos del conversor (t_b2a_1.vhdl)
5-3. Prueba de extremos del conversor, uso de vectores (t_b2a_2.vhdl)
5-4. Contador decimal (contador.vhdl)
5-5. Verificación del contador decimal (t_contador.vhdl)
5-6. Comparación contra un modelo de referencia (t_b2a_3.vhdl)
5-7. Implementación de la máquina de estados (check_bcd.vhdl)
5-8. Verificación de la máquina de estados (t_check_bcd.vhdl)
5-9. Implementación en lenguaje C de un generador de código Aiken (gen_aiken.c)
5-10. Código Aiken generado (aiken.dat)
5-11. Valores de referencia desde un archivo (t_b2a_4.vhdl)
5-12. Implementación en lenguaje C de un generador de código Aiken, incluyendo el estímulo (gen_aiken_est.vhdl)
5-13. Código Aiken generado, incluyendo el estímulo (aiken_est.dat)
5-14. Estímulos y valores de referencia desde un archivo (t_b2a_5.vhdl)
5-15. Volcado de los resultados (t_b2a_6.vhdl)
5-16. Verificador de código Aiken (verif_aiken.c)
5-17. Implementación en lenguaje C de un generador de valores binarios (gen_bin.c)
5-18. Lectura de estímulos y volcado de los resultados (t_b2a_7.vhdl)
5-19. Verificador de código Aiken, con estímulo (verif_aiken_est.c)
Copyright © 2011 UTN FRBA - INTI - Ing. Salvador E. Tropea