Algunas preguntas generales sobre la verificación desde cero

No soy un gran experto en verificación de hardware, quiero decir que sé cuál es el propósito de la verificación (básicamente verificar si el sistema es lo que se espera que haga) y he usado algunas herramientas para la verificación, generalmente diseño un equivalente en Software que usa lenguaje C/C++ y luego comparo de alguna manera el equivalente de VHDL/Verilog con esto.

Sin embargo, parece que la mayoría de estas herramientas no son gratuitas, me preguntaba si es posible usar alguna técnica de verificación muy simple desde cero. La mayoría de estas herramientas, hasta donde yo sé, usan lógica de primer orden después de analizar tanto el software como el código HDL. ¿Existe algún enfoque muy simple (aparte de la simulación exhaustiva) que podría implementar fácilmente por sí mismo para verificar la equivalencia?

Tal vez haya algún algoritmo muy simple que se pueda usar fácilmente, y no lo conozco.

Gracias

¿Y cómo verifica que su equivalente de software es equivalente a algo?
Suponiendo que la versión del software sea correcta, debo verificar que el hardware sea equivalente al software. El ejemplo más estúpido que se me ocurre es la E/S de equivalencia, supongo que proporciono la misma entrada para sw y hw y quiero verificar que la salida también sea la misma.

Respuestas (2)

La verificación es un campo enorme. Al igual que en el software, hay muchos niveles de verificación, por ejemplo, cobertura de código, cobertura de ruta, etc. Todo depende de la aplicación. LED parpadeante: compruebe la frecuencia en simulación; el sistema de control que mantiene su turboventilador por debajo de su punto de fusión: es mejor que lo pruebe.

Podemos dividir la verificación en dos categorías principales: funcional y formal. Su cadena de herramientas generalmente viene con capacidades de verificación funcional, es decir, coloca algo en la entrada y verifica la salida. Digamos que está diseñando un sumador. Lo que puede hacer es crear un banco de pruebas, poner cada combinación posible en la entrada y comparar la salida. Esto es lo que necesitaba hacer recientemente para un sumador Kogge-Stone que estaba diseñando para un FPGA.

Si gasta algo de dinero, puede comprar herramientas que pueden hacer cobertura de código, cobertura de ruta, etc. De hecho, también puede hacerlo con algunas herramientas de código abierto. Si gasta mucho dinero, puede obtener una herramienta de verificación formal, que prueba que su diseño es equivalente a la especificación. Esto puede ser realmente importante en algunos campos.

Sugeriría comenzar a buscar en bancos de prueba, si no ha realizado una verificación antes. Esto le dará una buena introducción a la verificación funcional.

No estoy seguro acerca de la afirmación de que "toilchain viene con verificación funcional". En mi experiencia, las cadenas de herramientas vienen sin nada. Tienes que crear tus propios bancos de prueba para verificar algo. A menos que haya comprado alguna IP, que generalmente viene con un conjunto completo de verificación, que con frecuencia representa el 95% del código IP completo. Todavía +1.
@AliChen Quiero decir que vienen con simulación. Son capaces de completar la verificación funcional cuando se les proporciona un banco de pruebas. Para la verificación formal, en realidad necesita herramientas adicionales. Edité la respuesta para mayor claridad.

Si entiendo la pregunta correctamente, necesita convertir su modelo de software C/C++ en un banco de pruebas de verificación, usando System Verilog, C# o algo así. Podría ser incluso sencillo. Luego, debe conectar este modelo de banco de pruebas al hardware HDL en su entorno de diseño HDL. Para automatizarlo un poco y evitar la comparación visual de la forma de onda, su banco de pruebas puede/debe incluir una variedad de controles lógicos de sus vectores de E/S en puntos críticos de tiempo. Por lo general, este proceso requiere el 90 % del tiempo de diseño y ninguna herramienta puede hacer este trabajo por usted, ya sea simple o compleja.

No estoy seguro de entender tu respuesta. Tomemos como ejemplo un sumador de 32 bits, en C/C++ el modelo sería solo una función... En el hardware, podría querer implementar un sumador con anticipación. Sin embargo, un sumador es un sumador, por lo que la relación de entrada y salida no cambia. Entonces, nuevamente, por ejemplo, podría querer verificar que para cada par de entrada dado a HDL y C, la salida resultante es la misma. ¿Está diciendo que en este caso usaría el modelo C para construir un banco de pruebas adecuado para la verificación?
Un sumador no es simplemente "un sumador". Los sumadores se pueden canalizar para aumentar la velocidad o se pueden implementar en microcódigo, por lo que la salida se puede retrasar y el "software" debe saber cuándo es aceptable verificar la salida. El hardware no se limita a la "relación de entrada-salida". En la mayoría de los casos, el hardware son máquinas de estados finitos terriblemente complicadas que generan secuencialmente una enorme cantidad de combinaciones de señales, todas las cuales deben validarse. Es por eso que un banco de pruebas puede ser más complicado que el propio hardware.