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.
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 configuration
construcció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.
Recomiendo usar técnicas de verificación formal.
Escriba 2 conjuntos de afirmaciones:
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:
david tweed
cuántico231
cuántico231
Máquina virtual Shashank
Máquina virtual Shashank
Máquina virtual Shashank
Máquina virtual Shashank
cuántico231