Experiencias con Test Driven Development (TDD) para el diseño lógico (chip) en Verilog o VHDL


He buscado en la web y las discusiones/ejemplos parecen ser para el desarrollo de software tradicional. Dado que Verilog y VHDL (utilizados para el diseño de chips, por ejemplo, FPGAs y ASICs) son similares al desarrollo de software C y C++, parecería tener sentido. Sin embargo, tienen algunas diferencias que son fundamentalmente paralelas y requieren hardware para realizar pruebas completas.

¿Qué experiencias, buenas y malas, has tenido? Cualquier enlace que pueda sugerir en este específico ¿solicitud?

Ediciones/aclaraciones: 28/10/09: Estoy particularmente preguntando sobre TDD. Estoy familiarizado con hacer bancos de pruebas, incluidos los de autocomprobación. También soy consciente de que SystemVerilog tiene algunas características particulares para bancos de pruebas.

28/10/09: Las preguntas implícitas incluyen 1) escribir una prueba para cualquier funcionalidad, nunca usar formas de onda para la simulación y 2) escribir pruebas/bancos de pruebas primero.

29/11/09: En Los Estudios Empíricos Muestran Que El Desarrollo Impulsado por Pruebas Mejora Quality reportan para (software) TDD "La densidad de defectos de pre-liberación de los cuatro productos, medida como defectos por mil líneas de código, disminuyó entre 40% y 90% en relación con los proyectos que no usaban TDD. La dirección de los equipos informó subjetivamente un aumento del 15-35% en el tiempo de desarrollo inicial para los equipos que utilizan TDD, aunque los equipos acordaron que esto se compensó con la reducción de los costos de mantenimiento."La reducción de errores reduce el riesgo de tape-out, a expensas de la programación moderada impacto. Este también tiene algunos datos.

29/11/09: Principalmente estoy haciendo código de control y ruta de datos, no código DSP. Para DSP, la solución típica implica una simulación precisa de bits de Matlab.

03/02/10: La ventaja de TDD es asegurarse de que la prueba falla primero. Supongo que esto también podría hacerse con afirmaciones.

Author: Brian Carlton, 2009-10-27

8 answers

Escribo código para FPGAs, no ASICS... pero TDD sigue siendo mi enfoque preferido. Me gusta tener un conjunto completo de pruebas para todo el código funcional que escribo, e intento (no siempre con éxito) escribir testcode primero. Mirar las formas de onda siempre sucede en algún momento cuando estás depurando, pero no es una buena manera de validar tu código (IMHO).

Dada la dificultad de realizar pruebas adecuadas en el hardware real (estimular los casos de esquina es particularmente difícil) y el hecho de que una compilación VHDL toma segundos (vs una compilación "para hardware" que toma muchos minutos (o incluso horas)), ¡no veo cómo alguien puede operar de otra manera!

También construyo aserciones en el RTL mientras lo escribo para capturar cosas que sé que nunca deberían suceder. Aparentemente, esto se ve como un poco "raro", ya que hay una percepción de que los ingenieros de verificación escriben afirmaciones y los diseñadores de RTL no.

 25
Author: Martin Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-30 12:59:46

Uso VUnit para el desarrollo basado en pruebas con VHDL.

VUnit es una biblioteca Python que invoca el compilador VHDL y el simulador y lee los resultados de la simulación. También proporciona varias bibliotecas VHDL agradables que hacen que sea mucho más fácil escribir mejores bancos de pruebas, como una biblioteca de comunicación , logging library y checking library.

Hay muchas posibilidades ya que se invoca desde Python. Es posible ambos generan datos de prueba, así como comprobar los datos de salida de la prueba en Python. Vi este ejemplo el otro día donde usaron Octave - una copia de Matlab - para trazar los resultados de la prueba .

VUnit parece muy activo y varias veces he podido hacer preguntas directamente a los desarrolladores y obtener ayuda bastante rápido.

Un inconveniente es que es más difícil depurar errores de compilación, ya que hay muchas variaciones de funciones / procedimientos con el mismo nombre en biblioteca. Además, algunas cosas se hacen detrás de la escena mediante el preprocesamiento del código, lo que significa que algunos errores pueden aparecer en lugares inesperados.

 6
Author: Erasmus Cedernaes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-11 20:16:09

Las extensiones SystemVerilog del estándar IEEE Verilog incluyen una variedad de construcciones que facilitan la creación de conjuntos de pruebas exhaustivos para verificar diseños lógicos digitales complejos. SystemVerilog es uno de los Lenguajes de Verificación de Hardware (HVL) que se utilizan para verificar el chip ASIC diseños a través de simulación (en lugar de emulación o uso de FPGA).

