¿Existe una forma "estándar" de verificar HDL de una máquina de estado?

Las máquinas de estado son un patrón que se usa muy a menudo para escribir diseños sincrónicos. Sirven como controladores en el diseño. Entonces, ¿hay una forma estándar de verificarlos si están escritos usando VHDL o Verilog/SystemVerilog? ¿O es mejor usar alguna GUI para dibujarlos y luego generar código desde la GUI?

Por forma estándar me refiero a un patrón de código utilizado para verificarlos. Siempre hay diferentes formas de "despellejar al gato", pero tal vez haya un método que sea muy popular.

La cuestión es que las máquinas de estado pueden ser bastante grandes y uno tendría que escribir código para verificar cada rama en la máquina de estado, lo que lleva a una gran cantidad de código en el banco de pruebas.

Editar: solo me estoy ocupando de la verificación del fsm en sí mismo, para verificar que coincida con el diagrama de estado del fsm y que no existan errores en la codificación rtl.

Tengo curiosidad por ver lo que otros dicen sobre esto. He escrito muchas máquinas de estado, pero no, no tengo un proceso de verificación estándar. Para mí, escribir HDL para implementar un diseño de máquina de estado dado no es realmente la parte difícil; la parte difícil es asegurarse de que el diseño de la máquina de estado en sí tenga el comportamiento que requiere la aplicación en todas las combinaciones de entrada posibles.
He pensado que si existe una herramienta GUI específica para esto y la usamos, podemos dar por sentado que el código es correcto siempre que el diagrama de la máquina de estado sea correcto. Como usted señaló, escribir todo ese código de banco de pruebas para verificar todas las rutas posibles que debe tomar la máquina de estado, esto es molesto incluso para las máquinas de estado simples. El principal problema es si me doy cuenta de que la máquina de estado debe cambiarse y luego el código debe reescribirse o cambiarse. es tedioso
Ahora, básicamente, hace algún tiempo hice un curso de VHDL integral de Doulos en el Reino Unido. Fue un curso fantástico. En él también enseñaron cómo escribir una máquina de estado en VHDL, la idea era separar los procesos síncronos que asignan el siguiente estado al estado actual del proceso asíncrono (no de reloj) que genera valor para el siguiente estado a partir del estado actual y las entradas actuales. . Eso fue muy interesante ya que elimina muchas trampas en el diseño de la máquina de estado. Sin embargo, si bien cubrieron exclusivamente el diseño de la máquina de estado, esto no es así para la verificación de la máquina de estado.
Stateflow de MathWorks es una herramienta GUI para codificar FSM.
@quantum231 ModelSim de Mentor Graphics también define la cobertura de máquina de estados finitos que se utiliza para la cobertura de estado y transición de estado. Ver mi respuesta para más detalles.
Sí, se puede encontrar un enfoque unificado para verificar las FSM en este enlace: verificacionacademy.com/verification-horizons/…
¡La mejor manera es hacer una verificación formal! Actualicé mi respuesta después de probarlo yo mismo. ¡Ya no tendrás que preocuparte por ese caso de la esquina!
Muy bien Shashank bhai. Traté de leer acerca de cómo hacer una verificación formal. Me encontré con el concepto de usar propiedad y aserción (SVA o PSL). Encontré mención de verificación de equivalencia lógica. También encontré mención de la verificación del modelo. Encontré el nombre del programa llamado Jasper. Sin embargo, en todo esto, no pude encontrar nada que me diga cómo yo mismo puedo hacer una verificación formal de mi diseño. Ojalá también se enseñara formal a nivel universitario.

Respuestas (2)

La verificación es una gran parte del proceso de diseño; en un diseño complejo, no sería inusual dedicar tanto tiempo, o incluso más, a la verificación que al diseño real. Siendo ese el caso, una pregunta que es esencialmente 'cómo se verifican los diseños complejos' es bastante amplia.

En resumen, si el diseño hace frente a una gran cantidad de escenarios, como lo indica que hay muchos estados en su máquina de estado, un buen punto de partida para el conjunto de pruebas sería tener pruebas separadas que estimulen el diseño para replicar todos. estos escenarios. Luego puede usar las herramientas de cobertura de código para ver qué transiciones de estado se han cubierto y agregar nuevas pruebas hasta que todo esté cubierto. Puede administrar diferentes casos de prueba utilizando la configurationconstrucción en VHDL

Comúnmente podría darse el caso de que haya escenarios que sean variaciones de un tema, por ejemplo, recibir un paquete de algún tipo, pero con diferentes longitudes de paquete, longitudes que están fuera de los límites, etc. En estos casos, puede escribir pruebas que generen varios paquetes de longitud aleatoria; luego deberá asegurarse de que se cumplan todos sus casos extremos, por ejemplo, las longitudes mínima y máxima, el mínimo más uno, el máximo menos uno, etc., y que su diseño haga lo correcto en todos los casos. También es posible que deba probar combinaciones de entradas para el diseño y, nuevamente, estas combinaciones podrían generarse mediante un caso de prueba, en lugar de escribirlas manualmente una por una.

Hay una serie de metodologías que intentan ayudar a gestionar el proceso de generación de estímulos y registro de los resultados. Yo uso OSVVM , que aprendí a través de un curso hace un par de años. Me gusta porque usa el mismo lenguaje VHDL al que estoy acostumbrado, junto con un poco de secuencias de comandos TCL, y no requiere ningún 'extra' para trabajar con mi simulador. Hay muchas alternativas, que no intentaré enumerar aquí, pero una búsqueda rápida en Google de 'verificación fpga' arroja muchos recursos.

Solo quise probar la máquina de estado por sí sola, que su comportamiento coincida con el diagrama de fsm de estado
La mejor manera de probarlo es como parte del sistema que controla. Si lo prueba de forma aislada, corre el riesgo de no proporcionarle el mismo estímulo que recibe en el sistema real. De todos modos , debe crear un banco de pruebas para el sistema en su conjunto , por lo que también puede crear un banco de pruebas que lo haga todo.

Recomiendo usar técnicas de verificación formal.

Escriba 2 conjuntos de afirmaciones:

  1. Afirmaciones para verificar que cada transición de estado ocurra en la condición correcta.
  2. Afirmaciones para verificar cada salida transiciones solo en el estado previsto.

A veces, puede escribir una sola afirmación para verificar toda la funcionalidad de FSM, como hice aquí: https://electronics.stackexchange.com/a/505842/238188

Para FSM más pequeños, dibújelos en una GUI y genere código HDL o genere el diagrama de transición de estado a partir del código HDL e inspeccione el diagrama.

Conozco 2 soluciones para estos 2 casos:

  1. StateFlow de MathWorks puede generar el código HDL a partir de un diagrama de máquina de estado.
  2. ModelSim de Mentor Graphics tiene un visor FSM incorporado para ver la máquina de estado generada a partir de HDL.