Introducción:
Los simuladores nos permiten verificar el funcionamiento de nuestra descripción de hardware sin necesidad de pasar a la síntesis. Todos los simuladores importantes convierten nuestro código HDL en un binario ejecutable que se comporta como nuestro hardware simulando los cambios de señales. A través del uso de testbenches (bancos de prueba) es posible realizar una verificación del funcionamiento de nuestro hardware e informar si algo no funciona como se esperaba. Usando assert e incluso printf (existen bibliotecas para esto) es posible generar información de diagnóstico desde nuestro testbench. Adicionalmente es posible visualizar los cambios en las señales utilizando software para tal fin. Una opción muy atractiva es la de generar información parseable desde nuestro banco de pruebas para luego procesarla y/o visualizarla con herramientas adecuadas.
Bancos de prueba:
Hemos escrito un apunte sobre los conceptos básicos para realizar la verificación en VHDL. Este apunte es parte de la materia Técnicas Digitales I de la Universidad Tecnológica Nacional (Facultad Regional Buenos Aires) y asume que ya se poseen conocimientos básicos de VHDL. Versión navegable: Bancos de prueba Versión PDF+HTML+SGML: Bancos de prueba Ejemplos del apunte: Ejemplos
GHDL:
GHDL es un excelente simulador para VHDL. El mismo puede usarse para simular testbenches (bancos de prueba). Es posible indicarle a GHDL que genere un archivo con las formas de onda para luego analizarlas en busca de algún problema, las mismas se generan en formato VCD y a partir del 0.19 también en un formato interno llamado GHW que es más completo y recomendable. GHDL soporta los estándares IEEE 1076-1987 y IEEE 1076-1993 con mucha más fidelidad que muchas herramientas comerciales. GHDL es parte de la distribución Debian GNU/Linux (Sarge y posteriores), en las mismas el paquete se llama ghdl. Los fuentes del mismo y binarios para GNU/Linux se pueden encontrar en el site de GHDL. También existen binarios para SPARC, Mac OSX y Windows, pero no todos están disponibles en el site original. La documentación de GHDL se encuentra en formato info o bien en formato HTML en la página web del proyecto. En la sección Ejemplos para GHDL hay ejemplos que muestran como usar el GHDL Los usuarios Debian que deseen ahorrar algo de espacio en disco y usar la versión 0.27 en Sarge o posterior pueden bajar el siguiente paquete creado por nuestro proyecto: GHDL 0.27 oficial en .deb. Los usuarios de Windows pueden descargar la versión 0.25 empaquetada en formato MSI, muy simple de instalar: GHDL 0.25 para Windows El paquete incluye el GTKWave. Se optó por empaquetar la 0.25 ya que las versiones posteriores (hasta 0.29.1) tenían algunos problemas.
Ejemplos para GHDL:
GHDL es un compilador de línea de comandos y tiene algunas particularidades que pueden resultar un tanto extrañas aún para programadores experimentados. Esto es porque GHDL toma ideas de como funcionan otros simuladores comerciales y de como funciona GNAT. A modo de introducción al mundo GHDL nos hemos tomado la libertad de adaptar un par de ejemplos de la documentación y escribir unos shell script que muestran como usar GHDL, GTKWave y bakalint. Para descargarlos: Ejemplos para GHDL
Generador de testbench:
Muchas veces la escritura de testbenches sencillos donde un patrón de entrada debe corresponderse con un patrón de salida puede resultar tediosa y monótona. Para estos casos se ha creado la herramienta llamada natebege, que genera automáticamente un testbench a partir de la descripción de los patrones de entrada y salida deseados. natebege es un script escrito en Perl por lo que debería poder usarse en cualquier plataforma donde exista un intérprete Perl. La idea de natebege es que nosotros sólo necesitamos escribir una especie de tabla de verdad de nuestro componente y luego generamos automáticamente el banco de pruebas. Al ejecutar el banco de pruebas el mismo nos informará si alguna de las condiciones falló. Una desventaja de natebege es que la tabla de verdad hay que escribirla usando la sintaxis de Perl. Esto implica que debemos o bien basarnos en los ejemplos o bien aprender algo de Perl. La ventaja es que si nuestra tabla de verdad es compleja es posible generar los valores de entrada y los valores de salida esperados usando código escrito en Perl. Para descargarlo: natebege Versión Debian GNU/Linux: natebege
|