En esta sesión nos vamos a dedicarnos a la cobertura funcional y a mejorar nuestro plan de verificación con el fin de conseguir una grado de cobertura especificado.
Para ello el esquema que vamos a seguir es el siguiente:
- Determinación de la cobertura funcional con el componente coverage
- Generación de nuevas secuencias y valoración del grado de cobertura obtenido
- Control de generación de estímulos en base a grado de cobertura
Cobertura funcional
La cobertura funcional es ejercida fundamentalmente en systemverilog mediante los covergroups. Podéis observar en esta web un apartado específico para dichos elementos: VERIFICACIÓN->COBERTURA FUNCIONAL.
Lo importante ahora en UVM es saber donde vamos a definir nuestros covergroups. Lo haremos en el componente disponible en nuestro enviroment que recibe el nombre de «coverage». Observad en el siguiente vídeo (en el punto 2 de su esquema) cómo lo hacemos para el caso del radicador.
Visto el procedimiento vamos a establecer como mínimo plan de verificación, el que probemos casos en los que el numerador y denominador sean positivos y negativos y que tengamos combinaciones pos-pos, pos-neg, neg-pos y neg-neg. ¿Cómo hariamos los covergroups?
Generación de varias secuencias
Podemos establecer varios tests, cada uno de ellos con una secuencia o podemos hacer un test que encadene varias secuencias.
Vamos a hacer esto último. Ya tenemos definida una primera secuencia que genera numeradores y denominadores positivos. Vamos a generar tres nuevas secuencias para el resto de combinaciones que necesitamos comprobar en nuestro plan de verificación.
Recordad:
- Generaremos la secuencia con la plantilla adecuada.
- Generaremos la secuencia virtual asociada con la plantilla adecuada.
- Definiremos lo que debe de hacer cada nueva secuencia.
- Habilitaremos y desabilitaremos constraints para que haga la combinación que nos interesa.
- Definiremos un número de repeticiones
- Pondremos una evaluación en cada repetición del grado de cobertura alcanzado (mediante el método $get_coverage()) para que superado un cierto umbral dejemos de hacer repeticiones
El objetivo a conseguir es superar el 90% de cobertura total (en la que se tenga en cuenta covergroups y aserciones)
Propuesta de continuación
Si os queda tiempo y viendo como hemos solucionado este primer banco de pruebas UVM, sería interesante establecer otras propuesta en la que utilicemos en lugar de un agente DOS.
- Uno de ellos activo y el otro pasivo.
- El activo dedicado a los operandos de entrada
- El pasivo dedicado a los resultados
- El activo deberá tener generación de estímulos y monitorización de entradas en base a la señal de start que actua como validación de las entradas
- El pasivo deberá tener monitorización de salidas en base a la señal de fin que actua como validación de las salidas