Los beneficios significativos sobre un Lenguaje de Diseño de Hardware tradicional (Verilog) son:

  • restringido aleatorización
  • aserciones
  • recopilación automática de datos de cobertura funcionales y de aserción

La clave es tener acceso al software de simulación que soporta this recent (2005) standard. No todos los simuladores son totalmente compatibles las características más avanzadas.

Además del estándar IEEE, hay una biblioteca SystemVerilog de código abierto de los componentes de verificación disponibles en VMM Central ( http://www.vmmcentral.com ). Proporciona una razonable marco para crear un entorno de prueba.

También podría hacer más investigación sobre el tema mediante la búsqueda de la Verfication Guild forum (en inglés).

SystemVerilog no es el único HVL,y VMM no es la única biblioteca. Pero, yo recomendaría ambos, si usted tiene acceso al apropiado herramienta. He encontrado que esta es una metodología eficaz en la búsqueda de diseño bugs antes de que se convierta en silicio.

 4
Author: toolic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-28 01:47:02

No se mucho sobre diseño de hardware/chip, pero estoy profundamente en TDD, así que al menos puedo discutir la idoneidad del proceso con usted.

La pregunta que yo llamaría más pertinente es: ¿Con qué rapidez pueden sus pruebas darle retroalimentación sobre un diseño? Relacionado con eso: ¿Con qué rapidez puede agregar nuevas pruebas? ¿Y qué tan bien soportan sus herramientas la refactorización (cambiar la estructura sin cambiar el comportamiento) de su diseño?

El proceso TDD depende en gran medida de la "suavidad" del software - las buenas pruebas unitarias automatizadas se ejecutan en segundos (minutos en el exterior) y guían ráfagas cortas de construcción enfocada y refactorización. ¿Sus herramientas soportan este tipo de flujo de trabajo - alternando rápidamente entre escribir y ejecutar pruebas y construyendo el sistema bajo prueba en iteraciones cortas?

 3
Author: bradheintz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-03 20:34:59

Con respecto a las herramientas de refactorización para lenguajes de hardware, me gustaría señalar nuestra herramienta Sigasi HDT. Sigasi proporciona un IDE con analizador VHDL incorporado y refactorizaciones VHDL.

Philippe Faes, Sigasi

 2
Author: Philippe Faes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-11 09:52:23

ANVIL– Otra capa de interacción Verilog habla de esto algunos. No lo he probado.

 2
Author: Brian Carlton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-11 16:36:44

Nunca probé activamente TDD en un diseño RTL, pero tenía mis pensamientos sobre esto.

Lo que creo que sería interesante es probar este enfoque en relación con las afirmaciones. Básicamente, primero escribiría en forma de aserciones lo que asume/espera de su módulo, escribiría su RTL y más tarde puede verificar estas aserciones utilizando herramientas formales y/o simulación. En contraste con los casos de prueba "normales" (donde probablemente necesitaría escribir los dirigidos) debería tener mucho una mejor cobertura y las aseveraciones/suposiciones pueden ser útiles más adelante (por ejemplo, a nivel del sistema) también.

Sin embargo, no confiaría completamente en las afirmaciones, esto puede volverse muy peludo.

Tal vez usted puede expresar sus pensamientos sobre esto, así, como usted está pidiendo que supongo que usted lleva algunas ideas en su cabeza?

 1
Author: danielpoe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-28 15:54:36

¿Qué es TDD para usted? ¿Quiere decir tener todo su código ejercido por pruebas automáticas en todo momento, o va más allá para significar que las pruebas se escriben antes del código y no se escribe ningún código nuevo a menos que las pruebas fallen?

Sea cual sea el enfoque que prefiera, las pruebas de código HDL no son muy diferentes de las pruebas de software. Tiene sus ventajas (mucho mejor cobertura y profundidad de pruebas) y desventajas (difícil de configurar y engorroso en relación con el software).

He tenido muy buena experiencia con el empleo de Python y transactores HDL genéricos para la implementación de pruebas completas y automáticas para módulos HDL sintetizables. La idea es algo similar a lo que Janick Bergeron presenta en sus libros, pero en lugar de SystemVerilog, Python se usa para (1) generar código VHDL a partir de escenarios de prueba escritos en Python y (2) verificar los resultados escritos por los transactores de monitoreo que aceptan formas de onda del diseño durante la simulación.

Hay mucho más por escribir sobre esta técnica, pero no estoy seguro de en qué quieres centrarte.

 1
Author: Eli Bendersky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-10 18:38:30