Los que sois asiduos a este blog habréis notado que tiene un enfoque eminentemente práctico y pocas veces recurrimos a las simulaciones. Es verdad que la tarjeta BASYS 3 tiene un buen número de ledes -además de los cuatro displays de 7 segmentos- que ayudan mucho a la hora de hacer debugging y troubleshooting, sin embargo cuando los proyectos alcanzan cierta complejidad se hace indispensable disponer de una herramienta que permita depurar el código con facilidad. Ahí es donde entra en juego una herramienta muy útil que son los testbenches.
Un testbench es un código Verilog que permite simular las señales reales mediante la creación de estímulos, es como si creáramos un circuito que simula las entradas. Pues bien, el siguiente tutorial veremos como hacer testbenches con la suite Vivado.
Vamos a empezar por un testbench lo más sencillo posible. Utilizaremos como ejemplo una puerta AND.
Desde la ventana de trabajo de Vivado hacemos clic en +
En la siguiente ventana seleccionar la opción Add or create simulation sources.
Clic en Create File.
Poner un nombre al archivo. Una buena práctica es usar el mismo nombre que le archivo Verilog original seguido de _tb.
Clic en OK.
Clic en Finish.
Clic en OK.
Clic en Yes.
Haciendo clic en el explorador, desplegamos el archivo and_gate_tb.v y vemos en la ventana derecha el archivo que acabamos de crear.
Para escribir un testbench, básicamente hay que completar los siguiente pasos:
Declarar los registros (reg para las entradas) y los cables (wires las salidas), es decir hay que declarar la entradas y salidas input/output del módulo original como reg y wire en el módulo _tb.
Instanciar el módulo que vamos a verificar y poner un nombre, por ejemplo uut.
Generar los estímulos usando las palabras clave initial y always.
Especificar el fin de la simulación, es decir el stopwatch.
En la siguiente imagen se muestra en detalle los cuatro pasos que acabamos de explicar.
Una vez tenemos escrito el testbench, lo guardamos y hacemos clic en Run Simulation y luego Run Behavioral Simulation. Sale una ventana de progreso...
...y al cabo de unos segundos se abre la ventana de simulación de nuestro testbench.
Comprobamos como efectivamente la salida out de la puerta AND sólo pasa a nivel alto cuando ambas entradas son 1.
En el siguiente ejemplo veremos cómo crear señales de reloj.
Imaginar que tenemos una señal de reloj -o una señal PWM- que queremos controlar abriendo y cerrando su paso a un dispositivo, por ejemplo un driver para motores DC. Usaremos la puerta AND del ejemplo 1 a modo de interruptor, de manera que las señal de reloj sólo pasará si hacemos 1 la señal de enable aplicada en la otra entrada de la puerta AND.
Hacemos correr la simulación y efectivamente la señal de reloj clk_in solo se refleja en la salida cuando hacemos 1 la señal enable.
Eso es todo por el momento.
Próximamente añadiré algunos ejemplos con testbenches un poco más elaborados.
¡Hasta pronto!
Descarga el código Verilog de los ejemplos vistos en este tutorial en el enlace de aquí abajo.