Generación de estímulos

Vamos a ver la generación de estímulos habituales necesarios en nuestros bancos de pruebas realizados con Verilog.

Generación de reloj

Nuestra primera opción es mediante un always

Como puede observarse es fácil hacer este estímulo configurable con tan solo el cambio del valor del parámetro denominado «periodo».

Otra alternativa interesante es mediante un «initial» combinado con un «forever»

Generación de reset

Para la generación del reset, la recomendación básica es:

  • Si es un reset asíncrono, lo peor que nos puede pasar es que la desactivación del reset coincida en el diseño con la activación del reloj
  • Si es un reset síncrono, la peor situación que nos puede ocurrir es la coincidencia de los cambios de la señal de reset con el flanco activo del reloj, si bien esta situación la veremos con más detenimiento en el siguiente apartado por considerar en este caso esta señal como un estímulo síncrono cualesquiera.

Si nos centramos en el reset asíncrono, es muy importante tener en cuenta que la consideración aportada se refiere a:

» cómo le llegan esas señales a los flip-flops de mi diseño», con lo cual queremos decir que es muy posible que nuestros estímulos a nivel de puerto estén muy separados (por ejemplo medio ciclo) y sin embargo esas mismas señales, después de pasar por los árboles de distribución de la señal de reloj y de la señal de reset asíncrono, dichas señales sean percibidas por los flipflops prácticamente coincidentes y por tanto generando problemas de «removal» y de «recovery».

Veamos en el siguiente video como realizar esta generación del reset:

Generación de estímulo síncrono básico

Para empezar deberíamos considerar dos condicionantes fundamentales:

  1. El estímulo debe de ser adecuado para el funcionamiento del banco de pruebas para una simulación funcional (RTL) en la cual no hay retardos , y para una simulación Gate Level con retardos.
    • Para una simulación RTL el mayor riesgo es una condición de carrera en el momento del flanco activo de reloj. Eso se produce cuando el estímulo cambia en el mismo instante y se desconoce por tanto que va  a ser procesado en primer lugar por el simulador:
      • Bien en primer lugar el cambio del estímulo y luego el cambio de reloj
      • O bien primero el cambio de reloj y luego en segundo lugar el cambio del estímulo
    • El problema a evitar en las simulaciones temporales es que esos estímulos , al llegar a los flipflops que los procesan (estamos hablando de los destinos de esos paths ), no respetemos los márgenes de activación y de retención .

Vamos a ver con el siguiente vídeo, como podemos acometer de forma rápida y sencilla unos estímulos síncronos que nos eviten problemas de temporización en simulaciones Gate Level o problemas de carrera en simulaciones funcionales.

Generación avanzada de estímulos

El término avanzado es muy sufrido y puede significar muchas cosas. Puesto que estamos hablando de simulación de diseños y no de su hermano mayor (verificación de diseños) , nos vamos a conformar en considerar avanzado una generación de estímulos que:

  • Está encapsulada en tasks
  • Que dichos tasks puedan ser fácilmente empaquetados para su reuso posterior
  • Que dichos tasks no presenten problemas de llamadas reeentrantes paralelas
  • y finalmente que dichos tasks no tenga que modificarlos para reusarlos

Para ver estos aspectos vamos a visualizar le siguiente vídeo